Problème de configuration ESPHome & WireGuard

Bonjour,

Dans le but d’intéragir avec un ESP32 sous ESPHome en dehors de mon réseau local, je souhaite mettre en place une connexion VPN avec WireGuard.

J’ai donc installé WireGuard sur HA, configuré le VPN, ouvert le port et j’arrive à accéder à mon instance HA sur mon téléphone en 4G. Donc c’est top et à priori bien configuré. Pour information, j’ai aussi AdGuard Home qui tourne.

Maintenant, j’ai fait la config sur ESPhome avec le composant Wireguard, d’après les logs, le client ESP est bien connecté :
[I][wireguard:096]: WireGuard remote peer is online (latest handshake 2024-02-20 10:06:34 CET)

Voici la config de mon ESP :

esphome:
  name: esphome-web-403838
  friendly_name: ESP-Nico

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "7Lb8hxLaACM.....Gb7QO5K5U="

ota:

wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_password
  use_address: 192.168.2.10

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-403838"
    password: "r2F....g"

captive_portal:

# Time sync
time:
  - platform: sntp
    id: sntp_time
    timezone: Europe/Paris
    servers:
     - 0.pool.ntp.org
     - 1.pool.ntp.org
     - 2.pool.ntp.org

# WireGuard VPN
wireguard:
  address: 192.168.2.10
  private_key: 0BTMfuq1V/W4......Q7JipJcGs=
  peer_endpoint: nycco-homeassistant.duckdns.org
  peer_public_key: n69Hd59P......A23g=

binary_sensor:
  - platform: wireguard
    status:
      name: 'WireGuard Status'

Mais sur HA l’ESP est Offline et les infos ne remontent pas. Je ne dois pas être loin :confused:

Quelqu’un l’a t il déjà fait ça ? Auriez vous une idée à me suggérer ?
Je pense que ca aiderait pas mal de gens car les possibilités sont énormes !

Merci par avance pour votre temps.

Salut,
J’utilise Wiregard.
J’ai un serveur sous forme de LXC sur Proxmox.
Ce VPN me permet un accès distant à toutes les machines de mon LAN comme si j’étais dans mon LAN.
J’ai accès à mon ESP WLED, à mes trois ESP32 ESPHome, aux interfaces web de mes Shelly, à mon NAS, à mon serveur Proxmox et bien sûr à mon HA.
Il me suffit d’ouvrir le tunnel entre mon smartphone ou mon portable et mon serveur Wireguard.
Je n’ai rien codé dans mes ESP. Je n’ai qu’un seul port ouvert.

Hello,

Dans son cas, il veut installer ses ESP sur un réseau « externe » au sien et faire le lien avec HA via wireguard :wink:

Le WIreguardian @Oles67 n’est pas sur le coup ? :laughing:

Oops !
J’avais pas compris cela.
Dans l’adresse du peer_endpoint, ne faudrait-il pas le port ?

peer_endpoint: nycco-homeassistant.duckdns.org:51820  # port par defaut de Wiregard

Après, si il fait pas ses tests in-situ , cad esp et HA sur le même réseau, c’est possible que ça boucle et coince

J’ai une vie IRL.
:joy::wink:

Je ne suis pas expert WG, juste un débutant comme beaucoup et WG m’offre des perspectives très intéressante.
Tant que des gens débutants ou confirmés parlent/testent WG, je suis preneur des erreurs/trouvailles.

Amusez vous/nous bien avec WG.

Merci à la communauté pour le partage.

Merci à tous pour vos réponse,

@GDX2 c’est une bonne remarque mais le port est implicite donc malheureusement ca ne fonctionne pas non plus.

@Krull56 Quand je fais des tests en in situ justement donc via le VPN mais avec l’esp connecté au réseau local ça fonctionne, j’ai bien accès aux données de mon ESP mais c’est via son adresse IP initiale pas celle que j’attribue avec le VPN, peut être que mon problème vient de la :confused:

@Oles67 je touche un truc, il ne manque pas grand chose ahah

Avoir la même adresse IP sur le WIFI et le wireguard, ça ne me parait pas correct…
Le VPN dans 99 fois sur 100 (il y a une vieillerie qui faisait du VPN en niveau 2), c’est comme avoir une autre interface sur ton équipement. ESP32, PC ou autre.
Avoir la même adresse IP (en fait le même réseau ici 192.168.2.x/24), ça va faire des trucs bizarres.
Donc, pour moi, il faudrait que ton adresse en VPN Wireguard soit sur un autre réseau (par exemple 192.168.100.x/24).
Il faut bien entendu que le VPN HA soit aussi dans ce réseau-là.

