lalahop

Du WiFi mesh pour s’amuser

Ce billet va parler, de manière très concise, de la mise en place d'un réseau WiFi mesh avec Babel.

Table des matières

Un peu de théorie

Le terme « mesh » désigne une topologie réseau où chaque nœud est relié à tous les autres nœuds. Donc le terme est extrêmement générique et peut s'appliquer, par exemple à une topologie BGP que l'on dira full-mesh (chaque routeur de bordure d'un réseau a une session iBGP avec chacun des autres routeurs de bordures) . C'est pour ça que je préfère parler de réseau WiFi mesh : afin de dissiper tous les doutes.

Il y a plusieurs approches pour faire du WiFi mesh :

  • On reprend les protocoles de routage filaires et on les adapte pour les conditions hostiles des réseaux mesh (l'instabilité est la règle, l'interface d'entrée d'un paquet peut aussi être l'interface de sortie de ce même paquet, ...). C'est l'approche de Babel.
  • On repart de 0. C'est l'approche de B.A.T.M.A.N ou OLSR.

Parmi les protocoles de routage, il existe des paradigmes de fonctionnement différents :

  • B.A.T.M.A.N émule un réseau ethernet classique par dessus le réseau WiFi mesh. Donc tous les concepts du L2 filaires demeurent : ARP/NDP, DHCP, ...
  • Babel agit au niveau 3 donc IP donc les concepts précédents ne valent plus : pas d'ARP/NDP, pas de DHCP mais une implémentation équivalente de configuration automatique avec état (ahcp), ...

Voilà pour les quelques points de théorie que je voulais mettre en avant. Si vous voulez en apprendre plus sur Babel et sur le routage dans les réseauw WiFi maillés, je vous conseille les ressources suivantes :

Comment monter un petit réseau WiFi mesh pour s'amuser avec Babel

Ici, nous partirons du principe qu'une seule machine distribuera la configuration sur le réseau. Tout comme avec DHCP, il est possible d'avoir plusieurs machines dédiées à cette tâche.

Commençons par configurer cette machine.

D'abord, on crée le fichier /etc/ahcpd.conf avec le contenu suivant :

mode server
 
prefix 2001:2::/48
prefix 198.18.1.0/24
lease-dir /var/ahcpd/

Les préfixes utilisés sont réservés à l'IANA pour faire des tests. Ils ne sont pas dans la DFZ et peu utilisés (ça permet d'éviter les conflits). Il faut évidemment créer le dossier /var/ahcpd/

Ensuite, on installe et on lance les logiciels nécessaires (en root, of course) :

apt-get update && apt-get install babeld ahcpd
 
# Si vous avez un logiciel qui configure automatiquement vos interfaces comme 
# le Network Manager de GNOME, il est indispensable de l'arrêter
service network-manager stop
 
# On vérifie que l'interface WiFi est down, ce qui élimine certains problèmes comme :
# « Error for wireless request "Set Mode" (8B06) : SET failed on device wlan0 ; Device or resource busy. » 
# (erreur récupérée sur une WG111v2/v3 basée sur les puces Realtek 8187B/L
ip link set down dev wlan0
 
# On passe l'interface WiFi en mode ad-hoc
iwconfig wlan0 mode ad-hoc channel 11 essid "nom-du-reseau"

# On up l'interface
ip link set up dev wlan0
 
# On lance Babel
babeld wlan0 &
 
# On lance le serveur ahcpd 
ahcpd -c /etc/ahcpd.conf wlan0

Sur les autres nœuds du réseau, on suit la même démarche mais l'on remplace simplement « ahcpd -c /etc/ahcpd.conf wlan0 » par :

ahcpd wlan0

On peut surveiller l'attribution des adresses avec la commande suivante :

watch "ls -l /var/ahcpd/"

Si ahcpd ne fonctionne pas (et ça arrive ...), les nœuds peuvent quand même rejoindre le réseau en s'attribuant manuellement une adresse (attention aux doublons !) :

ip addr add 198.18.1.X/24 dev wlan0

Il est possible d'avoir un accès à Internet depuis le réseau mesh.

  • Soit en ajoutant manuellement une route vers une passerelle filaire/radio sur chaque nœud :
    ip r a default via 198.18.1.254 dev wlan0
  • Soit en demandant à un (ou plusieurs :D) nœud(s) de distribuer une route par défaut :
    babeld -C 'redistribute ip 0.0.0.0/0 le 0 metric 128' wlan0

    (ça peut aussi se mettre proprement dans un fichier de configuration babeld.conf qui sera indiqué au démon -c /etc/babeld.conf, par exemple.

Dans les deux cas, ne pas oublier d'activer le masquerade sur la(les) passerelle(s) :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Pas besoin d'activer l'ip_forward, il l'est déjà : principe du mesh, tout ça 😉

Quelques petites notes

  • Toutes les cartes WiFi ne supportent pas le mode ad-hoc.
  • Certains drivers ne supportent pas non plus le mode ad-hoc.
  • Si vous avez Quagga sur votre machine, utilisez le chemin complet pour appeler babeld sinon c'est l'implémentation (bugguée, utilisez Quagga-RE si vous voulez une intégration de babel dans Quagga) de babel inclue dans Quagga qui sera lancée.
  • Babel peut-être utilisé en milieu hybride (filaire et radio) pour, par exemple, interconnecter des îles mesh entre elles quand celles-ci sont séparées par une distance inatteignables en radio.

Usages

Pour ceux qui se demandent à quoi servent les réseaux mesh dans la vraie vie :

  • À construire de grands réseaux qui juste marchent en vrai. Liste.. De ce que j'ai vu, Guifi.net en Espagne et Freifunk.net en Allemagne sont juste impressionnants.
  • Pour des projets humanitaires. Exemple : GAST.
  • Les armées sont aussi très intéressées pour guider les hommes dans les milieux hostiles et leur fournir des informations complètes, rapidement et en toute indépendance.

Quelques pistes pour aller plus loin

  • Essayer babelweb pour avoir une visualisation graphique de votre réseau. Exemple de visualisation babelweb.
  • Essayer B.A.T.M.A.N qui n'est pas basé sur le même paradigme (voir plus haut).
  • Comme tous les nœuds émettent sur la même fréquence, les interférences peuvent être fortes et nuirent au débit. Il est possible de mixer les canaux utilisés. Il faut, bien sûr, des machines avec des radios présentes sur les différents canaux utilisés. On peut ensuite demander aux différents nœuds Babel d'en tenir compte dans leur calcul de route avec l'option « z ».
  • Utiliser votre petit routeur perso sous OpenWRT pour faire une config double point d'accès WiFi et passerelle mesh vers Internet : Routeur OpenWrt hybride (mesh babel + AP et Internet)
  • Enfin, du 19 au 21 juillet 2013 (fin de cette semaine quoi), il y aura un hackathon autour de Babel au Loop (hackerspace parisien). Plus d'infos : Hackathon Babel au Loop.