Considerando a necessidade que tive para realização de autenticação em DHCP com o MKAUTH (planos altos se comportam melhor em DHCP do que em PPPoE) e considerando que o mesmo não dá esse suporte, fiz pesquisas no fórum do MKAUTH com a intenção de encontrar alguma resposta para meu caso. A solução que achei mais parecida com o que queria foi feita por Jonas Ferreira (http://mk-auth.com.br/forum/topics/autentica-o-hotspot-autom-tica-via-mac-address), mas não queria que fosse necessário abrir uma página da web para a realização do login automático queria que fosse o mais prático possível, só em conectar o cabo na ONU usando DHCP e realizar a autenticação. Baseado nisso, resolvi botar a mão na massa e fazer a solução.
O funcionamento dela é baseado no arquivo prelogin.php feito por Jonas (fiz algumas alterações nele).
De forma resumida, é criado um servidor DHCP no mikrotik na interface onde será realizado o atendimento ao cliente e nele é inserido um script para executar uma ação usando a ferramenta "/tool fetch" que envia ao mkauth (via http) o MAC do roteador e retorna parâmetros como login, plano, se está bloqueado, se está desativado (é necessário ter o MAC da WAN do roteador no cadastro do cliente). Abaixo vou litar em tópicos o que é necessário para o funcionamento correto.
REQUISITOS
- RouterOS versão maior ou igual a 6.43;
- Arquivo prelogin.php colocado no diretório /var/www/login/ (arquivo em anexo);
- O RouterOS deve ter comunicação WEB com o mkauth;
- Ter o MAC do cliente cadastrado;
SEGURANÇA
- Na interface do mikrotik onde será colocado o DHCP-SERVER, deve deixar a opção ARP com o valor "reply-only" (evita que o cliente coloque um IP fixo e tenham acesso em L3 ao mikrotik);
- No DHCP-SERVER criado no mikrotik na interface que fará o atendimento ao cliente, deve ser marcada a opção "add ARP For Leases" e "Lease Time" com valor "00:00:30" (isso faz com que somente clientes que pegeram um IP **lease** com o mikrotik tenham comunicação em L3 com ele e o tempo de concessão baixo é necessário para a autenticação pelo script para o caso de falha);
- Inserir regras de filtro para address-list "pgcorte" (default), "pgdesativado" (novo) e "desconhecido" (novo); /ip firewall filter add chain=forwarding src-address-list="pgdesativado" action=drop; /ip firewall filter add chain=forwarding src-address-list="desconhecido" action=drop;
O SCRIPT
Abaixo segue o script que deve ser colocado no servidor DHCP do mikrotik (campo "lease-script") onde o X.X.X.X é o IP do mkauth (também coloquei em arquivo em anexo, nome lease-script.rsc):
************************
:local result [/tool fetch url="http://X.X.X.X/login/prelogin.php\?mac=$leaseActMAC" as-value output=user]; \
:if ($result->"status"="finished" and $result->"data"!="null") do={ \
:local lineInicial 0; \
:local lineFinal 0; \
:set lineFinal ([:find ($result->"data") "\n" $lineFinal]); \
:local login [:pick ($result->"data") ($lineInicial) $lineFinal]; \
:set lineInicial $lineFinal; \
:set lineFinal ([:find ($result->"data") "\n" $lineFinal]); \
:local plano [:pick ($result->"data") ($lineInicial+1) $lineFinal]; \
:set lineInicial $lineFinal; \
:set lineFinal ([:find ($result->"data") "\n" $lineFinal]); \
:local bloqueado [:pick ($result->"data") ($lineInicial+1) $lineFinal]; \
:set lineInicial $lineFinal; \
:set lineFinal ([:find ($result->"data") "\n" $lineFinal]); \
:local ativado [:pick ($result->"data") ($lineInicial+1) $lineFinal]; \
:set lineInicial $lineFinal; \
:set lineFinal ([:find ($result->"data") "\n" $lineFinal]); \
:local veldown [:pick ($result->"data") ($lineInicial+1) $lineFinal]; \
:set lineInicial $lineFinal; \
:set lineFinal ([:find ($result->"data") "\n" $lineFinal]); \
:local velup [:pick ($result->"data") ($lineInicial+1) $lineFinal]; \
/ip dhcp-server lease make-static [find mac-address=$leaseActMAC]; \
/ip dhcp-server lease set [find mac-address=$leaseActMAC] rate-limit=($velup."K/".$veldown."K") address-list="" comment=$login; \
:if ($bloqueado="nao" and $ativado="s") do={ \
/ip dhcp-server lease set [find mac-address=$leaseActMAC] lease-time=12:00:00; \
}; \
:if ($bloqueado="sim") do={ \
/ip dhcp-server lease set [find mac-address=$leaseActMAC] lease-time=00:05:00 address-list="pgcorte"; \
} \
else={ \
:if ([/ip dhcp-server lease get [find mac-address=$leaseActMAC] address-list]="pgcorte") do={ \
/ip dhcp-server lease set [find mac-address=$leaseActMAC] address-list="";\
}; \
}; \
:if ($ativado="n") do={ \
/ip dhcp-server lease set [find mac-address=$leaseActMAC] lease-time=00:05:00 address-list="pgdesativado"; \
} \
else={ \
:if ([/ip dhcp-server lease get [find mac-address=$leaseActMAC] address-list]="pgdesativado") do={ \
/ip dhcp-server lease set [find mac-address=$leaseActMAC] address-list=""; \
}; \
}; \
} else={ \
/ip dhcp-server lease make-static [find mac-address=$leaseActMAC]; \
/ip dhcp-server lease set [find mac-address=$leaseActMAC] address-list="desconhecido"; \
};
****************************
EXEMPLOS DE COMO DEVE FICAR
CONSIDERAÇÕES
- A autenticação é feita através do retorno do banco de dados do mkauth e não pelo RADIUS;
- Como ela não é feita pelo RADIUS do mkauth, não há accounting (não terá registro de conexões no cadastro do cliente);
- Clientes autenticados e sem pendência ficam com lease-time de 12h, caso ele venha a ser bloqueado ou desativado esse evento só irá ocorrer depois da nova concessão (até terminar o tempo do lease-time, se o roteador do cliente reiniciar ou se você remover o lease manualmente);
- Clientes desativados e bloqueados possuem lease-time de 5min (para o caso dele ser reativado ou quitado o débito, esse tempo deve ser pequeno para a realização da próxima consulta no banco de dados do mkauth);
- No momento não funciona com clientes adicionais!
Estarei a disposição para esclarecimento caso alguém tenha alguma dúvida.
Respostas
Atualmente utilizo outro sistema para autenticação IP x MAC, mas quero me livrar de mensalidades, Não estou conseguindo fazer o download dos ANEXOS para fazer os teste, poderia me ajudar ?
Consegui fazer o cliente se autenticar no mk-auth sem precisar dos scrips... usando o próprio freeradius do mk-auth e usando ainda o agente-circuit-id que a olt repassa ao mikrotik (DHCP Option 82).
Só falta o account do cliente, que infelizmente o mk-auht não monitora/registra as conexões do cliente. Registra o login do cliente.. porém sem tráfego pra ele... (Se eu conseguisse isso.. tava pronto... sem precisar de script nenhum.
Alguém nessa mesma empreitada.
Como você conseguiu autenticar pelo freeradius do mkauth?
Não estou conseguindo baixar os arquivos em anexo!
Alguma novidade em relação a dhcp e relatórios de conexão de clientes?
realmente o PPPoE esta defasado para grandes planos (consome muito cpu nos clientes ,
o ideal mesmo é DHCP e/ou IPoE como as grandes telecom,
aqui estou experimentando o hotspot login by mac, assim nao perdo os graficos de consumo nem AAA
o anexo nao esta abrindo, alguem pode no email jpauloff@gmail.com ou alguem pode me ajudar? preciso muito
alguma novidade sobre o assunto?
Compartilha com a comunidade como você fez para o DHCP autenticar usando o circuit-id, estou querendo fazer o mesmo aqui na minha operação!
PZ disse:
compartilha como conseguio
PZ disse: