Bezpieczny VLAN na OpenWrt do wyklikania w LuCI — bez SSH, bez edycji plików
Zaufany VLAN dla ważnych urządzeń wyklikany krok po kroku w panelu LuCI — IoT zostaje na starym SSID.
Problem
W sieci siedzi 20+ urządzeń IoT i nie ma sensu ich przepinać. Zamiast tego tworzymy nowy, zaufany VLAN (trusted) dla kilku ważnych urządzeń — laptopa, telefonów, Home Assistanta — a IoT zostaje na starym SSID i domyślnym LAN-ie. Tym razem całość wyklikana w panelu LuCI, bez SSH i ręcznej edycji /etc/config/*.
Docelowy układ:
| Sieć | VLAN | Adresacja | Co siedzi |
|---|---|---|---|
lan (stara, "brudna") | 1 | 192.168.1.0/24 | IoT, TV, goście |
trusted (nowa) | 30 | 192.168.30.0/24 | laptop, telefony, HA |
Zasady: trusted → lan dozwolony, lan → trusted zablokowany, panel routera dostępny tylko z trusted.
Instrukcja dla OpenWrt 21.02+ (DSA). Na starszych wersjach ze swconfig VLAN-y klika się w Network → Switch i wygląda to inaczej.
Krok 1 — VLAN-y na bridge'u
Network → Interfaces → zakładka Devices → br-lan → Configure → zakładka Bridge VLAN filtering
- Zaznacz Enable VLAN filtering
- Kliknij Add i dodaj dwa wiersze: VLAN ID
1oraz VLAN ID30 - W kolumnach portów ustaw z rozwijanych list:
| Port | VLAN 1 | VLAN 30 | Rola |
|---|---|---|---|
| lan1 | u* | – | TV / stara sieć |
| lan2 | u* | – | stara sieć |
| lan3 | u* | – | stara sieć |
| lan4 | – | u* | HA / zaufany PC |
Oznaczenia: u* = untagged + PVID (zwykłe urządzenie), t = tagged (trunk do drugiego AP lub switcha zarządzalnego), – = port nie należy do VLAN-u.
- Save, na razie bez Apply
Krok 2 — Interfejs trusted
Network → Interfaces
Najpierw sprawdź stary lan: Edit → Device — po włączeniu VLAN filtering powinien wskazywać br-lan.1 (LuCI zwykle przestawia to samo; jak nie, wybierz z listy).
Potem Add new interface…:
- Name:
trusted - Protocol: Static address
- Device:
br-lan.30(jest na liście po zapisaniu kroku 1) - Create interface, a w oknie edycji:
- IPv4 address: 192.168.30.1 - IPv4 netmask: 255.255.255.0
- Zakładka DHCP Server → Set up DHCP Server — domyślne wartości (start 100, limit 150, lease 12h) są w porządku
- Zakładka Firewall Settings — w polu wpisz nową nazwę strefy:
trusted(utworzy się sama) - Save
Krok 3 — Strefa trusted w firewallu
Network → Firewall → zakładka General Settings
Na liście stref pojawiła się trusted. Kliknij Edit i ustaw:
- Input: accept
- Output: accept
- Forward: reject
- Allow forward to destination zones: zaznacz
wanorazlan - Save
Firewall jest stanowy — reguła w stronę lan wystarczy, odpowiedzi żarówek wrócą same. Odwrotnego forwardingu (lan → trusted) nie ma, więc IoT nie zainicjuje połączenia do zaufanej sieci.
Krok 4 — Nowy SSID
Network → Wireless → Add (przy wybranym radiu; dla trusted najlepiej 5 GHz, IoT i tak siedzi na 2.4)
- ESSID:
DomSecure - Mode: Access Point
- Zakładka Wireless Security:
- Encryption: WPA2-PSK/WPA3-SAE Mixed Mode - Key: silne hasło
- Wróć do General Setup → Network: odznacz
lan, zaznacztrusted - Save & Apply
Teraz przepnij laptopa, telefony i HA (jeśli na Wi-Fi) na DomSecure. HA na kablu wpinasz w port lan4. Sprawdź, czy dostajesz adres 192.168.30.x i czy panel routera działa pod 192.168.30.1.
Krok 5 — Blokada starej strefy (na końcu!)
Stara sieć przestaje być zaufana, więc router ma nie przyjmować z niej niczego poza DHCP i DNS.
Network → Firewall → Edit przy strefie lan:
- Input: reject
- Output: accept
- Forward: reject
- Allow forward to destination zones: tylko
wan - Save
Teraz wyjątki na DHCP i DNS — bez nich IoT nie dostanie adresu ani nie rozwiąże domen. Network → Firewall → zakładka Traffic Rules → Add:
Reguła 1:
- Name:
Allow-lan-DHCP - Protocol: UDP
- Source zone:
lan - Destination zone: Device (input)
- Destination port:
67-68 - Action: accept
Reguła 2:
- Name:
Allow-lan-DNS - Protocol: TCP, UDP
- Source zone:
lan - Destination zone: Device (input)
- Destination port:
53 - Action: accept
Save & Apply — i od tej chwili LuCI oraz SSH są dostępne wyłącznie z trusted.
Krok 6 — Weryfikacja
Z urządzenia w trusted:
http://192.168.30.1— panel działa- ping do żarówki w starej sieci (np.
192.168.1.50) — odpowiada
Z urządzenia w starej sieci (np. telefon chwilowo na starym SSID):
http://192.168.1.1— panel nie otwiera się (connection refused)- ping do czegokolwiek w 192.168.30.x — brak odpowiedzi
- internet i sterowanie żarówkami z aplikacji — działa normalnie
Urządzenia na kablu i głupie switche
O przynależności do sieci decyduje port, nie urządzenie — TV i HA niczego nie konfigurujesz. Haczyk pojawia się przy switchach:
- Switch zarządzalny (np. TL-SG108E) — port od routera ustawiasz jako trunk (tagged 1+30 po obu stronach), a porty urządzeń jako untagged w odpowiednim VLAN-ie
- Switch niezarządzalny (np. TL-SG1008D) — nie rozumie tagów, wszystko za nim ląduje w jednej sieci. TV i IoT to nie przeszkadza (i tak mają być w starej), ale HA wtedy potrzebuje osobnego kabla prosto do portu lan4 routera albo wymiany switcha na zarządzalny
Home Assistant i mDNS
HA w trusted steruje urządzeniami przez regułę trusted → lan, ale discovery (mDNS/SSDP) nie przechodzi między VLAN-ami — część integracji nie wykryje urządzeń sama. Najprościej: dodaj je ręcznie po IP i przypnij im statyczne leasy (Network → DHCP and DNS → Static Leases). Urządzenia chmurowe (część Tuya, Roomba przez aplikację) lokalnie HA nie potrzebują — wystarczy im internet, który stara sieć dalej ma.
Co się dzieje pod spodem
Każdy klik w LuCI ląduje ostatecznie w tych samych plikach /etc/config/network, firewall, dhcp i wireless — panel to tylko edytor UCI z siatką bezpieczeństwa w postaci rollbacku. Bezpieczna nie jest żadna konkretna sieć, tylko granica między nimi: stanowy firewall przepuszcza wyłącznie połączenia inicjowane z trusted, a stara sieć degraduje się do roli domowej "sieci publicznej". I dobrze — każde nowe urządzenie IoT domyślnie trafi właśnie tam, bo to stary SSID znają wszystkie aplikacje. Układ odporny na lenistwo.