21-09-2009, 18:37 #1
Tenho uma extensa rede Mikrotik, roteada utilizando OSPF, dividida em várias áreas, utilizando o freeradius como servidor de autenticação, com pools de ips inválidos configuradas nas routers.
Até ai está tudo funcionando ok. Porém eu precisei dar ips válidos aos meus clientes, mas como não tenho muitos ips, a melhor forma encontrada foi dar ips por áreas e não por router como fiz com os inválidos e utilizando o rlm_sqlippool do radius. Tudo funcionou perfeitamente, exceto pelo seguinte problema, alguns clientes estão pegando ips duplicados, ou seja, um deles recebe um ip da radippool e depois este ip eh liberado por algum motivo, sem q ele desconecte da router, daí este mesmo ip eh dado pra outro cliente, numa router vizinha. Resultado: o cliente q está mais longe do roteador de borda não consegue navegar.
Estive lendo na wiki do freeradius que o ip eh liberado na radippool se o radius não receber os accounting packets. Agora não sei se pode ser um problema na configuração do radius ou algum bug do OSPF, q pode estar fazendo os accounting packets enviados pelas routers se perderem na rede.
22-09-2009, 07:34 #2
Só pra complementar, eu uso o radius com mysql rodando sobre o debian lenny.
O expire-time para os ips eh de 600s.
Fizemos testes enchendo a pool de usuários e o radius nega ips válidos para novos usuários, ou seja, não entrega naturalmente um ip que já esteja reservado pra outro usuário. Nestes casos, a router é que está dando um ip inválido pra tal usuário.
Alguem aí com alguma ideia pra me ajudar?
Última edição por diekson; 22-09-2009 às 07:36. Razão: Correção.
12-10-2009, 12:51 #3
Início da Solução...
Bem, já que ninguém por aqui pode me ajudar, eu tive que ir atrás da solução ...
Vou postando aqui conforme for descobrindo, assim, quem tiver o mesmo problema, pode se beneficiar...
Eu uso o freeradius com o mysql e descobri que apesar de ter sido testado rlm_sqlippool sobre o mysql, descobri q não foi "exaustivamente" testado pelo autor do freeradius...
Para rlm_sqlippool para funcionar corretamente, o radius deve receber todos os pacotes de contabilidade (accounting packets) a partir dos NASs, incluindo as atualizações provisórias (Interim-Updates).
Então percebi que durante algumas requisições longas de outro sistema que gerencia o radius, ou até mesmo durante momentos de grande numero de requisições de acesso dos roteadores, vi que o mysql não consegue atender a todas as requisições, como o rlm_sqlippool precisa estar sempre recebendo os pacotes de contabilidades, alguns acabam não sendo recebidos por este problema, ai o radius acaba liberando o ip que estava reservado a um usuário, para outro usuario usar, mesmo sem ter certeza se o primeiro usuário está ou não ainda conectado no roteador. Se o primeiro usuário está ainda conectado, o radius, ao liberar o mesmo ip para outro usuário, acaba fazendo com q dois usuários recebam o mesmo ip, e assim, só um deles consegue navegar, aquele q está mais perto do roteador de borda.
Agora o que tenho q fazer e contornar este problema, seja aumentando o numero de sockets do radius, seja eumentando o poder da máquina em que está instalado o sistema, seja aumentando ao numero de requisições simultaneas aceitas pelo mysql.
Vou testar qual delas tem algum efeito...
Se alguem tem alguma outra sugestão, por favor, poste aí.
16-10-2009, 21:03 #4
Comece aumentando o tempo do expire-time para 22 minutos e do interim-update para 7 minutos.
O freeradius tem um problema quando ocorrem muitas solicitações ao mesmo tempo podendo até a levar o servidor mikrotik deixar de responder isso acontece em maquinas com multi-cpu, a Mikrotik alega que o problema não é dela e sim no próprio freeradius, a solução é colocar uma cpu com alto poder de processamento para atender mais rapidamente as requisições, notei que o problema ocorre quando mais de 15 requisições são feitas simultaneamente, e consegui resolver melhorando o servidor de autenticação.
17-10-2009, 19:25 #5
Luciano, inicialmente o problema foi o numero de requisições, eu amentei e melhorou um pouco, mas em testes vi que realmente o expire-time e o interim-update tem importancia, eu aumentei o expire-time pra 6 vezes o interim-update, assim, o mk terá pelo menos 6 chances de enviar os pacotes e atualizar o expire-time, fiz isto pq minha rede eh realmente longa, e estou testando a ippool somente em algumas áreas a uns 3 dias e até agora nenhum problema de ip duplicado.
Tbm melhorei a máquina, pq estava com pouca memóia.
Vou deixar assim por uma semana e depois posto o resultado.
31-10-2009, 22:32 #6
Problema resolvido, com os novos tempos de interim-update e expire-time não aconteceu mais nenhum caso de ip duplicado na rede, estou com todoas as áreas rodando com ips reais disponibilizados via sqlippool ha duas semanas e nenhum problema até agora... e como disse o Luciano acima, a velocidade da maquina tbm tem grande importancia...
Considero o caso resolvido.
27-04-2010, 11:11 #7
Como vcs fazem para inserir os IPs na tabela radippool ? E quando ela enxe? Vocês apagam e inserem os novos IPs? Via algum script em bash?
Estou tentando fazer com que mesmo que o cliente libere e renove, se o lease dele for de 1h, por exemplo, e ele estiver ainda dentro desse lease, pegar o mesmo IP, ao invés de pegar outro IP, evitando assim enxer a tabela rapidamente.
Vocês têm alguma idéia de como fazer isso?
27-04-2010, 22:56 #8
Re: Mikrotik + Freeradius rlm_ sqlippool - ips duplicados
Primeiro, como inserir os ips. Vc terá que inserir uma linha para cada ip, preenchendo apenas a coluna FramedIpAddres e a coluna Pool_Name. para isto vc pode utilizar um script em perl, php, java, oque vc quiser, até mesmo inserindo as linhas uma a uma via SQL, o que vai dar um trabalhão, rs.
Os ips inseridos vão sendo utilizados, e o radius vai reservando e liberando eles através de updates na tabela radippool.
Segundo. Com "encher", eu entendo que vc quer dizer qdo todos os ips forem usados. Se vc for utilizar ips públicos normalmente eles são meio escassos,(rsrs) então, se o seu roteador não estiver preparado pra dar ip caso seu radius não tenha mais nenhum liberado, vc deve acrescentar alguns ips privados afim de que o seu radius sempre tenha ips para entregar.
Quanto ao lease e o cliente pegar o mesmo ip, comigo acontece o seguinte, sempre q algum pacote de acct-update chega, o modulo sqlippool dá uma varrida na radoippool e libera todos os ips cujo username não esteja mais com sessão aberta na radacct, e tbm libera aqueles cujo expiry_time ja tenha vencido. uma dica é deixar o lease-time pelo menos 5 vezes o tempo do interin-update, assim não tem o risco do ip ser liberado antes da hora.
Não está no que vc perguntou, mas acho importente:
Não basta vc povoar a tabela radippool, é preciso tbm informar o nome da pool na radcheck/radgroupcheck, o atributo usado é "Pool-Name".
30-04-2010, 16:47 #9
entendi, muito obrigada pela explicação diekson
08-02-2013, 00:39 #10
Olá, Gostaria de saber se algum de vocês podem me ajudar a centralizar os ips via radius,
já tentei de varias formas mais não conseguir .
se poder ajudar fico muito grato!
desde já agraço qualquer ajudar!
21-08-2016, 15:20 #11
Postado originalmente por diekson
como faço pra informar o nome da pool na radcheck/radgroupcheck, usando o atributo "Pool-Name". ?
INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES ('poolradius','Pool-Name',':=', main_pool);
onde main_pool é o nome do meu pool que tenho cadastrado na radippool
22-08-2016, 01:53 #12
Acho que é, eu particularmente não uso a estrutura padrão do freeradius, eu fiz algumas stored procedures para manipular isso.
De qualquer modo fique atento com o interim-update se não vai dar problema com IP duplicado.
22-08-2016, 06:23 #13
Obrigado e também obrigado pela dica, pois eu to iniciando em programação Php e sua dica vai ser muito útil.
Só ficou uma dúvida, o expire-time que o pessoal se refere é o valor do campo que fica na tabela radippool ?
Comecei ontem a mecher com IPs via radius e ainda tenho essa duvida, vi na radippool um campo chamado expire-time, é esse campo que tem que ser preenchido com valor em torno de 6 vezes o valor do interim-update ?
22-08-2016, 23:37 #14
O campo é este mas não é você quem controla ele, e sim o radius, esse campo é preenchido conforme o valor da lease-time que é configurada no arquivo sqlippool.conf, se não me engano.
23-08-2016, 03:51 #15
Ata, show mesmo.
Muito obrigado, hoje mais tarde eu vou da umas olhadas nisso.
Já comecei os testes e teve uma duplicação de IPs em um momento, logo na primeira vez que iniciei os teste, mas mexi em umas query que tava = null e coloquei is null, que o pessoal andam falando pra fazer isso...
Mais tarde irei fazer a prova de fogo pra ver o que vai dar rsrs
20-06-2019, 09:34 #16
mano, te juro que isso que tu esta fazendo era justamente o que eu estive procurando essa semana, porem eu não achei como fazer...
como seu post é de 2009 eu nem sei se tu vai ler essa mensagem, mas se ler e puder me ajudar, eu queria saber como que faz pra dividir por areas e como entregar pool de ips por areas