23 posts 89 tags 7 domains

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ćVLANAdresacjaCo siedzi
lan (stara, "brudna")1192.168.1.0/24IoT, TV, goście
trusted (nowa)30192.168.30.0/24laptop, 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

  1. Zaznacz Enable VLAN filtering
  2. Kliknij Add i dodaj dwa wiersze: VLAN ID 1 oraz VLAN ID 30
  3. W kolumnach portów ustaw z rozwijanych list:
PortVLAN 1VLAN 30Rola
lan1u*TV / stara sieć
lan2u*stara sieć
lan3u*stara sieć
lan4u*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.

  1. 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 wan oraz lan
  • 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, zaznacz trusted
  • 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.