FreeRadius e SqlIpPool erro nas queries
Olá,
Tenho instalado um freeradius + mysql + debian e este autenticando os meus usuários pppoe.
O que acontece é que começarei agora a usar o modulo sqlippool para fornecer ips para os clientes.
O radius fornece o IP normal, porém ele não atualiza a tabela na linha do determinado IP preenchendo as informações de
nasipaddress, expiry_time, etc...
e como consequencia tambem não faz o accounting, nem a liberação do ip na tabela radippool.
Eis algumas saidas de logs
Ao cliente logar pppoe aparece o seguinte:
Wed Oct 29 13:29:30 2014 : Error: sqlippool_command: database query error in: 'UPDATE radippool SET nasipaddress = 'xxx.xxx.xxx.xxx', pool_key = 'xxx.xxx.xxx.xxx-2147484007', callingstationid = '24:A4:3C:D0:58:9C', username = 'usuario', expiry_time = NOW() + INTERVAL 3600 SECOND WHERE framedipaddress = '186.227.249.65' AND expiry_time IS NULL'
Ao cliente deslogar o pppoe:
Wed Oct 29 13:28:58 2014 : Error: sqlippool_command: database query error in: 'UPDATE radippool SET nasipaddress = '', pool_key = 0, callingstationid = '', username = '', expiry_time = NULL WHERE nasipaddress = 'xxx.xxx.xxx.xxx' AND pool_key = 'xxx.xxx.xxx.xxx-2147484006' AND username = 'usuario' AND callingstationid = '24:A4:3C:D0:58:9C' AND framedipaddress = 'yyy.yyy.yyy.yyy''
Ambas as queries se eu copiar e colar direto no mysql-workbench por exemplo, executa normal.
A tabela radippool é INNODB, eis o script de criação dela...
CREATE TABLE radippool (
id int(11) unsigned NOT NULL auto_increment,
pool_name varchar(30) NOT NULL,
framedipaddress varchar(15) NOT NULL default '',
nasipaddress varchar(15) NOT NULL default '',
calledstationid VARCHAR(30) NOT NULL,
callingstationid VARCHAR(30) NOT NULL,
expiry_time DATETIME NULL default NULL,
username varchar(64) NOT NULL default '',
pool_key varchar(30) NOT NULL,
PRIMARY KEY (id),
KEY radippool_poolname_expire (pool_name, expiry_time),
KEY framedipaddress (framedipaddress),
KEY radippool_nasip_poolkey_ipaddress (nasipaddress, pool_key, framedipaddress)
) ENGINE=InnoDB;
Qualquer ajuda será muito bem vinda.
Obrigado.
Obs: Já verifiquei nomes de campos, tabelas, etc...tudo certo.
Re: FreeRadius e SqlIpPool erro nas queries
Depois desse log, ele não cita o erro que ocorreu? Qual a versão do FreeRadius e do MySQL?
Re: FreeRadius e SqlIpPool erro nas queries
Não aparece mais nada.
O mais estranho é que ele fornece o IP que esta no pool, então o problema não é a conexão com o banco, pois ele busca o ip la.
E se eu pego essa query do erro, copio e colo direto no mysql, funfa direitinho hehheh. Ta me deixando louco isso.
Eis as versões.
operador@radius:~$ dpkg -l |egrep 'freeradius|mysql-server'
ii freeradius 2.1.10+dfsg-2 a high-performance and highly configurable RADIUS server
ii freeradius-common 2.1.10+dfsg-2 FreeRADIUS common files
ii freeradius-mysql 2.1.10+dfsg-2 MySQL module for FreeRADIUS server
ii freeradius-utils 2.1.10+dfsg-2 FreeRADIUS client utilities
ii libfreeradius2 2.1.10+dfsg-2 FreeRADIUS shared library
ii mysql-server 5.1.63-0+squeeze1 MySQL database server (metapackage depending on the latest version)
ii mysql-server-5.1 5.1.63-0+squeeze1 MySQL database server binaries and system database setup
ii mysql-server-core-5.1 5.1.63-0+squeeze1 MySQL database server binaries
operador@radius:~$
Re: FreeRadius e SqlIpPool erro nas queries
pena que o topico é velho :(
o problema esta na query "expiry_time IS NULL"
editando o arquivo nano /etc/freeradius/sql/mysql/ippool.conf voce resolve isso
basta trocar tudo que estiver como expiry_time IS NULL \
por expiry_time = NULL \
assim vai passar receber a accounting normalmente, porem apos aplicar essas mudanças sera necessario restartar o serviço do freeradius e tambem reiniciar os pppoe server.
muito se ver por aí pedindo pra trocarem essa query pra evitar que haja duplicidade de ips na rede vinda do sqlippool, e deixar do jeito que esta no seu, mas quando se faz essa alteraçao a tabela radippool para de ser atualizada, entao tem que deixar do modo que eu passei acima.
para evitar que haja duplicidade de ips o pessoal recomenda alterar a tabela radippool para o formato innodb e deixar o Expiry_time 6 vezes maior que o Interim update.
alem disso editar o arquivo nano /etc/freeradius/sqlippool.conf
onde tem pool-key = "%{NAS-Port}"
se deve alterar para pool-key = "%{NAS-IP-Address}-%{NAS-Port}"
esses foram os passos que encontrei pra resolver o problema de ips duplicados na rede, porem eu nao tenho uma rede pra testar isso pra ver se realmente funciona para o mysql.
se alguem usa mysql para cuidar da sqlippool eu queria que deixasse um comentario aqui se esses passos que passei resolve mesmo o problema de ips duplicados na rede.
Re: FreeRadius e SqlIpPool erro nas queries
Na verdade mesmo mano, o que evita IPS duplicados é uma série de fatores, alguns são, accounting funcional de no máximo 5 minutos, liberação rápida de ips não usados... E assim por diante. Fazem dois anos que já uso isso em meus clientes e ainda sofro as vezes com isso, o que fez piorar muito esse recurso foi a escassez de ipv4, no passado você conseguia um /20 e tinha uns 3900 ips só para atender clientes, e tinha seus 500 clientes, aí funciona muito bem, você conseguia deixar o expire-time alto e não sofria com a liberação precisa dos ips, hoje em dia os provedores tem 900 ips para atender 850 clientes... Não existe forma de ficar preciso, principalmente de você tem quedas/rajadas de conexão frequentes. O mais correto é usar o FRAMED-IP-ADDRESS com ip fixo pra cada cliente.
Esperamos que logo logo tudo seja ipv6 aí sim eliminamos esse obstáculo!
Enviado via XT1563 usando UnderLinux App