C’est ce qui m’avais fait croire (voir première réponse) que l’ESP était dans le réseau local.
Et effectivement, mes tunnels WireGuard utilisent un autre adressage IP que mon réseau local.
Local → 192.168.xx.xx
WireGuard → 10.6.xx.xx

Merci de faire un retour d’expérience.
Je mettrai un lien vers mon thread centralisation wireguard

Bonsoir,

Merci pour vos retours.

Mon réseau local est en 192.168.1.X et voici ma config wireguard ci-dessous. Je suis bien sur un adressage différent en 192.168.2.X, est ce bon ?

server:
  host: nycco-homeassistant.duckdns.org
  addresses:
    - 192.168.2.1
  dns:
    - 172.30.32.1
peers:
  - name: esp-nico
    addresses:
      - 192.168.2.10
    allowed_ips: []
    client_allowed_ips:
      - 192.168.1.0/24
      - 192.168.2.0/24
  - name: iphone-nico
    addresses:
      - 192.168.2.11
    allowed_ips: []
    client_allowed_ips:
      - 192.168.1.0/24
      - 192.168.2.0/24

Lorsque que je connecte mon ESP avec useAdress: 192.168.2.10, j’ai l’impression que cette IP ne lui est pas vraiment adressée.

Tu indiques que l’ESP est « ailleurs ». Cet ailleurs a un plan d’adressage IP local. Quel est l’adressage du wifi sur lequel est connecté l’esp ?
Et là, le plan d’adressage local de l’ESP est, on dirait, en .2.x et quand il se connecte avec Wireguard, tu redonnes une IP en .2.y.
Il faut en changer l’un des deux…

L’adressage du wifi sur lequel l’esp est est identique à mon réseau local, c’est pour cela que j’ai changé l’adresse du VPN en 192.168.2.X :

Réseau local HA : 192.168.1.X
Réseau local « ailleurs » : 192.168.1.X
Réseau Wireguard : 192.168.2.X

Voici les logs de mon ESP sur mon réseau local « ailleurs » (pour reprendre les termes :)). Il est uniquement accessible sur son IP locale : 192.168.1.64 mais pas sur son IP attribuée par le VPN 192.168.2.10.

[I][app:102]: ESPHome version 2024.2.0 compiled on Feb 22 2024, 09:47:49
[C][wifi:577]: WiFi:
[C][wifi:409]:   Local MAC: B8:D6:1A:40:38:38
[C][wifi:414]:   SSID: [redacted]
[C][wifi:415]:   IP Address: 192.168.1.64
[C][wifi:417]:   BSSID: [redacted]
[C][wifi:418]:   Hostname: 'esphome-web-403838'
[C][wifi:420]:   Signal strength: -76 dB ▂▄▆█
[C][wifi:424]:   Channel: 1
[C][wifi:425]:   Subnet: 255.255.255.0
[C][wifi:426]:   Gateway: 192.168.1.1
[C][wifi:427]:   DNS1: 192.168.1.1
[C][wifi:428]:   DNS2: 0.0.0.0
[C][logger:447]: Logger:
[C][logger:448]:   Level: DEBUG
[C][logger:449]:   Log Baud Rate: 115200
[C][logger:451]:   Hardware UART: UART0
[C][captive_portal:088]: Captive Portal:
[C][web_server:168]: Web Server:
[C][web_server:169]:   Address: 192.168.2.10:80
[C][sntp:055]: SNTP Time:
[C][sntp:056]:   Server 1: '0.pool.ntp.org'
[C][sntp:057]:   Server 2: '1.pool.ntp.org'
[C][sntp:058]:   Server 3: '2.pool.ntp.org'
[C][sntp:059]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[C][wireguard:140]: WireGuard:
[C][wireguard:141]:   Address: 192.168.2.10
[C][wireguard:142]:   Netmask: 255.255.255.255
[C][wireguard:143]:   Private Key: [redacted]
[C][wireguard:144]:   Peer Endpoint: [redacted]
[C][wireguard:145]:   Peer Port: [redacted]
[C][wireguard:146]:   Peer Public Key: [redacted]
[C][wireguard:148]:   Peer Pre-shared Key: [redacted]
[C][wireguard:149]:   Peer Allowed IPs:
[C][wireguard:151]:     - 192.168.1.0/255.255.255.0
[C][wireguard:151]:     - 192.168.2.0/255.255.255.0
[C][wireguard:154]:   Peer Persistent Keepalive: 0 (DISABLED)
[C][wireguard:156]:   Reboot Timeout: 900s
[C][wireguard:158]:   Require Connection to Proceed: NO
[C][wireguard:159]:   Update Interval: 10.0s
[C][mdns:115]: mDNS:
[C][mdns:116]:   Hostname: esphome-web-403838
[C][ota:096]: Over-The-Air Updates:
[C][ota:097]:   Address: 192.168.2.10:3232
[C][ota:103]:   OTA version: 2.
[C][api:139]: API Server:
[C][api:140]:   Address: 192.168.2.10:6053
[C][api:142]:   Using noise encryption: YES
[D][sntp:080]: Synchronized time: 2024-02-22 09:55:29
[D][wireguard:259]: starting WireGuard connection...
[I][wireguard:273]: WireGuard connection started
[I][wireguard:103]: WireGuard remote peer is online (latest handshake 2024-02-22 09:55:31 CET)

