Août 01 2007
Gigawords sous Freeradius
Les compteurs pour l’accounting Radius ont des limites bien définies comme toute norme qui se respecte. Les valeurs définies par le protocole sont enregistrées dans des champs de 32 bits, c’est-à-dire que la valeur maximum est de 4294967296 bits, soit un peu plus de 4GB. Si une session ne déconnecte pas pendant des jours, il y a de bonnes chances pour que le compteur revienne à 0 et du trafic ne sera pas pris en compte. Des extensions ont été ajoutées au protocole pour supporter des plus grosses valeurs de trafic. Depuis Freeradius 1.1.7, les Gigawords sont supportés par défaut avec Mysql. Il est fortement recommendé d’installer cette dernière version. Lors de la mise-à-jour, n’oubliez pas d’obtenir le nouveau schéma de la base dans mysql.sql. Changez AcctInputOctets et AcctOutputOctets de 32 à 64 bits. Cet article traite des versions de Freeradius inférieures à 1.1.7.
Avant de commencer
Nous assumons que Freeradius est installé avec Mysql pour stocker les données. Nous assumons aussi que le Network Access Server (NAS) supporte les gigawords, définis dans la RFC2869. C’est généralement le cas pour les routeurs Cisco. Vérifiez le manuel de votre NAS pour savoir comment l’activer sur d’autres types de matériels.
Activation de Gigawords sur le NAS
Une fois de plus, cette section traite de Cisco mais un jeu de commandes similaires est disponible sur la plupart des équipements. L’option Gigawords est activée par défaut sur Cisco, c’est pourquoi elle n’apparaît pas dans la configuration. Si c’est le cas, exécutez la commande suivante pour l’activer:
aaa accounting gigawords
On vous demandera de redémarrer le routeur pour que les nouveaux paramètres soient pris en compte. Ceci activeras les attributs Acct-Input-Gigawords et Acct-Output-Gigawords qui enregistrent combien de fois les compteurs sont revenus à zéro. Sachant cela, nous pouvons calculer les valeurs réelles. La prochaine étape est de créer une nouvelle colonne dans la base de données.
Modification de la table Mysql
Les champs AcctInputOctets et AcctOutputOctets doivent être convertis de 32 à 64 bits. Vous pouvez modifier ces chanmps avec un client Mysql quelconque ou PhpMyAdmin
ALTER TABLE radacct ADD AcctInputGigawords TINYINT UNSIGNED DEFAULT 0; ALTER TABLE radacct ADD AcctOutputGigawords TINYINT UNSIGNED DEFAULT 0;
Modifications sur Freeradius
Le code SQL dans sql.conf doit être modifié pour les requêtes stop et update pour enregistrer les nouvelles valeurs dans la base de données. Voici à quoi elles ressemblent après modification:
accounting_update_query = " UPDATE ${acct_table1} SET AcctInputOctets = '%{Acct-Input-Gigawords:-0}' << 32 | '%{Acct-Input-Octets:-0}', AcctOutputOctets = '%{Acct-Output-Gigawords:-0}' << 32 | '%{Acct-Output-Octets:-0}', FramedIPAddress = '%{Framed-IP-Address}' WHERE AcctSessionId = '%{Acct-Session-Id}' AND UserName = '%{SQL-User-Name}' AND NASIPAddress= '%{NAS-IP-Address}' AND NASIPAddress= '%{NAS-IP-Address}' AND AcctStopTime = 0" accounting_stop_query =" UPDATE ${acct_table2} SET AcctStopTime = '%S', AcctSessionTime = '%{Acct-Session-Time}', AcctInputOctets = '%{Acct-Input-Gigawords:-0}' << 32 | '%{Acct-Input-Octets:-0}', AcctOutputOctets = '%{Acct-Output-Gigawords:-0}' << 32 | '%{Acct-Output-Octets:-0}', AcctTerminateCause = '%{Acct-Terminate-Cause}', AcctStopDelay = '%{Acct-Delay-Time}', ConnectInfo_stop = '%{Connect-Info}' WHERE AcctSessionId = '%{Acct-Session-Id}' AND UserName = '%{SQL-User-Name}' AND NASIPAddress = '%{NAS-IP-Address}' AND AcctStopTime =0"
Redémarrez le service Radius, et le tour est joué!
Ceci concatène les valeurs Gigawords et Octets en ajoutant 32 bits nuls à la première et en faisant un OU logique avec la deuxième.