AUTENTICAÇÃO EM DHCP PARA FTTH (SEM RADIUS E SEM ACCOUNTING)

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.

prelogin.php

lease-script.rsc

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Enviar-me um email quando as pessoas responderem –

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:

    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.

  • compartilha como conseguio

    PZ disse:

    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.

This reply was deleted.