Boa noite pessoal,
Já postei esse mesmo esquema em outro tópico,
fiz algumas mudanças e achei melhor abrir outro tópico.
A lógica do script é a mesma fazer a consulta no banco do mk-auth, com o resultado da consulta cria um script para o mikrotik com login, senha, ip, mac de cada cliente,
importa o script para o mikrotik para autenticação local em caso de uma falha no mk-auth.
simplifiquei mais a consulta ao banco,
e agora tem a opção de exportar para o mikrotik só o necessário, separando os clientes por ramais, tipo de autenticação com o wireless access-list ou não.
os passos para configuração são os mesmos do outro topico, a consulta era feita assim
http://ip_do_seu_mk-auth/mikrotik/index.php?id=seu_token_unico
Agora temos outro cenário abaixo
----------
exemplo 1
ramal 1
ip do ramal 1 é: 192.168.10.100
tipo de autenticação do ramal 1 é: pppoe
wireless access-list: sim
----------
A consulta para o ramal 1 será assim:
http://ip_do_seu_mk-auth/mikrotik/index.php?id=seu_token_unico&ramal=192.168.10.100&pppoe=s&hotspot=n&wireless=s
ou seja
pppoe=s (sim)
hotspot=n (não)
wireless=s (sim)
A consulta vai retornar um script apenas dos clientes com o tipo de autenticação pppoe e wireless access-list do ramal 192.168.10.100
----------
exemplo 2
ramal 2
ip do ramal 2 é: 192.168.10.200
tipo de autenticação do ramal 2 é: hotspot e pppoe
wireless access-list: não
----------
A consulta para o ramal 2 será assim:
http://ip_do_seu_mk-auth/mikrotik/index.php?id=seu_token_unico&ramal=192.168.10.200&pppoe=s&hotspot=s&wireless=n
ou seja
pppoe=s (sim)
hotspot=s (sim)
wireless=n (não)
A consulta vai retornar um script apenas dos clientes com o tipo de autenticação pppoe e hotspot sem o pacote wireless access-list do ramal 192.168.10.200
Vamos as mudanças
qual a diferença desse método para o outro que postei?
dessa forma terá linhas do script mikrotik bem menores, se não trabalho com wireless access-list do mikrotik então não tem necessidade de ter essas linhas no script
vou refazer o passo a passo
1º passo
baixe o arquivo mikrotik.zip
descompacte o arquivo, dentro da pasta mikrotik está o arquivo index.php,
2º passo
Envie a pasta mikrotik para o diretorio var/www do seu mk-auth
para saber se esta tudo ok, teste digitando em seu navegador
http://ip_do_seu_mk-auth/mikrotik
deve aparecer uma mensagem acesso restrito... em seguida vai redirecionar para o seu website
ai vem um segredinho! no web admin do seu mk-auth em dados da empresa o Token unico: cinco dígitos que devem ser exclusivo do seu provedor,
é usado para gerar a tabela de segurança de clientes. ele será usado aqui como id para liberar a consulta. (uma mini segurança)
altere se for necessário, porem saiba que a tabela de segurança dos clientes também sera alterada.
Agora teste digitando em seu navegador da seguinte forma
http://ip_do_seu_mk-auth/mikrotik/index.php?id=seu_token_unico&ramal=ip_do_ramal&pppoe=s&hotspot=s&wireless=s
agora sim, devem aparecer os registros dos clientes, você não vai conseguir ler porque esta sem formato html
então tente exibir o código fonte da página em seu navegador (se for o chrome Ctrl+u)
agora sim dá para entender!
3º passo
São os scripts do mikrotik
2 scripts um executa o outro,
o que isso faz?
o importar_backup_mikrotik inicia , executa o exportar_backup_mkauth
que faz a consulta no banco de dados do mk-auth, se a consulta foi concluida importa o resultado para files do mikrotik e executa o comando /import file-name=mikrotik.rsc
script: importar_backup_mikrotik
#===============================
# IMPORTAR BACKUP PARA O MIKROTIK
# JONAS OLIVEIRA
#===============================
# NAO ALTERAR NADA AQUI
#===============================
:global backup "false";
:execute script=exportar_backup_mkauth;
:local counter "0";
:while ( $backup != true && $counter < 5 ) do={
:set counter ($counter+1)
:delay 1s;
}
if (($backup = "true") && ([/file find name=mikrotik.rsc] != "" )) do={
/import file-name=mikrotik.rsc;
:log warning "Backup Foi Importado Com Sucesso!";
} else={
:log error "Backup Nao Foi Importado!";
};
#===============================
script: exportar_backup_mkauth
este é o único que deve alterar!
supondo que o ip do mk-auth é 172.31.255.2 e o ip do ramal onde vai rodar o script é 172.31.255.1
o token único é 12345 e eu quero todos os pacotes neste script de backup
então meu script ficaria assim:
#===============================
# EXPORTAR BACKUP MKAUTH
# JONAS OLIVEIRA
#===============================
#== IP MK-AUTH OU DOMINIO SEM http://
:global MKAUTH "172.31.255.2";
#===============================
#== ID SECRETO
:global ID "12345";
#===============================
#== IP DO RAMAL
:global RAMAL "172.31.255.1";
#== HOTPOT
:global HOTSPOT "s";
#== PPPOE
:global PPPOE "s";
#== WIRELESS
:global WIRELESS "s";
#===============================
# NAO ALTERE DAQUI PARA BAIXO
#===============================
:global backup "false";
:log warning "Iniciando Exportacao!";
/tool fetch mode=http url="http://$MKAUTH/mikrotik/index.php\?id=$ID&ramal=$RAMAL&pppoe=$PPPOE&hotspot=$HOTSPOT&wireless=$WIRELESS" src-path=index.php dst-path=mikrotik.rsc;
:set backup "true";
#===============================
Arquivo index.php
<?php
/* EXPORTAR BACKUP PARA MIKROTIK */
/* SO ALTERE O QUE FOR NECESSARIO */
# WIRELESS NIVEL DE SINAL (WIRELESS)
$mim_sinal = "78"; // Minimo nivel de sinal
$max_sinal = "120"; // Maximo nivel de sinal
# SERVIDORES DNS (PPPOE)
$dns_server1="189.38.95.95"; // GigaDNS1
$dns_server2="189.38.95.96"; // GigaDNS2
# LOCAL-ADDRES E REMOTE-ADDRESS (PPPOE)
$local_address = "Local-1"; // Geralmente Local-1
$remote_address = "Remoto-1"; // Geralmente Remoto-1
# COMENTARIO (PPPOE E HOTSPOT E WIRELESS)
$comment = "mkauth"; // Comente nas regras
# SERVIDOR HOTSPOT (HOTSPOT)
$server = "hotspot1"; // Geralmente hotspot1
/* NAO ALTERAR DAQUI PARA BAIXO */
// Mensagem de erro
$error = '<div style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #cc6600; background-color: #ffffcc; margin: 7px 7px 7px 7px; border: 1px solid #CC6600; padding: 5"><p><img src="/admin/imagens/icon-atencao.png" hspace="5" vspace="5" border="0" align="right" /><strong> Aviso!</strong></p><p> acesso restrito...</p></div><meta http-equiv="refresh" content="4; url=../index.php">';
// Conexao ao banco
$hostdb = "localhost";
$userdb = "root";
$passdb = "vertrigo";
$tabledb = "mkradius";
$conecta = mysql_connect($hostdb, $userdb, $passdb) or die (mysql_error());
@mysql_select_db($tabledb, $conecta) or die (mysql_error());
# PROTEGER O ARQUIVO DE ACESSO NAO AUTORIZADO
$proteg_arq = mysql_query("SELECT token FROM `sis_provedor` WHERE 1") or die (mysql_error());
$senha_arq = mysql_fetch_assoc($proteg_arq);
if (isset($_REQUEST['id']) && ($_REQUEST['id'] != $senha_arq['token']) || ($_REQUEST['id'] == NULL) || ($_REQUEST['ramal'] == NULL)){
exit($error);
}
// Recebe os dados
$wireless=$_REQUEST['wireless'];
$hotspot=$_REQUEST['hotspot'];
$pppoe=$_REQUEST['pppoe'];
$ramal=$_REQUEST['ramal'];
// Profiles
$busca_profiles = mysql_query("SELECT radgroupreply.`groupname`, radgroupreply.`value`
FROM `radgroupreply` WHERE `attribute` = 'Mikrotik-Rate-Limit'
ORDER BY `groupname` ASC") or die (mysql_error());
$count_profiles = mysql_num_rows($busca_profiles);
// Clientes ativos nao bloqueados
$busca_clientes = mysql_query("SELECT sis_cliente.`login`, sis_cliente.`tipo`, sis_cliente.`senha`,
sis_cliente.`ip`, sis_cliente.`mac`, sis_cliente.`plano`,
sis_cliente.`ramal`
FROM `sis_cliente`
WHERE ativo2 = 's' AND `bloqueado` = 'nao' AND `ramal` = '".$ramal."'
UNION ALL
SELECT sis_adicional.`username`, sis_adicional.`tipo`, sis_adicional.`senha`,
sis_adicional.`ip`, sis_adicional.`mac`, sis_adicional.`plano`,
sis_adicional.`ramal`
FROM `sis_adicional`
WHERE `bloqueado` = 'nao' AND `ramal` = '".$ramal."'") or die (mysql_error());
// Remove profiles
if (mysql_num_rows($busca_profiles) > 0 ){
// Remove profiles pppoe
if ($pppoe == "s"){
echo'/ppp profile remove [find comment="'.$comment.'"];
';
}
// Remove profiles hotspot
if ($hotspot == "s") {
echo'/ip hotspot user profile remove [find session-timeout="23:59:00"];
';
}
// Adicionar profiles
while ($profile = mysql_fetch_array($busca_profiles)) {
// Profile pppoe
if ($pppoe == "s") {
echo'/ppp profile add name="'.$profile['groupname'].'" rate-limit="'.$profile['value'].'" use-encryption=yes local-address='.$local_address.' comment="'.$comment.'" remote-address='.$remote_address.' dns-server='.$dns_server1.','.$dns_server2.' change-tcp-mss=yes;
';
}
// Profile hotspot
if ($hotspot == "s") {
echo'/ip hotspot user profile add name="'.$profile['groupname'].'" rate-limit="'.$profile['value'].'" session-timeout="23:59:00" transparent-proxy=no;
';
}
// Fim profiles
}
}
// Remove regras antigas
if (mysql_num_rows($busca_clientes) > 0){
// Remove secret pppoe
if ($pppoe == "s"){
echo'/ppp secret remove [find comment="'.$comment.'"];
';
}
// Remove user hotspot
if ($hotspot == "s"){
echo'/ip hotspot user remove [find comment="'.$comment.'"];
';
}
// Remove wireless access-list
if ($wireless == "s"){
echo'/interface wireless access-list remove [find comment="'.$comment.'"];
';
}
// Adiciona novas regras
while ($cliente = mysql_fetch_array($busca_clientes)) {
// pppoe com ip fixo
if ($cliente['ip'] != NULL && $cliente['tipo'] == "pppoe" && $pppoe == "s") {
echo'/ppp secret add name="'.$cliente['login'].'" password="'.$cliente['senha'].'" profile="'.$cliente['plano'].'" remote-address="'.$cliente['ip'].'" caller-id="'.$cliente['mac'].'" comment="'.$comment.'" service=any disabled=yes;
';
// wireless
if ($cliente['mac'] != NULL && $wireless == "s") {
echo'/interface wireless access-list add interface=all forwarding=no authentication=yes signal-range=-'.$mim_sinal.'..'.$max_sinal.' mac-address="'.$cliente['mac'].'" disabled=yes comment='.$comment.';
';
}
}
// pppoe sem ip fixo
if ($cliente['ip'] == NULL && $cliente['tipo'] == "pppoe" && $pppoe == "s") {
echo'/ppp secret add name="'.$cliente['login'].'" password="'.$cliente['senha'].'" profile="'.$cliente['plano'].'" caller-id="'.$cliente['mac'].'" comment="'.$comment.'" service=any disabled=yes
';
// wireless
if ($cliente['mac'] != NULL && $wireless == "s") {
echo'/interface wireless access-list add interface=all forwarding=no authentication=yes signal-range=-'.$mim_sinal.'..'.$max_sinal.' mac-address="'.$cliente['mac'].'" disabled=yes comment='.$comment.';
';
}
}
// hotspot com ip fixo
if ($cliente['ip'] != NULL && $cliente['tipo'] == "hotspot" && $hotspot == "s") {
echo'/ip hotspot user add name="'.$cliente['login'].'" password="'.$cliente['senha'].'" profile="'.$cliente['plano'].'" address='.$cliente['ip'].' mac-address="'.$cliente['mac'].'" comment="'.$comment.'" disabled=yes server='.$server.';
';
// wireless
if ($cliente['mac'] != NULL && $wireless == "s") {
echo'/interface wireless access-list add interface=all forwarding=no authentication=yes signal-range=-'.$mim_sinal.'..'.$max_sinal.' mac-address="'.$cliente['mac'].'" disabled=yes comment='.$comment.';
';
}
}
// hotspot sem ip fixo
if ($cliente['ip'] == NULL && $cliente['tipo'] == "hotspot" && $hotspot == "s") {
echo'/ip hotspot user add name="'.$cliente['login'].'" password="'.$cliente['senha'].'" profile="'.$cliente['plano'].'" mac-address="'.$cliente['mac'].'" comment="'.$comment.'" disabled=yes server='.$server.';
';
// wireless
if ($cliente['mac'] != NULL && $wireless == "s") {
echo'/interface wireless access-list add interface=all forwarding=no authentication=yes signal-range=-'.$mim_sinal.'..'.$max_sinal.' mac-address="'.$cliente['mac'].'" disabled=yes comment='.$comment.';
';
}
}
// FIM
}
}
?>
Respostas
esse tool fetch irá ajuda a resolver muita coisa no mk-auth, vlw amigo...
Com certeza Pedro Filho, já faço muita coisa aqui com essa ferramenta.
as páginas de aviso, bloqueio e manutenção com address-list.
setar o plano 15 sem precisar derrubar a sessão do cliente.
e outras particularidades aqui.
Qualquer coisa... estou a disposição!
Pedro Filho disse:
Caraca essa ferramenta eu ainda nao conhecia /tool fetch consegui fazer ele enviar SMS via torpedus...
procurava uma forma de enviar SMS pelo mikrotik sem ter que plugar um modem nele, agora eh possivel...
OBRIGADO por compartilhar seu conhecimento...
rapais so ainda nao consegui enviar a mensagem com "espaços" so vai com "." ou tudo junto...
/tool fetch mode=http url="http://torpedus.com.br/sms/index.php\?app=webservices&u=AquiSeuLogin&p=AquiSuaSenha&ta=pv&to=SeuNumerCelularCom55&msg=MensagemAquiSemEspaços" dst-path=SMS;
delay delay-time=1; /file remove [find name="SMS"];
funcionou direitinho to tentando descobrir um jeito de colocar "espaços" na mensagem...
se alguem souber e quiser nos ajudar...
Wanderlei Filomeno disse:
Não uso o tool fetch mikrotik com essa finalidade mais é possível fazer muita coisa com essa ferramenta, no caso do "espaço" na mensagem tenta fazer assim no lugar do espaço coloca %20
exemplo:
/tool fetch mode=http url="http://torpedus.com.br/sms/index.php\?app=webservices&u=AquiSeuLogin&p=AquiSuaSenha&ta=pv&to=SeuNumerCelularCom55&msg=minha%20mensagem%20com%20espaço" dst-path=SMS;
delay delay-time=1; /file remove [find name="SMS"];
Fernando Assis de Almeida Hubner disse:
Certinho..
Aí quem for usar, só colocar %20 no lugar dos "espaços" somente na mensagem...
Obrigado Jonas...
jonas oliveira da silva disse:
O meu fiz tudo conforme voce explicou e nao deu certo, aparece: "Backup nao foi importado" eu acesso a url da pasta do mikrotik e me apresenta os dados dos clientes normal, o index.php eu copiei esse que ta no post, pode me ajudar?
Natan, estou tendo o mesmo problema que você: "Backup nao foi importado" como você procedeu para resolver?
Cara era o arquivo php, copia o que ta no post entra e modifica pois o anexado nao da certo.