Créer une borne Wifi sur FreeBSD 6

LOGO WIFI Quand on ajoute une carte wifi dans un boîtier d'ordinateur, on est souvent limité à deux modes d'utilisation. Le mode "infrastructure" permet de lier la carte wifi de l'ordinateur à une borne wifi (access point). Le mode ad-hoc permet quant à lui de créer un réseau poste à poste entre deux machines, sans passer par une borne intermédiaire.
Il existe néanmoins des logiciels qui permettent de créer, sur un ordinateur, l'équivalent d'une borne wifi. Cela permet à d'autres ordinateurs de s'y connecter en mode infrastructure, plutôt qu'en mode ad-hoc. Il est alors possible d'installer un serveur DHCP, d'avoir une politique d'authentification et de filtrage des utilisateurs, et d'utiliser le WPA là où le mode ad-hoc n'autorise parfois que le WEP (cas d'un réseau ad-hoc entre deux Mac par exemple).
Les instructions d'installation si dessous sont valables pour une machine sous FreeBSD 6.2-RELEASE #0, avec l'arbre des ports à jour, et à condition de n'avoir pas fait une installation minimale du système.

Matériel

Il faut bien évidemment un ordinateur avec FreeBSD 6 installé, et une carte wifi compatible. Ici j'ai utilisé une carte DLink DWL-G520. Son chipset Atheros est très bien supporté par FreeBSD 6 et par les outils libres habituels. Néanmoins, DLink a une forte propension à changer les firmwares et les chipsets de ses cartes sans forcément avertir le consommateur, donc il est recommandé de valider le choix de la carte avec un vendeur. La carte utilisée ici mentionne sur son étiquette : hardware version B4 et Firmware version 4.31.

Logiciel

La partie logicielle est finalement assez simple. Elle se déroule en trois parties. En premier lieu on doit s'assurer que la carte est bien reconnue par le système, et que sa configuration est bonne. Ensuite on règle le programme hostapd (Host Access Point Deamon) pour qu'il fournisse le service d'Access Point wifi. Pour finir, il faut bien sûr régler les logiciels périphériques et facultatifs tels que le firewall, le nat, le serveur DHCP,...

La carte

La première chose à faire après le montage de la carte et le reboot, c'est de voir si les drivers sont chargés par le kernel :

$ dmesg | grep ath
ath_hal: 0.9.17.2 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
ath0: <Atheros 5212> mem 0xd8120000-0xd812ffff irq 21 at device 5.0 on pci6
ath0: Ethernet address: 00:19:5b:ca:31:3a
ath0: mac 7.9 phy 4.5 radio 5.6

Si le résultat ne ressemble pas à cela (est vide, ce qui est normal si le kernel n'a pas été personnalisé préalablement), il faut alors dire au kernel de charger les modules adéquats au moment du boot. On édite le fichier /boot/loader.conf pour ajouter les lignes suivantes :

if_ath_load="YES"
wlan_wep_load="YES"
wlan_tkip_load="YES"
wlan_ccmp_load="YES"
wlan_xauth_load="YES"
wlan_acl_load="YES"

C'est plus simple et plus rapide que de recompiler un kernel avec les options adéquates. On peut redémarrer la machine, pour être sûr que cette étape se passe correctement. Le dmesg devrait montrer quelques lignes à propos du driver ath.
Maintenant que l'interface réseau physique est vue par le système, on peut configurer l'interface réseau logicielle via le fichier /etc/rc.conf, pour qu'elle monte automatiquement à chaque démarrage.

Remarque : de nombreux howto s'encombrent avec la création d'un bridge entre les différentes interfaces de la machine. Cela n'est pas sans inconvénients, et ce n'est pas nécessairement utile. On s'en passera ici.

On ajoute donc la ligne suivante à rc.conf :

ifconfig_ath0="inet <ip> netmask 255.255.255.0 ssid <ssid> media auto mediaopt hostap mode 11g pureg up"

<ip> est l'adresse IP que vous souhaitez attribuer à la carte wifi (par exemple 192.168.0.1), et <ssid> est le nom de votre réseau ("Service Set Identifier"). A noter aussi que si on souhaite connecter des périphériques un peu anciens, il ne faut pas préciser pureg dans la définition ifconfig_ath0, car cette option empêche l'interface de repasser en mode 11b quand l'interlocuteur n'est pas compatible avec le 11g.

hostapd

hostapd est le démon qui transforme votre interface wifi en borne (Access Point). C'est ce logiciel qui permet de paramétrer la sécurité (wpa/wep) de choisir une passphrase, de lier l'authentification des utilisateurs à un serveur RADIUS, de faire du filtrage sur les adresses MAC, ...

Profitons que rc.conf est ouvert pour ajouter une seconde ligne :

hostapd_enable="YES"

Ainsi, le démon sera lancé au démarrage de la machine.
La configuration de hostapd se fait quant à elle dans le fichier /etc/hostapd.conf (par défaut il n'existe pas). Voilà un contenu typique :

# interface wifi
interface=ath0
# bien mettre "bsd" pour le driver
driver=bsd
logger_syslog=-1
logger_syslog_level=1
logger_stdout=-1
logger_stdout_level=1
debug=2
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
# mettre le même ssid que dans rc.conf
ssid=<ssid>
macaddr_acl=1
accept_mac_file=/etc/hostapd.accept
auth_algs=3
eapol_key_index_workaround=0
own_ip_addr=127.0.0.1
wpa=1
# choisir une passphrase qui servira aux clients pour s'authentifier
# sur l'access point en WPA
wpa_passphrase=<ici votre passphrase wpa>
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP

Vous trouverez plus de détails sur les différents paramètres qui sont disponibles dans le fichier d'exemple /usr/src/contrib/hostapd/hostapd.conf. Dans la configuration ci-dessus, hostapd utilise un filtre accept_mac. Cela signifie qu'il va faire un filtrage sur les adresses MAC des clients, et qu'il faut renseigner à l'avance le démon avec la liste des adresses MAC qui sont autorisées à se connecter. Il faut bien comprendre que ce n'est pas une véritable protection. L'adresse MAC est réglable côté client, donc n'importe qui peut théoriquement usurper une adresse autorisée pour se connecter à votre borne wifi. Néanmoins, cela évite les connexions opportunistes.
La liste des adresses MAC autorisées est dans le fichier /etc/hostapd.accept, dont un exemple est disponible dans /usr/src/contrib/hostapd/.

Autres logiciels

Il est sans doute souhaitable de configurer maintenant les logiciels périphériques, tels que le firewall, le serveur DHCP... Il n'est pas possible de couvrir ici tous les firewall, tous les NAT, tous les serveurs VPN, ou tous les autres logiciels dont on peut vouloir faire varier la configuration après l'ajout d'un access point.
J'ai pour ma part installé un serveur DHCP sur l'interface ath0, en suivant le pas-à-pas du handbook FreeBSD (chapitre 27.5.7 Installing and Configuring a DHCP Server). Les explications sont très claires, et le serveur est monté très rapidement.

2 comments

  1. pour mon hotspot wifi, j'ai choisi la solution de facilité : pfSense

    (edit)
    j'ai oublié de préciser que c'est sur un PC de type mini-itx (ALIX, le successeur du WRAP de chez PCengines.ch et alternatives aux plus connus Soekris).
    Mais ça peut également s'utiliser sur un vieux PC recyclé ou même une machine virtuelle :)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.