Migration -- 5.2 : presque dernières vis et boulons

Je viens d'éteindre mon ancien routeur et de le débrancher. Sur la dernière quinzaine, j'ai réussi à basculer ma Freebox en mode pont (facile) et à faire que ça continue à fonctionner (un peu plus délicat, mais globalement rapide). Et, parce que la Freebox en mode bridge fait disparaître le wifi d'icelle, je viens de finir de créer mon point d'accès Wifi segmenté (mais pas encore filtré comme je le veux), à base d'un Raspberry Pi 3 qui dispose du Wifi intégré.

Passer la Freebox en mode pont, ce n'est guère que l'affaire d'aller dans l'interface de gestion et de cliquer sur l'élément approprié. Il faudra que je planche sur un basculement automagique des routes d'un FAI vers un autre en cas de besoin, pour le moment j'ai configuré en statique le fait que les utilisations interactives[1] vont passer par la connexion Free, et le reste[2] par Nerim. L'interface devant reprendre l'adresse publique de la Freebox se configure en DHCP classique (sous Gentoo, donc dans /etc/conf.d/net). Comme ma navigation Web passe obligatoirement par un relais de navigation, il suffit d'une règle particulière[3] pour que la table de routage à utiliser ne soit pas la version standard :

# Freebox
config_enp3s0="dhcp"
routes_enp3s0="default via <IP PUBLIQUE FBox> dev enp3s0 table free"
rules_enp3s0="from <IP relais> lookup free
from <sous-réseau Wifi> lookup free"

Cela fait (j'avais déjà un truc similaire avec l'ancien routeur, ce ne fut qu'une copie servile), il faut bien remplir ladite table de routage pour conserver l'accès à mes réseaux internes, et ça marche.

En bref, le passage de la Freebox en mode pont n'a pas posé de difficulté.

Monter mon point d'accès Wifi s'est révélé plus pénible. J'aurais pu opter pour la solution de facilité, c'est-à-dire en acheter un tout fait. Mais cela signifiait de ne pas en maîtriser le fonctionnement autant que je le veux. Je suis donc parti sur un Raspberry Pi 3 B+, avec Gentoo dessus[4], et tout ce qu'il faut pour le point d'accès.

Pour commencer, il n'y a pas encore de version stable de Gentoo (32 ou 64 bits) pour le Pi3. J'ai essayé la version 64 bits instable, dotée d'un bon tutoriel d'installation. Ce fut un échec patent, le démarrage du Pi se terminant assez lamentablement lors de l'initialisation des périphériques. Plutôt que prendre le risque de bidouilles improbables jusqu'à ce que ca tombe en marche, j'ai rétropédalé et bifurqué vers la version 32 bits de Gentoo. Là, c'est une installation presque classique, à cela près que je n'avais pas trop envie de tout compiler sur le Pi, question de durée. distcc et crossdev sont venus à ma rescousse[5] et je me suis appuyé sur trois serveurs pour la compilation de tout ce qu'il faut[6].

Le Wifi nécessite des micrologiciels spécifiques, qui ne sont pas inclus dans les distribs classiques. J'ai mis un petit moment à comprendre ça, et à aller chercher ce qu'il faut (le futur contenu du répertoire /lib/firmware/brcm) là où il le faut (sur kernel.org/pub/linux/kernel/firmware/). Il existe bien un paquet linux-firmware sous Gentoo mais, allez comprendre pourquoi, l'installation a échoué après plus d'une heure d'exécution.

Avec le bon micrologiciel, la carte Wifi est reconnue. J'ai fait un test en configurant le Pi 3 en client Wifi, pour qu'il s'associe au point d'accès d'un téléphone portable. Ce contrôle m'a assuré que tout fonctionnait correctement (donc que j'avais bien identifié le pilote à inclure dans le noyau, toussa). Restait à configurer le bidule en point d'accès avec hostapd et dnsmasq[7]

Hostapd m'a ennuyé un bon moment, refusant de configurer la carte en mode « point d'accès », pour un détail qu'il me faut encore creuser. L'outil peut sélectionner automatiquement un canal radio peu encombré (channel=0) mais, pas de chance pour moi, cette configuration ne fonctionne pas (alors que de nombreux internautes semblent en profiter, y compris sur des Pi3). J'ai indiqué un canal en dur, et mon point d'accès était là.

La configuration finale de hostpapd est la suivante :

interface=wlan0
driver=nl80211
hw_mode=g
channel=6    
ieee80211d=1
country_code=FR
ieee80211n=1  
ieee80211ac=1
wmm_enabled=1
ap_isolate=1

ssid=nom du point d'accès 
auth_algs=1
wpa=2       
wpa_key_mgmt=WPA-PSK-SHA256 WPA-PSK 
rsn_pairwise=CCMP
wpa_pairwise=CCMP
wpa_passphrase=blah blah blah

dnsmasq s'est plié sans regimber à mes fantaisies techniques, et j'ai pu vérifier que mon téléphone s'associait correctement au point d'accès. Roule !

Notes

[1] La navigation Web, quoi.

[2] Courrier électronique, VPN, DNS.

[3] La seconde règle est liée au fonctionnement du point d'accès Wifi.

[4] Vous vous attendiez à quoi ? Raspbian ?

[5] En m'amenant à faire un rapport de bug sur crossdev.

[6] C'est là que la compilation déportée devient vraiment appréciable.

[7] Pi-Hole viendra ensuite, je ne veux pas cumuler les changements.