Un Raspberry Pi pour sauver sa box
Quand on perd la synchro de sa box, plus rien ne va :(
[cyklodev_summary]
Le problème
Voila un exemple d’architecture avec un routeur interne qui pointe vers le routeur du FAI. Ce routeur a perdu sa synchro et internet est donc coupé.
La solution
Mais quand on a un smartphone sous la main, on se dit qu’internet est pas très loin, mais il manque un petit quelque chose…
C’est le moment de sortir son rpi du tiroir, mais uniquement les versions 3 ou 4 qui ont une prise RJ45 et du wifi.
Partage de connexion et RPI
C’est le moment de démarrer son rpi avec une distribution raspbian (ou ce que vous préférez), peu importe la version, on va uniquement faire du root en ssh.
Partage de connexion Wifi
Passez votre smartphone et partage de connexion (Android / IOS) et notez le nom du hotspot ainsi que le mot de passe.
Connectez le wifi
Pour cela, votre rpi est déjà connecté au RJ45 et on va passer en ssh dessus.
On commence par désactiver l’interface du wifi.
ifconfig wlan0 down
Puis on édite le fichier de configuration pour mettre le nom de son hotspot avec le mot de passe associé.
root@raspberrypi:~# vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="nomduwifi"
psk="motdepasse"
}
Puis on remonte l’interface wifi.
ifconfig wlan0 up
Enfin, on vérifie que l’interface est bien présente avec une ip local (entre le smartphone et le rpi).
root@raspberrypi:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.202 netmask 255.255.255.0 broadcast 10.0.0.255
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.43.108 netmask 255.255.255.0 broadcast 192.168.43.255
Notre connexion de secours est donc établie, il reste à router tout le trafic.
RPI en mode box (routeur)
Pour que le rpi s’occupe du routage il va falloir mettre en place plusieurs choses:
- utiliser le wifi comme route par defaut
- autoriser le packet forwarding
- configurer iptables pour « post router » les paquets vers le wifi
Les routes
Avant de monter l’interface du wifi, on a regarder les routes par defaut.
root@raspberrypi:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.13 0.0.0.0 UG 202 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
Pour le lan, la route par défaut (0.0.0.0) pointe vers 10.0.0.13 (c’est notre routeur local) qui lui pointe vers la box.
Montons l’interface wlan0.
root@raspberrypi:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.13 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 192.168.43.1 0.0.0.0 UG 303 0 0 wlan0
10.0.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.43.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
Il y a maintenant 2 routes par défaut, mais c’est toujours eth0 qui à l’avantage car sa métrique est plus basse.
Faites sauter la route par défaut qui est sur eth0 (car oui, on ne peut pas modifier une route) .
root@raspberrypi:~# route del default gw 10.0.0.13
Vérifions la nouvelle table de routage.
root@raspberrypi:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.43.1 0.0.0.0 UG 303 0 0 wlan0
10.0.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.43.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
Maintenant que la table de routage est propre, on peut passer au point suivant.
Packet forwarding
Il faut maintenant autoriser le transfert de paquets entre les interfaces du rpi (wlan0 / eth0).
sysctl -w net.ipv4.ip_forward=1
Rien de plus
Iptables
Il faut maintenant configurer iptables pour qu’il nous laisse faire ce qu’on a préparer plus haut.
On commence par nettoyer toutes les règles existantes :
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Un fois la configuration nettoyée, on force tous les paquets entrants sur le rpi, à sortir par le wlan0
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Tout est pret pour la bascule !
Basculer le trafic
On se positionne maintenant sur le routeur local qui avait comme route par défaut la box (10.0.0.1).
Dans mon cas, c’est aussi une box linux donc il me suffit de faire la même manipulation de changement de route par défaut.
[root@local-router ~]# route del default
[root@local-router ~]# route add default gw 10.0.0.1
Avec cela tout le trafic du lan, derrière le routeur local, passe par la 4G du smartphone.
Épilogue
Voila l’architecture de secours, mais faites attention à votre forfait data :)
Nickel ! Super merci. Ce tuto m’a permis de remonter une « box » qui n’a pas aimé les orages.
Fait sur un RPi 1 (si, si) en buster et remplacé le Wifi par l’USB (Tethering) avec usb0 au lieu de wlan0
L’ip fixe de ma box et je revis
Un plaisir d’avoir pu sauver un réseau local :)