Tanie gniazdko Wi-Fi ma oprogramowanie, którego nie sprawdzisz, a wiele takich urządzeń łączy się z chmurą producenta. W płaskiej sieci domowej takie gniazdko jest w jednej sieci z laptopem, serwerem NAS i telefonem. Po przeniesieniu inteligentnych urządzeń do osobnej sieci VLAN przejęte urządzenie dotrze do Home Assistanta i do niczego więcej.
Haczyk polega na tym, że wiele wygodnych funkcji inteligentnego domu działa tylko wtedy, gdy wszystko jest w jednej sieci. Po podziale przestaje działać automatyczne wykrywanie, niektóre urządzenia wyglądają na wyłączone, a Matter potrafi zawodzić w niejasny sposób. Większości tych kłopotów unikniesz, jeśli zaplanujesz podział, zanim przeniesiesz pierwsze urządzenie.
Co psuje rozdzielenie sieci
Prawie wszystkie problemy sprowadzają się do jednego protokołu: mDNS (multicast DNS, znanego też jako Zeroconf albo Bonjour). Urządzenia ogłaszają się pakietami grupowymi wysyłanymi na adres 224.0.0.251, port UDP 5353, a te pakiety nie wychodzą poza własną podsieć.
- Wykrywanie w Home Assistancie. Dokumentacja integracji Google Cast mówi wprost, że urządzenia Cast są wykrywane automatycznie tylko w tej samej podsieci co Home Assistant, bo pakiety mDNS nie są przekazywane między podsieciami. Wykrywanie przez granicę podsieci jest „niezalecane i nieobsługiwane”. Z tego samego mechanizmu Zeroconf korzysta wiele innych integracji.
- ESPHome Device Builder. ESPHome używa mDNS do tłumaczenia nazw
.localna adresy i do sprawdzania, czy urządzenie jest w sieci. Według sekcji z częstymi pytaniami w dokumentacji ESPHome to przestaje działać, gdy serwer i urządzenia są w różnych podsieciach lub sieciach VLAN. - Matter. Dokumentacja Matter w Home Assistancie wyjaśnia, że protokół potrzebuje swobodnego przepływu lokalnego IPv6 i mDNS. Może przez to słabo współpracować z rozwiązaniami z sieci firmowych, takimi jak VLAN-y, filtrowanie ruchu grupowego i (źle działające) śledzenie ruchu IGMP („IGMP snooping”).
Zwykły ruch do jednego adresu, na przykład gdy Home Assistant łączy się z węzłem ESPHome po IP albo gniazdko łączy się z brokerem MQTT, przechodzi przez router bez kłopotu, o ile zapora sieciowa go przepuszcza.
Co gdzie umieścić
Zanim zaczniesz zmieniać ustawienia routera, podziel urządzenia na grupy:
- Sieć VLAN dla IoT: gniazdka i przekaźniki Wi-Fi, węzły ESPHome, żarówki i inne urządzenia, które muszą rozmawiać tylko z Home Assistantem (i ewentualnie z chmurą producenta).
- Ta sama sieć co Home Assistant: urządzenia Matter łączące się przez Wi-Fi i routery brzegowe Thread. Dokumentacja Matter w Home Assistancie zaleca, żeby były w tej samej sieci VLAN co Home Assistant, więc nie przenoś ich, chyba że razem z Home Assistantem.
- Urządzenia Zigbee i Z-Wave w ogóle nie używają IP, więc VLAN ich nie dotyczy. Liczy się tylko koordynator i to tylko wtedy, gdy jest koordynatorem sieciowym (Ethernet albo Wi-Fi), a nie modułem USB. Traktuj go jak każde inne urządzenie IoT, do którego Home Assistant musi mieć dostęp.
- Sieć główna: komputery, telefony, NAS i wszystko, na czym są prywatne dane.
Dwa układy, które działają
Układ A: Home Assistant w sieci głównej, router pośrodku. Każdy pakiet między siecią IoT a Home Assistantem przechodzi przez zaporę na routerze, więc dokładnie decydujesz, co przepuścić. Tracisz za to automatyczne wykrywanie: trzeba albo przekazywać mDNS między sieciami, albo dodawać urządzenia po adresie IP.
Układ B: Home Assistant z interfejsem w obu sieciach. Home Assistant widzi sieć IoT bezpośrednio, więc wykrywanie przez mDNS działa w niej bez żadnego przekazywania. W Home Assistant OS dodatkowy interfejs tworzysz poleceniem ha network vlan. Dokumentacja dla programistów Home Assistanta wymienia sieci VLAN wśród ustawień dostępnych tylko z wiersza poleceń ha network. Najpierw sprawdź nazwę interfejsu poleceniem ha network info, a potem na przykład:
ha network vlan eth0 20 --ipv4-method static --ipv4-address 192.168.20.2/24 --ipv6-method disabled
Jeśli Home Assistant działa w maszynie wirtualnej, dodaj zamiast tego drugą wirtualną kartę sieciową w programie do wirtualizacji. Wieloletni poradnik o sieciach VLAN na forum Home Assistanta radzi, żeby bramę ustawić tylko na jednym interfejsie, głównym, bo inaczej łatwo o kłopoty z trasowaniem.
Potem zajrzyj do ustawień sieci w Home Assistancie: Ustawienia > System > Sieć (Settings > System > Network). Domyślnie integracja sieci sama wybiera jeden interfejs, ten, przez który system wysyła pakiety na adres mDNS 224.0.0.251, czyli zwykle interfejs domyślny. Zeroconf rozgłasza tylko na interfejsach wybranych w tym miejscu, więc wyłącz automatyczne wykrywanie i zaznacz obie karty sieciowe.
Układ B ma jednak poważną wadę. Ruch między urządzeniami IoT a Home Assistantem nie przechodzi już przez router, więc zapora nie może go filtrować. Każde urządzenie w sieci IoT ma dostęp do wszystkich portów, na których nasłuchuje Home Assistant, łącznie z interfejsem WWW. Jeśli najważniejsza jest izolacja, lepiej sprawdzi się układ A. Układ B sprawdza się głównie tam, gdzie wiele zależy od automatycznego wykrywania.
Sieć Wi-Fi dla urządzeń
Utwórz osobną sieć Wi-Fi (z własnym SSID) przypisaną do sieci VLAN dla IoT. Warto od razu zadbać o kilka szczegółów:
- 2,4 GHz. ESP8266 i podstawowy ESP32 działają tylko w paśmie 2,4 GHz. W ESPHome opcja
band_modedo pracy w paśmie 5 GHz jest dostępna tylko dla ESP32-C5. - WPA2 albo tryb mieszany WPA2/WPA3. Ustawienie
min_auth_modew ESPHome ma domyślnie wartość WPA2, a tryb wyłącznie WPA3 działa tylko na ESP32. W sieci z samym WPA3 żaden ESP8266 się nie połączy. - Izolacja klientów. Wiele punktów dostępowych potrafi zablokować komunikację między klientami bezprzewodowymi. W sieci IoT to dobry pomysł, ale po włączeniu tej opcji sprawdź, czy Home Assistant nadal łączy się z każdym urządzeniem, zwłaszcza jeśli sam jest podłączony do tej samej sieci Wi-Fi.
Reguły zapory w układzie A
Kolejność i składnia zależą od routera, ale logika jest wszędzie taka sama. Zapora sprawdza reguły od góry, więc reguły zezwalające umieść przed ogólną blokadą.
| Reguła | Skąd | Dokąd | Co |
|---|---|---|---|
| 1 | dowolnie | dowolnie | przepuszczaj ruch nawiązanych połączeń (odpowiedzi) |
| 2 | Home Assistant | sieć IoT | przepuszczaj (sterowanie, API ESPHome, aktualizacje OTA) |
| 3 | sieć IoT | Home Assistant | przepuszczaj tylko usługi, z którymi urządzenia łączą się same, np. MQTT |
| 4 | sieć IoT | router | przepuszczaj DHCP i DNS |
| 5 | sieć IoT | sieć główna | blokuj |
| 6 | sieć IoT | internet | przepuszczaj albo blokuj osobno dla każdego urządzenia |
Porty, które warto znać:
- Natywne API ESPHome: TCP 6053 na urządzeniu. Połączenie nawiązuje Home Assistant, więc wystarczy reguła 2, a urządzenie nie potrzebuje żadnej reguły w stronę Home Assistanta.
- Aktualizacje OTA w ESPHome: TCP 3232 na ESP32 i 8266 na ESP8266 (domyślne wartości z dokumentacji ESPHome). Jeśli Device Builder działa jako dodatek do Home Assistanta, też wystarczy reguła 2. Jeśli kompilujesz na laptopie w sieci głównej, pozwól temu laptopowi łączyć się z siecią IoT na tych portach.
- MQTT: TCP 1883 albo 8883 z TLS. To domyślne porty dodatku Mosquitto. Tu połączenie nawiązuje urządzenie, więc potrzebna jest reguła 3.
Na regule 6 możesz najwięcej zyskać, ale też najłatwiej stracić kontrolę nad urządzeniami. Węzeł ESPHome nie potrzebuje internetu, jeśli pobiera czas z Home Assistanta: platforma czasu homeassistant synchronizuje zegar przez natywne API, a dokumentacja ESPHome nazywa ją zalecanym źródłem czasu. Urządzenie zależne od chmury producenta przestanie działać w chwili, gdy odetniesz mu internet. Blokuj więc dostęp osobno dla każdego urządzenia, a nie od razu dla całej sieci VLAN, i każde po kolei testuj.
Jak przywrócić wykrywanie
Masz dwa sposoby i możesz je łączyć.
Przekazywanie mDNS między sieciami. W sekcji z częstymi pytaniami ESPHome opisuje to dla routerów z programem Avahi, na przykład z OpenWrt albo pfSense: włącz Avahi w obu podsieciach i przepuść ruch UDP z podsieci urządzeń na adres 224.0.0.251, port 5353. W pliku konfiguracyjnym Avahi służy do tego opcja enable-reflector=yes w sekcji [reflector]. Dokumentacja Avahi ostrzega, żeby między tymi samymi sieciami nie uruchamiać więcej niż jednego takiego przekaźnika, bo zaczną odbijać pakiety mDNS między sobą. Wiele routerów ma tę funkcję jako jeden przełącznik o nazwie mDNS albo multicast DNS.
Rezygnacja z wykrywania i stałe adresy. Każdemu urządzeniu przydziel rezerwację DHCP albo stały adres IP. W ESPHome służy do tego manual_ip: w sekcji wifi:, a use_address: nadpisuje adres, pod którym program łączy się z urządzeniem. Potem dodaj integrację ESPHome w menu Ustawienia > Urządzenia oraz usługi (Settings > Devices & services), wpisując adres IP, zamiast czekać na wykrycie. Według dokumentacji ESPHome Device Builder w takiej sytuacji okresowo pinguje urządzenia, więc pokazuje je jako działające, dopóki ich adres da się ustalić w inny sposób, na przykład gdy wpiszesz go wprost jako IP. W opcjach integracji Google Cast jest lista znanych adresów („Known hosts”), którą dokumentacja zaleca razem ze stałymi adresami IP, gdy wykrywanie nie działa.
Stałe adresy wymagają więcej pracy na początku, ale działają dalej, nawet gdy przekazywanie mDNS zacznie szwankować po aktualizacji routera.
Czego nie przenosić do sieci VLAN
Matter jest wyjątkiem od prawie wszystkiego, co opisałem wyżej. Dokumentacja Home Assistanta podaje jasny sposób na niestabilne działanie Matter: urządzenia Matter łączące się przez Wi-Fi i routery brzegowe Thread mają być w tej samej sieci VLAN co Home Assistant, a ruch grupowy IPv6 musi docierać do komputera z Home Assistantem. W Home Assistancie trzeba też włączyć IPv6 (w menu Ustawienia > System > Sieć wybierz dla IPv6 tryb automatyczny albo statyczny), choć nie potrzebujesz ani połączenia z internetem przez IPv6, ani serwera DHCPv6. Jeśli chcesz w ogóle usunąć niezaufane urządzenia z Wi-Fi, przyjrzyj się urządzeniom Matter działającym przez Thread: dołączają do sieci kratowej Thread, a nie do Wi-Fi, i łączą się z resztą sieci przez routery brzegowe.
Gdy coś nie działa
- Urządzenie ESPHome uruchamia się ponownie co 15 minut. Komponent API restartuje urządzenie, gdy przez czas
reboot_timeoutnie połączy się z nim żaden klient, a domyślnie jest to 15 minut. Zwykle zapora nie przepuszcza Home Assistanta do urządzenia na porcie 6053. - Device Builder pokazuje urządzenia jako wyłączone, choć działają. mDNS nie przechodzi przez granicę sieci VLAN. Użyj stałych adresów IP albo przekazywania mDNS.
- Nic nowego się nie wykrywa. W układzie A bez przekazywania mDNS to normalne. Dodawaj integracje po adresie IP.
- Dodawanie urządzeń Matter się nie udaje albo urządzenia znikają. Sprawdź, czy urządzenia Matter i routery brzegowe są w sieci Home Assistanta, czy IPv6 jest włączone i czy sieć nie filtruje ruchu grupowego.
- Urządzenie działa w aplikacji producenta, ale nie w Home Assistancie, albo odwrotnie. Prawdopodobnie zablokowałeś mu internet albo telefon nie ma dostępu do sieci IoT. Zdecyduj, którą drogą chcesz sterować, i popraw reguły 2 i 6.