Cet article a été rédigé en août 2013. 5 ans après, je retrouve ça dans les cartons. C’est pas hyper clair, peut-être même plus à jour mais je ressens le besoin de le publier quand même, quitte à le retaper un jour.
Vous êtes en vacances dans un camping, chez vos grand-parents, à l’étranger ou autre mais problème : vous ne captez que des réseaux Wi-Fi communautaires comme SFR WiFi, Voo Hotspot, Orange, … Si vous avez plusieurs appareils, c’est embêtant de devoir s’identifier à chaque fois, voire impossible de connecter plus d’une machine sur le même compte simultanément. C’est problématique aussi si vous avez des consoles de jeu qui ne supportent pas l’authentification par portail captif (c’est-à-dire devoir saisir ses identifiants sur une page web). Et si vous êtes avec des potes, vous ne voulez peut-être pas leur donner votre mot de passe. L’idée est donc d’utiliser un appareil comme relais : seul un ordinateur sera connecté au point d’accès communautaire. Il le redistribuera alors sous la forme d’un point d’accès indépendant, ce qui ne nécessite de s’authentifier qu’une seule fois.
Un minimum de matériel est nécessaire pour cela : un ordinateur sous Linux et deux cartes Wi-Fi. Attention, l’une d’elles doit supporter le mode master (le « mode point d’accès »). Après, c’est du code. Pour ma part, quand j’ai eu affaire à ce genre de situation, j’ai utilisé un netbook (Eee PC 900) et une clé Wi-Fi USB prise sur un ordinateur de bureau. Les deux géraient le mode master. En ce qui concerne les logiciels, il faut un serveur DHCP, de quoi faire du NAT (iptables fait l’affaire) et de quoi générer des points d’accès (je vous recommande hostapd). Dans cet article, wlan0 sera le nom de la carte qui se connecte au Wi-Fi communautaire, wlan1, celle qui servira de point d’accès.
Préparer le point d’accès
La première chose à faire est d’éditer un fichier de configuration pour hostapd. Vous trouverez un exemple dans /etc/hostapd/hostapd.conf. Les paramètres les plus importants sont interface, ssid, auth_algs, wep_default_key et wep_key0 si vous voulez protéger votre réseau en WEP, wpa et wpa_passphrase si vous voulez du WPA.
L’interface à fournir est celle de la carte qui servira de point d’accès. Pour connaitre les interfaces Wi-Fi dont vous disposez, vous pouvez utiliser la commande iwconfig.
Le SSID est le nom de votre réseau.
auth_algs est un paramètre qui concerne le chiffrement. La valeur 1 signifie pas de protection, 3 signifie WEP ou WPA.
wep_default_key indique la clé WEP par défaut. Décommentez la ligne (supprimez le #) si vous voulez l’utiliser. Laissez 0 comme valeur et indiquez votre clé à la ligne wep_key0 (à décommenter aussi).
Le paramètre « wpa » est on ne peut plus simple : 1 pour oui, 0 pour non. Le wpa_passphrase se passera de commentaire aussi (n’oubliez pas de décommenter ces lignes si vous l’utilisez).
Si vous voulez une configuration plus complexe (gestion des utilisateurs, …), lisez les commentaires du fichier de configuration : ils sont très instructifs. Gardez votre fichier de configuration sous la main, nous allons bientôt en avoir besoin.
Avant de lancer le point d’accès, il est préférable de démarrer un serveur DHCP. Faisons simple et ajoutons simplement ces quelques lignes au fichier de configuration de DHCP3, /etc/dhcpd/dhcp3.conf (à adapter si vous utilisez un autre serveur) :
INTERFACES="wlan1"; subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.10 10.0.0.20; option routers 10.0.0.1; option domain-name-servers 8.8.8.8; }
Rien de très compliqué : on définit la même interface que pour le point d’accès, on déclare un sous-réseau 10.0.0.0/24 dans lequel la plage de .10 à .20 est disponible, .1 sera l’adresse de la carte Wi-Fi, le serveur DNS attribué automatiquement sera Google DNS (8.8.8.8). On définit effectivement l’adresse de la carte avant de démarrer le serveur.
ifconfig wlan1 10.0.0.1 /etc/init.d/dhcp3-server start
On peut maintenant démarrer le point d’accès (remplacez file.conf par le chemin de votre fichier de configuration).
hostapd file.conf
Le réseau communautaire
Maintenant que le point d’accès est créé, on va se connecter au net. Pas besoin d’explications pour se connecter et s’authentifier sur un hotspot Wi-Fi, c’est généralement fait pour être simple. Si on veut s’amuser, on peut aussi créer un script pour que l’authentification se fasse toute seule. Ça tombe bien, j’ai fait ça pour SFR WiFi.
Bien, on est connecté, on a notre point d’accès, plus qu’à autoriser le passage d’un réseau à l’autre. Pour cela, deux choses sont nécessaires. La première est de faire de la translation d’adresse (NAT). Je vous donne la ligne comme ça, pour plus de détails, reportez-vous au manuel :
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Si besoin, remplacez wlan0 par le nom de la carte connectée au réseau communautaire.
La seconde est d’autoriser le routage d’un réseau vers l’autre :
echo 1 > /proc/sys/net/ipv4/ip_forward
Comme l’adresse le laisse supposer, cela laissera passer les paquets IPv4.
En résumé…
Ça fait beaucoup de choses en apparence, mais une fois les fichiers de configuration édités, tout ce qu’il y a à faire, c’est :
- Définir l’adresse de l’interface qui sert de point d’accès
- Lancer le serveur DHCP
- Démarrer le point d’accès
- Se connecter et s’authentifier sur le réseau communautaire
- Laisser passer les paquets (NAT et forwarding)
Là, en bas du brouillon, j’avais inscrit « Refaire l’article selon une autre approche… ». Je ne sais plus ce que j’avais en tête il y a 5 ans en écrivant ça. Rendez-vous en 2023 pour une nouvelle version, peut-être !