Ceci est une ancienne révision du document !


Pour les VLANs

radius freeradius eap vlan

La gestion des adresses MAC des clients

Il existe plusieurs méthodes pour collecter les adresses MAC de vos postes clients, comme par exemple les logiciels d'inventaire de parc (OCS Inventory NG , en est un).

La table « radcheck »

La table qui doit accueillir les « utilisateurs » s'appelle « radcheck ». Voyons de plus près la structure de cette table :

mysql> describe radcheck;
+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| UserName  | varchar(64)      | NO   | MUL |         |                |
| Attribute | varchar(32)      | NO   |     |         |                |
| op        | char(2)          | NO   |     | ==      |                |
| Value     | varchar(253)     | NO   |     |         |                |
+-----------+------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

Entrer dans le détail des nombreuses possibilités de FreeRADIUS nous mènerait beaucoup trop loin. Dans le cadre de notre projet, nous devons créer une ligne par client de la manière suivante :

  • Username contiendra l'adresse MAC du client, au format xx:yy:zz:aa:bb:cc, en lettres minuscules,
  • Attribute contiendra le texte : « Cleartext-Password »,
  • op contiendra « := »,
  • Value contiendra également l'adresse MAC du client, au format xx:yy:zz:aa:bb:cc, en lettres minuscules.

Comme pour gérer dans la suite une telle collection de valeurs, il faudra savoir à quel client correspond une adresse MAC, je vous conseille d'ajouter dans cette table une rubrique supplémentaire destinée à contenir, par exemple, le nom du client associé. De plus, les valeurs par défaut de Attribute et de op gagnent à être créées/modifiées comme suit :

mysql> describe radcheck;
+-----------+------------------+------+-----+--------------------+----------------+
| Field     | Type             | Null | Key | Default            | Extra          |
+-----------+------------------+------+-----+--------------------+----------------+
| id        | int(11) unsigned | NO   | PRI | NULL               | auto_increment | 
| UserName  | varchar(64)      | NO   | MUL |                    |                | 
| Attribute | varchar(32)      | NO   |     | Cleartext-Password |                | 
| op        | char(2)          | NO   |     | :=                 |                |
| Value     | varchar(253)     | NO   |     |                    |                | 
| COMMENT   | varchar(50)      | YES  |     | NULL               |                |
+-----------+------------------+------+-----+--------------------+----------------+
6 rows in set (0.01 sec)
Il « suffit » ensuite de peupler cette base avec vos adresses MAC par la méthode qui vous conviendra le mieux. Ceci devrait aboutir à quelque chose de la forme :

mysql> select *  from radcheck;
+----+-------------------+--------------------+----+-------------------+-----------------------+
| id | UserName          | Attribute          | op | Value             | COMMENT               |
+----+-------------------+--------------------+----+-------------------+-----------------------+
|  1 | test0             | Cleartext-Password | := | userpassword      | NULL                  | 
|  5 | 00:05:5d:df:f4:5b | Cleartext-Password | := | 00:05:5d:df:f4:5b | Poste 1               | 
|  7 | 00:13:46:2f:93:f5 | Cleartext-Password | := | 00:13:46:2f:93:f5 | Poste 2               | 
|  8 | 00:13:46:2f:93:ef | Cleartext-Password | := | 00:13:46:2f:93:ef | Poste 3               | 
|  9 | 00:15:e9:f1:2d:e6 | Cleartext-Password | := | 00:15:e9:f1:2d:e6 | Poste 4               |
....

Il n'est pas nécessaire de relancer FreeRADIUS après modification de cette table.

La table « nas »

Il ne faut pas oublier non plus d'ajouter dans la table « nas » les informations concernant vos SWITCHs. La table « nas » est de structure suivante :

mysql> describe nas;
+-------------+--------------+------+-----+---------------+----------------+
| Field       | Type         | Null | Key | Default       | Extra          |
+-------------+--------------+------+-----+---------------+----------------+
| id          | int(10)      | NO   | PRI | NULL          | auto_increment |
| nasname     | varchar(128) | NO   | MUL |               |                |
| shortname   | varchar(32)  | YES  |     | NULL          |                |
| type        | varchar(30)  | YES  |     | other         |                |
| ports       | int(5)       | YES  |     | NULL          |                |
| secret      | varchar(60)  | NO   |     | secret        |                |
| community   | varchar(50)  | YES  |     | NULL          |                |
| description | varchar(200) | YES  |     | RADIUS Client |                |
+-------------+--------------+------+-----+---------------+----------------+
8 rows in set (0.00 sec)

Nous devons avoir dans cette table, quelque chose qui ressemble à ceci :

mysql> select *  from nas;
+----+---------------+-----------+-------+-------+--------------+-----------+---------------------+
| id | nasname       | shortname | type  | ports | secret       | community | description         |
+----+---------------+-----------+-------+-------+--------------+-----------+---------------------+
|  1 | 127.0.0.1     | localhost | other |  NULL | naspassword  | NULL      | RADIUS Client       |
|  2 | 192.168.10.11 | sw1       | other |  NULL | chutt        | NULL      | switch 1            |
...

Notez qu'une modification de la table « nas » nécessite (pour l'instant) un redémarrage de FreeRADIUS.

Normalement, tout devrait fonctionner correctement. Le client d'adresse MAC 00:05:5d:df:f4:5b devrait se retrouver sur le VLAN d'IP 2 (PARADIS_VLAN) alors qu'un client d'adresse MAC ne figurant pas dans la table « radcheck » se retrouvera dans le VLAN d'ID 3 (ENFER_VLAN).

Si vous rencontrez des problèmes, la première chose à faire est d'arrêter FreeRADIUS, puis de le relancer en « foreground » (avant-plan) en mode « debug », par la commande :

freeradius -X

ou, pour encore plus de détails :

Si, lors de la connexion d'un client, vous n'observez rien, c'est tout simplement que le switch ne dialogue pas avec le radius. Il faut alors en trouver la raison.

Si le dialogue démarre, il vous faudra déchiffrer le discours pour trouver la raison du dysfonctionnement. Les raisons les plus probables étant :

  • le radius ne reconnait pas le switch (problème de secret partagé, de configuration du radius sur le switch, de configuration du switch dans la table « nas » du radius),
  • le radius ne trouve pas le client dans sa base (erreur dans la table « radcheck »).