Dans les logs la connexion VPN est bien établie.

Merci par avance pour votre temps.

Je pense avoir identifié une piste de problème.

Lorsque que je me connecte au VPN avec mon téléphone en 4G, tout est ok, j’accède à mon instance HA etc.

En revanche quand je me connecte (toujours avec le téléphone) en wifi sur le réseau « ailleurs » où je vais connecter mon ESP, je n’arrive plus à accéder à mon instance HA.

Peut etre un problème de DNS ? j’utilise AdGuadHome sur HA.

C’est normal.
Vu que ton réseau « ailleurs » est en 192.168.1.x et que ton réseau HA est AUSSI en 192.168.1.x , tu ne peux pas avoir un équipement « ailleurs » avec une adresse en .1.x et utiliser le VPN pour se connecter à une adresse aussi en 1.y.
Par définition (avec le masque par défaut…), 1.x et 1.y sont sur le même réseau et donc ne passeront pas par du routage pour se parler.

Plutôt routage, pour moi.

Merci pour les conseils.

Alors maintenant j’arrive à joindre mon ESP sur son adresse attribuée par le VPN en 192.168.2.10. J’accède donc à l’interface web esphome, le wireguard status est ON.

Tout semble ok mais impossible de l’ajouter à HomeAssistant :frowning: Erreur inconnue quand j’essaie d’ajouter 192.168.2.10 à l’intégration ESPHome.

Bonjour,

J’ai exactement le même problème. Je peux accéder à l’ESP32 depuis les 2 réseaux, « ici » (A) et « ailleurs » (B) grâce à WireGuard. En revanche impossible de connecter l’ESP à Home Assistant via l’API.

Voici ma config:

  • Réseau local A en 192.168.0.x
    – Home Assistant en 192.168.0.200, avec le serveur WireGuard en 192.168.9.1 (voir YAML ci-dessous)
  • Réseau local B en 192.168.31.x totalement séparé (à 100km :slight_smile: )
    – ESP avec ESPHome (voir YAML ci-dessous)
    → WireGuard est installé et fonctionnel sur l’ESP (je le vois dans les logs coté serveur et coté ESP)

Accès à l’ESP :

  • depuis le réseau A, page web 192.169.9.5 ok, pas de ping sur 192.169.9.5
  • depuis le réseau B, page web 192.168.31.141 ok, ping ok sur 192.168.31.141

YAML partiel de l’ESP32 :

Afficher le YAML
esphome:
  name: frigo
  friendly_name: Frigo

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:

api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  reboot_timeout: 0s

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: "xxxxxxxxxxxxxxxx"
  password: "xxxxxxxxxxxxxxx"
  use_address: 192.168.9.5

  ap:
    ssid: "xxxxxxxxxxxxxxx"
    password: "xxxxxxxxxxxxxxxxxxx"

captive_portal:

web_server:
  port: 80

time:
  - platform: sntp
    id: sntp_time
    timezone: Europe/Paris
    servers:
     - 0.pool.ntp.org
     - 1.pool.ntp.org
     - 2.pool.ntp.org

wireguard:
  address: 192.168.9.5
  private_key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  peer_endpoint: xxxxxxxxxxxxxxxxxxxxx.duckdns.org
  peer_public_key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  peer_persistent_keepalive: 25s

YAML Serveur WireGuard :

server:
  host: xxxxxxxxxxxxx.duckdns.org
  addresses:
    - 192.168.9.1
  dns:
    - 192.168.0.1
    - 1.1.1.1
    - 8.8.8.8
peers:
  - name: Frigo
    addresses:
      - 192.168.9.5
    allowed_ips: []
    client_allowed_ips: []

Si quelqu’un a une idée je suis preneur :slight_smile: