Juil 18 2008

Retour d’Expérience sur les Pools IPs Freeradius

Publié par à 12:00 sous 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.


No responses yet

Comments RSS

Leave a Reply