ESPHome przez VPN Wireguard

Chcę podłączyć moduł ESP8266 w lokalizacji bez publicznego IP do Home Assiatanta który posiada publiczne IP. Zainstalowałem więc dodatek Wireguard. Konfiguracja po stonie HA jest najprostsza z możliwych i wygląda tak:

server:
  host: XXX.XXX.XXX.XXX
  addresses:
    - 172.27.66.1
  dns:
    - 1.1.1.1
    - 8.8.8.8

peers:
  - name: esp8266
    addresses:
      - 172.27.66.2
    allowed_ips: []
    client_allowed_ips: []

Konfiguracja w module ESP wygląda tak:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  use_address: "172.27.66.2"

time:
  - platform: sntp
    id: sntp_time
    servers:
      - 0.pool.ntp.org
      - 1.pool.ntp.org
      - 2.pool.ntp.org
    update_interval: 60s

wireguard:
  address: 172.27.66.2
  private_key: XXXXXlIYT1AmRAIBc7yHIh+g49+2F+HlLZMBCUx/23Y=
  peer_endpoint: XXX.XXX.XXX.XXX
  peer_public_key: XXXXXTA/3Q8pKpp6HtEq3Kn0pnxHBH4AKCiumriK8kU=

Dodatkowo w HA w konsoli należy wykonać polecenie:

ip route replace 172.27.66.0/24 via 172.30.33.4 src 192.168.11.110

Bez tego nie będzie pingu do modułu ESP. Po sprawdzeniu poleceniem “route” otrzymujemy:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         MiFi.lan        0.0.0.0         UG    100    0        0 enp0s18
172.27.66.0     a0d7b954-wiregu 255.255.255.0   UG    0      0        0 hassio
172.30.32.0     *               255.255.254.0   U     0      0        0 hassio
172.30.232.0    *               255.255.254.0   U     0      0        0 docker0
192.168.11.0    *               255.255.255.0   U     100    0        0 enp0s18

Po uruchomieniu wszystko działa prawidłowo, w logach po stronie HA i ESP widzę połączenie VPN, ping z HA do ESP jest 70ms. Dodaję więc nowe urządzenie do integracji ESP Home o adresie 172.27.66.2 na porcie 6053. Po chwili urządzenie i jego encje są dostępne. Skoro mam połączenie przez VPN to mogę teraz ten moduł podłączać do dowolnej sieci WiFi (bo konfigurowałem na tej z routera do którego jest podłączony HA). Zmieniam więc w ESP nazwę sieci i hasło, reszta bez zmian. Po ponownym uruchomieniu moduł łączy się z nowym WiFi, połączenie VPN działa, w logach widzę to samo co poprzednio, a ping jest na poziomie 200ms. Niestety HA już nie widzi tego urządzenia, encje stały się niedostępne. Usuwam więc i dodaję ponownie, ale po dłuższej chwili czekania wyskakuje komunikat: Unknown error occurred. Wygląda jakby działał nadal w sieci lokalnej mimo podania adresu VPN. W czym może być problem? Dodam jeszcze że po podłączeniu smartfona do tego Wireguarda, bez problemu działa integracja IP Webcam na adresie VPN i mam w HA obraz z kamery w telefonie, który jest podłączony do internetu przez sieć komórkową.

@Romek_B niestety źle interpretujesz jak działa połaczenie VPN. Aby z klienta zestawić połączenie VPN do bramki VPN musi istnieć połączenie sieciowe między klientem a bramką VPN czyli w skrócie takie:
ESPHome (dowolny IP adres prywatny) → internet → bramka VPN (adres IP publiczny). W ramach takiego połączenia jest zestawiany VPN - tunel VPN na istniejacym połączeniu a w tym tunelu adresy IP do komunikacji są już inne, napewno nie mogą się pokrywać z wcześniejszymi adresami IP ale muszą należeć do tej samej podsieci (w najprostszym rozwiązaniu).
Tutaj masz błąd w konfiguracji ESPHome:

Te adresy muszą nie mogą być takie same. Adres otrzymany z Wi-Fi może być dowolny ale inny niż z adresacji 172.27.66.0/24, którą przeznaczyłeś sobie na tunel VPN.
Przydzielanie statycznych adresów IP odbywa się inaczej, poczytaj WiFi Component — ESPHome :
manual_ip (Optional): Manually configure the static IP of the node.

gdzies znalazlem ze port 6053 (for HA API) seems not opened trough wireguard at all

Okazuje się że niezbędne jest dopisanie

netmask: 0.0.0.0

w sekcji wireguard i można wtedy dodaać nowe urządzenie na porcie 6053 tak jakby się znajdowało w sieci domowej.

Maska sieciowa 0.0.0.0 (w CIDR, /0) oznacza „każdy adres istniejący w całym wszechświecie”, co jest nieprawidłową maską sieciową dla określonego zakresu adresów IP — zwykle można ją zobaczyć tylko w przypadku adresu IP 0.0.0.0, który w CIDR wynosi 0.0.0.0/0 i oznacza cały Internet. Ustawiając taką maskę jesteś narażony na wszelkiego rodzaju ataki.

Hej, Ale ze w tunelu VPN jest narazony na ataki ?

U mnie tez to pomogło :slight_smile: Dzieki za informacje !