Aller au contenu principal

Objectif

WireGuard crée un transport réseau chiffré entre leukOS et les microcontrôleurs compatibles IP.

Cela protège:

  • la confidentialité du trafic,
  • l'intégrité du transport,
  • l'authentification des pairs réseau par clés WireGuard.

Positionnement

WireGuard sécurise la couche réseau, mais ne remplace pas complètement la sécurité applicative.

Recommandation leukOS:

  • WireGuard pour le tunnel chiffré,
  • HMAC + nonce + timestamp pour l'authentification des commandes applicatives.

Topologie type

  • Le hub domotique leukOS expose une interface WireGuard (wg0).
  • Chaque MCU Ethernet rejoint le VPN avec une clé privée dédiée.
  • Les commandes passent par les adresses VPN (pas en clair sur le LAN).

Séquence de communication sécurisée

Séquence d'initialisation d'un peer MCU

Bonnes pratiques d'exploitation

  • Une paire de clés WireGuard par MCU.
  • ACL AllowedIPs minimales (least privilege).
  • Rotation régulière des clés WireGuard.
  • Supervision des peers (dernier handshake, perte de keepalive).
  • Segmentation réseau: le trafic domotique passe prioritairement via wg0.

Limites à garder en tête

  • Si un peer VPN est compromis, il peut émettre du trafic dans son périmètre autorisé.
  • Il faut donc conserver un contrôle applicatif (HMAC/ACL métier) côté leukOS.

Liaison MCU WT32-ETH01​

La liaison active entre le node et le contrôleur de bureau utilise le sous-réseau 10.77.0.0/24 :

  • node Raspberry : 10.77.0.1, écoute UDP 51820 ;
  • WT32-ETH01 : 10.77.0.2 ;
  • le plugin C++ cible tcp://10.77.0.2:23 et attache sa socket à wg0 avec SO_BINDTODEVICE ;
  • seule l'adresse tunnel du node peut ouvrir le serveur de commandes du MCU ;
  • les anciens services TCP 3232 (OTA) et 3233 (configuration directe) ne sont pas démarrés ;
  • les configurations JSON transitent par leukos-node, dans une trame HMAC signée, sur le même canal WireGuard.

Le script d'initialisation prend en charge les images embarquées qui disposent de wg mais pas de wg-quick. Il refuse un fichier wg0.conf dont les droits ne sont pas 0600 ou 0400.

Liaison dédiée Saturn ↔ leukOS​

Saturn n'utilise pas le tunnel des MCU. Une interface indépendante wg-saturn relie uniquement le nœud (10.78.0.1/30) à l'hôte Saturn (10.78.0.2/30) sur UDP 51821. Le daemon gRPC du nœud écoute exclusivement sur 10.78.0.1:9080 et le port gRPC Saturn est publié exclusivement sur 10.78.0.2:9130.

Chaque charge utile gRPC est en plus encapsulée avec le protocole AUTH1/RESP1 décrit dans la page HMAC. Les réponses reprennent le nonce de la requête et chaque récepteur maintient un cache anti-rejeu. La perte du tunnel échoue donc fermée, sans repli HTTP ou LAN, et reste indépendante de wg0 et de ses pairs ESP32.