Juil 18 2008
Retour d’Expérience sur les Pools IPs Freeradius
Si vous vous demandez s’il vaut mieux utiliser les modules rlm_ippool ou rlm_sqlippool pour transformer votre Radius en serveur « DHCP » avec les pools IP Freeradius, lisez ceci!
rlm_ippool
Nous allons d’abord configurer Freeradius pour fournir des adresses IPs via le module ippool. Les IPs sont stockées dans un fichier de données binaire.
radiusd.conf
ippool main_pool {
range-start = 192.168.0.2
range-stop = 192.168.0.254
netmask = 255.255.255.0
cache-size = 800
session-db = ${raddbdir}/db.ippool
ip-index = ${raddbdir}/db.ipindex
override = yes
maximum-timeout = 0
accounting {
main_pool
}
post-auth {
main_pool
}
Users
Dans le fichier users, nous avons:
DEFAULT Pool-Name := main_pool
Fall-Through = Yes
Au démarrage, db.ippool et db.ipindex sont créés dans le répertoire de configuration.
Test
lease-duration est positionné à 10 dans sqlippool.conf à des fins de tests. Les IPs devrainet donc être relâchées au bout de 10 secondes.
# Vérifions le comportement lors d’une connexion
echo « Connexion de l’utilisateur test… »
echo « User-Name=\ »test\ »,User-Password=\ »test\ »,NAS-IP-Address=\ »127.0.0.1\ »,
NAS-Port=0″ | radclient localhost:1812 auth testing123
echo « User-Name=\ »test\ »,Acct-Session-Id=\ »6000006B\ »,Acct-Status-Type=\ »Start\ »,
NAS-IP-Address=\ »127.0.0.1\ »,NAS-Port=0″| radclient localhost:1813 acct testing123
# Vérification du nombre d’IPs affectées – devrait être 1
rlm_ippool_tool -c etc/raddb/db.ippool etc/raddb/db.ipindex
=> 1
echo « Déconnexion de l’utilisateur test »
echo « User-Name=\ »test\ »,Acct-Session-Id=\ »6000006B\ »,Acct-Status-Type=\ »Stop\ »,
NAS-IP-Address=\ »127.0.0.1\ »,NAS-Port=0″| radclient localhost:1813 acct testing123
# Vérification du nombre d’IPs affectées – devrait être 0
rlm_ippool_tool -c etc/raddb/db.ippool etc/raddb/db.ipindex
=> 0 – Bien!
# Vérifions le fonctionnement du timeout
echo « Connexion de l’utilisateur test… »
echo « User-Name=\ »test\ »,User-Password=\ »test\ »,NAS-IP-Address=\ »127.0.0.1\ »,
NAS-Port=0″ | radclient localhost:1812 auth testing123
echo « User-Name=\ »test\ »,Acct-Session-Id=\ »6000006B\ »,Acct-Status-Type=\ »Start\ »,
NAS-IP-Address=\ »127.0.0.1\ »,NAS-Port=0″| radclient localhost:1813 acct testing123
rlm_ippool_tool -c etc/raddb/db.ippool etc/raddb/db.ipindex
=> 1
# Nous attendons jusqu’à ce que le timeout soit atteint
sleep 11
rlm_ippool_tool -c etc/raddb/db.ippool etc/raddb/db.ipindex
=> 1
Le timeout ne fonctionne pas!
rlm_sqlippool
radiusd.conf
Il faut d’abord monter Freeradius en version 1.1.7 ou plus récente et effectuer les changements suivants dans radiusd.conf:
Décommenter « $INCLUDE ${confdir}/sqlippool.conf », supprimer main_pool et ajouter sqlippool dans les sections accounting et post-auth sections.
accounting {
sqlippool
}
post-auth {
sqlippool
}
users
DEFAULT Pool-Name := main_pool
Fall-Through = Yes
Création de pools d’IPs SQL
Ajouter la structure de la table radippool dans la base Mysql si nécessaire (incluse dans FR):
#
# Table structure for table 'radippool'
#
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 NOT NULL default '0000-00-00 00:00:00',
username varchar(64) NOT NULL default '',
pool_key varchar(30) NOT NULL,
PRIMARY KEY (id)
);
Et ajouter le fichier sqlippool.conf (fourni dans Freeradius)
Ajouter le pool d’IPs dans la base
mysql> INSERT INTO radippool (pool_name, framedipaddress) VALUES ('main_pool', '192.168.0.1');
mysql> INSERT INTO radippool (pool_name, framedipaddress) VALUES ('main_pool', '192.168.0.2');
[...]
Résultats
Les mêmes tests fonctionnent avec le module rlm_sqlippool. Les IPs sont relâchées après 10 secondes.
rlm_ippool conserve de plus en plus d’IPs et le pool finit par se remplir. Finalement, on doit remettre le pool à zéro ainsi que les connexions des clients, d’où diminution du taux de disponibilité!
De plus, SQLippool est intéressant lorsque l’on a plusieurs serveurs Radius servant les mêmes clients. Les pools d’IPs sont gérés au niveau de la base de données, ce qui est très appréciable dans ce cas précis.