Mise en place d’un script de fallback hotspot en cas de perte de connexion Wi-Fi

Je prépare actuellement une conférence à Londres intitulée "Rust et la robotique". Pour cette occasion, je dois emmener l’un de mes robots pour des démonstrations. Problème : je n’ai pas accès au Wi-Fi en amont de l’événement pour configurer l’auto-connexion réseau.

Cas d'usage

Imaginons que vous ayez un robot contrôlable à distance via une interface auto-hébergée (comme Hermes-Studio), ou un ordinateur accessible en SSH. Tant que vous êtes sur un réseau connu (maison, entreprise), tout fonctionne. Mais que se passe-t-il en cas de perte de réseau ? Ou si vous devez déplacer votre robot dans un lieu inconnu, sans couverture réseau ? Et si vous n’avez pas d’accès physique à l’ordinateur, ou que le robot n’a ni écran ni périphériques de contrôle ? Vous êtes bloqué.

C’est ce problème que nous allons adresser : un script vérifiera la connexion toutes les minutes. En cas de déconnexion, il démarrera automatiquement un hotspot Wi-Fi, vous permettant de vous reconnecter au robot, soit pour le contrôler, soit pour reconfigurer un nouveau réseau.

Objectifs

  1. Si le robot est connecté au réseau, je dois pouvoir m’y connecter en SSH via ssh user@alias.local.
  2. En cas de perte de connexion, un hotspot nommé HotspotFallback doit automatiquement démarrer.
  3. Une fois connecté à ce hotspot, je dois pouvoir accéder au robot via ssh user@alias.local ou ssh user@192.168.42.1.
  4. Si le Wi-Fi revient, le hotspot doit s’éteindre et le robot doit se reconnecter au réseau initial.
  5. Je dois pouvoir basculer manuellement entre le Wi-Fi et le hotspot.

Installation

Nous allons utiliser NetworkManager (nmcli) pour gérer la connexion, et non hostapd comme dans les anciens tutos. Pour la résolution DNS en mode hotspot, nous utiliserons également dnsmasq.

Pré-requis

  1. Activer la connexion SSH

    1
    2
    
    sudo apt update
    sudo apt instal openssh-server
  2. Vérifier la connexion

    1
    2
    3
    
    hostname                  # Affiche le nom de la machine
    whoami                    # Affiche le nom d’utilisateur
    ssh user@machine.local    # Test de connexion SSH
  3. Sécuriser via pare-feu (UFW)

    1
    2
    
    sudo apt install ufw
    sudo ufw allow ssh

Création du script de basculement

  1. Installer les dépendances

    sudo apt install iw dnsmasq network-manager
  2. Créer le script

    nano ~/hotspot_switcher.sh
  3. Copier le contenu du script depuis :
    https://github.com/dclause/hotspot-fallback/blob/develop/hotspot_switcher.sh
Dans la section "Configuration Variables", adaptez les valeurs à votre configuration.
  1. Configurer les variables du script
    • WIFI_INTERFACE → obtenue via ip link | grep wl
    • WIFI_ID → nom exact du réseau Wi-Fi principal sur lequel se connecter
    • HOTSPOT_SSID et HOTSPOT_PASSWORD → SSID et mot de passe du hotspot
    • HOTSPOT_CON_NAME → nom de la connexion hotspot
    • HOTSPOT_IP → IP fixe en mode hotspot
  2. Rendre le script exécutable

    chmod +x ~/hotspot_switcher.sh

Utilisation manuelle

Activer le hotspot:

sudo ~/hotspot_switcher.sh start

Revenir au Wi-Fi:

sudo ~/hotspot_switcher.sh stop

Utilisation automatique

  1. Créer un service SystemD

    sudo nano /etc/systemd/system/wifi-hotspot-check.service
  2. Editer le contenu (ATTENTION à modifier le chemin absolu vers votre script)

    1
    2
    3
    4
    5
    6
    
    [Unit]
    Description=Vérifie la connexion Wi-Fi principale
     
    [Service]
    Type=oneshot
    ExecStart=/home/user/hotspot_switcher.sh check
  3. Démarrer le service

    1
    2
    3
    
    sudo systemctl daemon-reexec
    sudo systemctl daemon-reload
    sudo systemctl start wifi-hotspot-check.service

Vérification périodique via Timer

  1. Créer le fichier timer

    sudo nano /etc/systemd/system/wifi-hotspot-check.timer
  2. Editer le contenu

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    [Unit]
    Description=Lance la vérification Wi-Fi toutes les 60s
     
    [Timer]
    OnBootSec=1min
    OnUnitActiveSec=1min
    Persistent=true
     
    [Install]
    WantedBy=timers.target
  3. Démarrer le service

    1
    2
    3
    
    sudo systemctl daemon-reexec
    sudo systemctl daemon-reload
    sudo systemctl start wifi-hotspot-check.timer

Configurer le DNS en mode hotspot

Sans routeur, vous devez gérer vous-même la résolution DNS. C'est ce qui vous permettra en mode Hotspot d'utiliser le nom de la machine au lieu de l'IP pour votre connexion SSH: ssh user@machine.local

Cependant, en mode Hotspot, nous ne sommes plus assisté du service DNS de notre box ou de notre fournisseur réseau. Notre robot ou ordinateur distant doit lui-même résoudre les alias DNS et nous avons donc besoin de configurer cela:

  1. Créer la configuration dnsmasq

    sudo nano /etc/dnsmasq.conf
  2. Editer la configuration (ATTENTION à modifier l'interface réseau par la votre)

    1
    2
    3
    4
    5
    6
    
    interface=wlp2s0
    dhcp-range=192.168.42.100,192.168.42.200,12h
    dhcp-option=3,192.168.42.1
    dhcp-option=6,8.8.8.8,8.8.4.4
    server=8.8.8.8
    server=8.8.4.4
  3. Redémarrer la machine

    sudo reboot

Conclusion

Votre machine est maintenant capable de basculer automatiquement en mode hotspot si la connexion Wi-Fi est perdue. Cela garantit une reprise de contrôle à distance via SSH.

ATTENTION : une machine ne peut pas être simultanément client Wi-Fi et hotspot. Il est donc impératif de tester ce script au préalable, car si le Wi-Fi échoue sans fallback fonctionnel, vous perdez l’accès.

Ajouter un commentaire

Votre nom sera affiché publiquement avec votre commentaire.
Votre email restera privé et n'est utilisé que pour vous notifier de l'approbation de ce commentaire.
Sur internet, vous pouvez être qui vous voulez. Soyez quelqu'un de bien :)