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 :)

Zephilou

2 Responses

  1. 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

Laisser un commentaire

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

Post comment