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
- Si le robot est connecté au réseau, je dois pouvoir m’y connecter en SSH via ssh user@alias.local.
- En cas de perte de connexion, un hotspot nommé HotspotFallback doit automatiquement démarrer.
- Une fois connecté à ce hotspot, je dois pouvoir accéder au robot via ssh user@alias.local ou ssh user@192.168.42.1.
- Si le Wi-Fi revient, le hotspot doit s’éteindre et le robot doit se reconnecter au réseau initial.
- 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
Activer la connexion SSH
1 2
sudo apt update sudo apt instal openssh-server
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
Sécuriser via pare-feu (UFW)
1 2
sudo apt install ufw sudo ufw allow ssh
Création du script de basculement
Installer les dépendances
sudo apt install iw dnsmasq network-manager
Créer le script
nano ~/hotspot_switcher.sh
- Copier le contenu du script depuis :
https://github.com/dclause/hotspot-fallback/blob/develop/hotspot_switcher.sh
- Configurer les variables du script
WIFI_INTERFACE
→ obtenue viaip link | grep wl
WIFI_ID
→ nom exact du réseau Wi-Fi principal sur lequel se connecterHOTSPOT_SSID
etHOTSPOT_PASSWORD
→ SSID et mot de passe du hotspotHOTSPOT_CON_NAME
→ nom de la connexion hotspotHOTSPOT_IP
→ IP fixe en mode hotspot
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
Créer un service SystemD
sudo nano /etc/systemd/system/wifi-hotspot-check.service
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
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
Créer le fichier timer
sudo nano /etc/systemd/system/wifi-hotspot-check.timer
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
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:
Créer la configuration dnsmasq
sudo nano /etc/dnsmasq.conf
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
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.
Ajouter un commentaire