Aller au contenu

Liaisons de secours de la passerelle

Quand la box tombe, la passerelle bascule seule sur une liaison de secours : un port ethernet libre, le partage de connexion d’un téléphone en wifi… La zone garde Internet en mode dégradé, puis revient sur la box dès qu’elle répond.

Chaque lien vers Internet (la WAN, puis les secours) porte sa propre route par défaut. La plus basse métrique l’emporte.

LienMétrique
WAN (la box)100
Liaison de secours200 + 10 × priority (300 par défaut)
Lien de retour, en probationmétrique + 10000
Lien sans Internetmétrique + 20000

Trois situations sont couvertes :

SituationDétectionEffet
Câble débranché, box éteinte, plus de bail DHCPla route de la WAN disparaîtle noyau prend la route suivante
Box allumée mais Internet coupéla sonde dnf-uplink-monitor échoue 3 fois (environ 40 secondes)la WAN passe à 20100, le secours prend le relais
Internet revenu sur la box6 sondes réussiesretour sur la WAN
Câble débranché ou changé, box redémarrée, 3 tours sans routeperte de porteuse ou de routele lien revient en probation (10100), puis retrouve sa place après 6 sondes réussies

La sonde envoie un ping par chaque lien (1.1.1.1 et 9.9.9.9, toutes les 10 secondes). Elle ne dépend pas du DNS : elle vise des adresses IP.

Les deux types de liaison n’attendent pas de la même façon :

TypeEn attenteRéveil
ethernetconnecté, sans trafic (la métrique garde tout sur la box)immédiat
wifiradio coupée (rfkill) : aucune connexion au partagedès qu’aucun lien préféré n’atteint Internet
  1. Repérer l’interface sur la passerelle :

    Fenêtre de terminal
    ip -br link

    Elle doit être libre : ni la WAN, ni un port du LAN, ni la radio d’un point d’accès wifi.

  2. Déclarer la liaison dans le fichier de l’hôte :

    usr/machines/gw/configuration.nix
    darkone.host.gateway.backupLinks = {
    phone = {
    type = "wifi";
    interface = "wlp4s0";
    };
    voisin = {
    type = "ethernet";
    interface = "enp3s0";
    priority = 20;
    };
    };
    OptionRôle
    typeethernet (client DHCP) ou wifi (client WPA2/WPA3)
    interfaceinterface qui porte le lien
    priority1 à 99, la plus basse est préférée parmi les secours
  3. Pour un lien wifi, saisir le SSID et la passphrase dans sops avec just sops :

    usr/secrets/secrets.yaml
    backup-link:
    phone:
    ssid: "Partage du téléphone"
    psk: "passphrase-du-partage"

    Le SSID et la passphrase ne passent jamais par le store Nix.

  4. Déployer :

    Fenêtre de terminal
    just apply gw
Fenêtre de terminal
networkctl list # le lien est « routable » quand il est actif
ip -4 route show default # la première ligne est le lien utilisé
rfkill # radio wifi de secours « bloqué » en veille
journalctl -u dnf-uplink-monitor -f # bascules et réveils radio, en direct

Avec la box en panne et le téléphone en partage de connexion :

default via 192.168.1.254 dev enp1s0 proto dhcp src 192.168.1.10 metric 20100
default via 192.168.43.1 dev wlp4s0 proto dhcp src 192.168.43.20 metric 300
OptionDéfautRôle
darkone.host.gateway.linkCheck.targets1.1.1.1, 9.9.9.9adresses pingées, une réponse suffit
darkone.host.gateway.linkCheck.interval10secondes entre deux tours
darkone.host.gateway.linkCheck.failAfter3échecs avant de pénaliser un lien
darkone.host.gateway.linkCheck.recoverAfter6succès avant de le rétablir

La sonde publie trois métriques pour Prometheus :

MétriqueValeur
dnf_gateway_link_up1 si le lien a une route et atteint Internet
dnf_gateway_link_active1 sur le lien qui porte la route par défaut
dnf_gateway_link_standby1 sur une radio wifi de secours coupée en attente

L’alerte GatewayOnBackupLink (avertissement) se déclenche après 2 minutes sur une liaison de secours.

LimiteDétail
Flux coupés à la basculeles connexions en cours repartent par le nouveau lien (appel ou téléchargement à relancer)
Sous-réseau en conflitun lien qui distribue des adresses du réseau de la zone (ex. 10.0.0.0/16) casse le routage ; un partage de téléphone utilise un petit réseau distinct (/24), sans conflit en pratique
SSID et passphrasesans guillemet double (")
Déverrouillage LUKS à distancepar la WAN ou le LAN seulement
Liaisons retiréesune pénalité en cours reste jusqu’au redémarrage : supprimer /run/systemd/network/*.network.d/90-dnf-penalty.conf, puis networkctl reload