Temat: OpenWrt + iot w VLAN + matter

Czy ktoś ma doświadczenie z obsługą urządzeń matter przez router z OpenWrt i VLANami? Opiszę swój przypadek.
Mam OpenWrt 24.10-SNAPSHOT, r28627-0b392b925f z kilkoma VLANami, najistotniejszy dla sprawy jest lan (vlan.100, 192.168.1.0/24) oraz iot (vlan.5, 172.16.5.0/24). W VLAN100 mam serwer Ubuntu 24.04.3 z dockerem, Home Assistant oraz matter-server. Kupiłem gniazdko Tapo P110M w standardzie matter. Kiedy SSID Iot jest przypisana do iot (vlan.5) nie mogę w HA sparować tego gniazdka (wykrzacza się na etapie pobierania certyfikatu matter), natomiast jak SSID Iot przełączę na lan (vlan.100) bez problemu mogę dodać je do HA. Wiem zatem że po stronie serwera, serwera matter i HA jest w porządku. Ogranicznie stawia konfiguracja sieci na OpenWrt.

Znalazłem post traktujący o tym: https://community.home-assistant.io/t/c … lan/966441. Zacząłem go czytać i analizować. Wprowadziłem zmiany w network i dhcp oraz w firewallu ale to nie zadziałało - wywala na tym samym etapie. Obawiam się że to w głównej mierze firewall zawiódł ponieważ zmiany wprowadziłem do iot - nie ruszałem wpisów dotyczących lan w obawie że rozwalę działającą konfigurację. Chciałbym zrobić to zgodnie ze sztuką i wszelkie urządzenie IoT podłączyć do odseparowanej od internetu podsieci. Obawiam się że zrozumienie konfiguracji przerasta mnie dlatego postanowiłem tutaj napisać. Może ktoś przechodził ten proces i podpowie po kolei jak należy to poprawnie zrobić i ugryźć ipv6.
W przypadku zainteresowania wrzucę konfigurację network, dhcp, firewall.

2

Odp: OpenWrt + iot w VLAN + matter

Wrzuć te konfigi.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: OpenWrt + iot w VLAN + matter

Proszę oto one. Oczywiście wyciąłem nieistotne wpisy.

network

config interface 'loopback'
    option device 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config globals 'globals'
    option ula_prefix 'fdf6:cc05:9361::/48'
    option packet_steering '1'

config device
    option name 'br-lan'
    option type 'bridge'
    list ports 'lan2'
    list ports 'lan3'
    list ports 'lan4'
    option bridge_empty '1'

config interface 'lan'
    option device 'br-lan.100'
    option proto 'static'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option ip6assign '60'
    option ip6hint '2'    # added

config device
    option name 'wan'
    option macaddr 'aa:bb:cc:dd:ee:ff'

config interface 'wan'
    option device 'wan'
    option proto 'dhcp'

config interface 'wan6'
    option device 'wan'
    option proto 'dhcpv6'

config bridge-vlan
    option device 'br-lan'
    option vlan '5'
    list ports 'lan3:t'

config bridge-vlan
    option device 'br-lan'
    option vlan '6'
    list ports 'lan3:t'
    list ports 'lan4:u*'

config bridge-vlan
    option device 'br-lan'
    option vlan '7'
    list ports 'lan3:t'

config bridge-vlan
    option device 'br-lan'
    option vlan '100'
    list ports 'lan2:u*'
    list ports 'lan3:t'

config interface 'iot'
    option proto 'static'
    option device 'br-lan.5'
    option ipaddr '172.16.5.1'
    option netmask '255.255.255.0'
    option ip6assign '64'    # added
    option ip6hint '3'    # added
    option ip6class 'local'    # added

dhcp

config dnsmasq
    option domainneeded '1'
    option localise_queries '1'
    option rebind_protection '1'
    option rebind_localhost '1'
    option local '/lan/'
    option domain 'lan'
    option expandhosts '1'
    option cachesize '1000'
    option authoritative '1'
    option readethers '1'
    option leasefile '/tmp/dhcp.leases'
    option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
    option localservice '1'
    option ednspacket_max '1232'
    option confdir '/tmp/dnsmasq.d'

config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    list ra_flags 'managed-config'
    list ra_flags 'other-config'
#    list ra_flags 'managed-config'    # zakomentowane
#    list ra_flags 'other-config'    # zakomentowane
    option ra_slaac '0'        # zmienione z 1 na 0
    option ra_default '2'
    list dhcp_option '42,192.168.1.1'
    list dhcp_option '56,fda7:0:0:2::1'

config dhcp 'iot'
    option interface 'iot'
    option start '100'
    option limit '150'
    option leasetime '12h'
# ponizsze linie zostaly dodane
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    option ra_slaac '1'
    list ra_flags 'other-config'
    option ra_default '2'
    list dhcp_option '42,172.16.5.1'
    list dhcp_option '56,fda7:0:0:3::1'

config odhcpd 'odhcpd'
    option maindhcp '0'
    option leasefile '/tmp/hosts/odhcpd'
    option leasetrigger '/usr/sbin/odhcpd-update'
    option loglevel '4'

# ponizszy wpis zostal dodany
config host
    option name 'ubuntugw'
    option dns '1'
    option mac 'aa:bb:cc:dd:ee:ff'
    option ip '192.168.1.182'
    option duid 'ffb6220feb00020000ab11a5f411ae7dc0a29a'
    option hostid '182'

firewall

config defaults
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option synflood_protect '1'

config zone
    option name 'lan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'ACCEPT'
    list network 'lan'

config zone
    option name 'wan'
    list network 'wan'
    list network 'wan6'
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option masq '1'
    option mtu_fix '1'

config forwarding
    option src 'lan'
    option dest 'wan'

config rule
    option name 'Allow-DHCP-Renew'
    option src 'wan'
    option proto 'udp'
    option dest_port '68'
    option target 'ACCEPT'
    option family 'ipv4'

config rule
    option name 'Allow-Ping'
    option src 'wan'
    option proto 'icmp'
    option icmp_type 'echo-request'
    option family 'ipv4'
    option target 'ACCEPT'

config rule
    option name 'Allow-IGMP'
    option src 'wan'
    option proto 'igmp'
    option family 'ipv4'
    option target 'ACCEPT'

config rule
    option name 'Allow-DHCPv6'
    option src 'wan'
    option proto 'udp'
    option dest_port '546'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-MLD'
    option src 'wan'
    option proto 'icmp'
    option src_ip 'fe80::/10'
    list icmp_type '130/0'
    list icmp_type '131/0'
    list icmp_type '132/0'
    list icmp_type '143/0'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-ICMPv6-Input'
    option src 'wan'
    option proto 'icmp'
    list icmp_type 'echo-request'
    list icmp_type 'echo-reply'
    list icmp_type 'destination-unreachable'
    list icmp_type 'packet-too-big'
    list icmp_type 'time-exceeded'
    list icmp_type 'bad-header'
    list icmp_type 'unknown-header-type'
    list icmp_type 'router-solicitation'
    list icmp_type 'neighbour-solicitation'
    list icmp_type 'router-advertisement'
    list icmp_type 'neighbour-advertisement'
    option limit '1000/sec'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-ICMPv6-Forward'
    option src 'wan'
    option dest '*'
    option proto 'icmp'
    list icmp_type 'echo-request'
    list icmp_type 'echo-reply'
    list icmp_type 'destination-unreachable'
    list icmp_type 'packet-too-big'
    list icmp_type 'time-exceeded'
    list icmp_type 'bad-header'
    list icmp_type 'unknown-header-type'
    option limit '1000/sec'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-IPSec-ESP'
    option src 'wan'
    option dest 'lan'
    option proto 'esp'
    option target 'ACCEPT'

config rule
    option name 'Allow-ISAKMP'
    option src 'wan'
    option dest 'lan'
    option dest_port '500'
    option proto 'udp'
    option target 'ACCEPT'

config zone
    option name 'IoTZone'
    list network 'iot'
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT'

# Beginning of added lines

# Multicast communicaion
config rule
    option name 'Allow-MLD'
    option src 'IoTZone'
    option proto 'icmp'
    option src_ip 'fe80::/10'
    list icmp_type '130/0'
    list icmp_type '131/0'
    list icmp_type '132/0'
    list icmp_type '143/0'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-ICMPv6-Input'
      option src 'IoTZone'
      option proto 'icmp'
      list icmp_type 'echo-request'
      list icmp_type 'echo-reply'
      list icmp_type 'destination-unreachable'
      list icmp_type 'packet-too-big'
      list icmp_type 'time-exceeded'
     list icmp_type 'bad-header'
      list icmp_type 'unknown-header-type'
      list icmp_type 'router-solicitation'
      list icmp_type 'neighbour-solicitation'
      list icmp_type 'router-advertisement'
      list icmp_type 'neighbour-advertisement'
      option limit '1000/sec'
      option family 'ipv6'
      option target 'ACCEPT'

config rule
      option name 'Allow-ICMPv6-Forward'
      option src 'iot'
      option dest '*'
      option proto 'icmp'
      list icmp_type 'echo-request'
      list icmp_type 'echo-reply'
      list icmp_type 'destination-unreachable'
      list icmp_type 'packet-too-big'
      list icmp_type 'time-exceeded'
      list icmp_type 'bad-header'
      list icmp_type 'unknown-header-type'
      option limit '1000/sec'
      option family 'ipv6'
      option target 'ACCEPT'

config rule
      option name 'iot-DHCP'
      list proto 'udp'
      option src 'IoTZone'
      option src_port '68'
      option dest_port '67'
      option target 'ACCEPT'

config rule
      option name 'iot-DHCPv6'
      option proto 'udp'
      option src 'IoTZone'
      option dest_port '547'
      option src_port '546'
      option target 'ACCEPT'

config rule
      option name 'iot-DNS'
      option src 'IoTZone'
      option dest_port '53'
      option target 'ACCEPT'

config rule
      option name 'iot-NTP'
      list proto 'udp'
      option src 'IoTZone'
      option dest_port '123'
      option target 'ACCEPT'

config redirect
      option target 'DNAT'
      list proto 'udp'
      option src 'IoTZone'
      option src_dport '123'
      option name 'Use-Router-NTP-iot'

config rule
      option name 'lan-MDNS-v6'
      option src 'lan'
      option dest_port '5353'
      option target 'ACCEPT'
      option proto 'udp'
      option dest_ip 'ff02::fb'
      option family 'ipv6'

config rule
      option name 'lan-iot-matter-v6'
      option src 'lan'
      option dest 'IoTZone'
      option target 'ACCEPT'
      option family 'ipv6'
      option dest_port '5540'
      list src_ip '::2:0:0:0:3/-60'
      option proto 'tcp udp'

config rule
      option name 'iot-MDNS-v6'
      option src 'IoTZone'
      option dest_port '5353'
      option target 'ACCEPT'
      option proto 'udp'
      option dest_ip 'ff02::fb'
      option family 'ipv6'

# End of added lines

config forwarding
    option src 'lan'
    option dest 'IoTZone'

4

Odp: OpenWrt + iot w VLAN + matter

Teoretycznie rzeczy związane z ipv6 masz. Zezwol na firewallu na próbę na cały ruch pomiędzy łan i iot - i w jedną i w drugą stronę.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: OpenWrt + iot w VLAN + matter

Czy dobrze rozumiem, że Matter bez skonfigurowanej IPv6 w sieci lokalnej nie będzie funkcjonowało?

6

Odp: OpenWrt + iot w VLAN + matter

Tak, Matter działa tylko po IPv6.

7

Odp: OpenWrt + iot w VLAN + matter

No tak nie do końca ,u mnie w sieci lokalnej mam wyłączony IPv6 a matter działa.
Wystarczy w home assistant włączyć IPv6 bez tego nie ruszy.

https://i.ibb.co/1YfFFfwc/screenshot-1777522847533.png

https://i.ibb.co/0pJGFzMj/screenshot-1777522815738.png

8

Odp: OpenWrt + iot w VLAN + matter

Czyli działa na ipv6, tyle że twój router bezpośrednio się z ipv6 nie bawi.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9 (edytowany przez _michal 2026-04-30 13:50:28)

Odp: OpenWrt + iot w VLAN + matter

Cezary napisał/a:

Teoretycznie rzeczy związane z ipv6 masz. Zezwol na firewallu na próbę na cały ruch pomiędzy łan i iot - i w jedną i w drugą stronę.

Zrobiłem tak i tak samo proces się przerwał na "nie udało się wygenerować danych logowania na urządzenie". Wg powyższego robi to serwer Matter na Ubuntu który ma dostęp do internetu.

W celu eliminowania potencjalnych przyczyn na dodatkowym Rpi zainstalowałem Home Assitanta bez Dockera. Sytuacja jest dokładnie ta sama tj w lan mogę  sparować gniazdko, w iot nie mogę.
Różnica w parowaniu lan vs iot również jest taka że w lan DHCP przydziela adres IP, w iot nie (cat /tmp/dhcp.leases).

config forwarding
        option src 'lan'
        option dest 'IoTZone'

config forwarding
        option src 'IoTZone'
        option dest 'lan'

janusz07 napisał/a:

No tak nie do końca ,u mnie w sieci lokalnej mam wyłączony IPv6 a matter działa.
Wystarczy w home assistant włączyć IPv6 bez tego nie ruszy.

Tak jak wspomniałem jeśli chcę podłączyć gniazdko do sieci lan (czyli tej samej sieci gdzie jest serwer Matter) to nie ma z tym problemu. Problem zaczyna się jak gniazdko ma być w odrębnym VLAN iot. W tzw. "międzyczasie" nie zmieniam nic w HA.

10

Odp: OpenWrt + iot w VLAN + matter

config zone
    option name 'IoTZone'
    list network 'iot'
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT
Moim zdaniem tu jest błąd  , spróbuj zmienić na accept i zobacz

11

Odp: OpenWrt + iot w VLAN + matter

ad2014 napisał/a:

config zone
    option name 'IoTZone'
    list network 'iot'
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT
Moim zdaniem tu jest błąd  , spróbuj zmienić na accept i zobacz

Zmieniłem w celach testowych ale rezultat jest ten sam - czyli wyrzuca się na generowaniu danych uwierzytelniających Matter.

12

Odp: OpenWrt + iot w VLAN + matter

a jaki jest skutek jak wyłączysz całkowicie firewall ?

13

Odp: OpenWrt + iot w VLAN + matter

ad2014 napisał/a:

a jaki jest skutek jak wyłączysz całkowicie firewall ?

Co masz na myśli przez to? Ponieważ mam dwa VLANy ktoś musi realizować przekazywanie danych ipv6 pomiędzy nimi.

14

Odp: OpenWrt + iot w VLAN + matter

Ostateczna konfiguracja wygląda jak poniżej. Autor z powyższego linku napisał, że IoT może być offline. To prawda ale parując Tapo z telefonu (będącego w tym samym czasie w IoT) na czas generowania certyfikatów Matter potrzebuje on dostępu do internetu. Po zakończonym procesie parowania internet trzeba odciąć.
Czy to jest optymalna konfiguracja? Chętnie poznam wasze opinie i podpowiedzi.

network

config globals 'globals'
    option ula_prefix 'fdf6:cc05:9361::/48'
    option packet_steering '1'

config interface 'lan'
    option device 'br-lan.100'
    option proto 'static'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option ip6assign '64'    # oryginalnie jest 60
    option ip6hint '2'

config interface 'iot'
    option proto 'static'
    option device 'br-lan.5'
    option ipaddr '172.16.5.1'
    option netmask '255.255.255.0'
    option ip6assign '64'
    option ip6hint '3'
    option ip6class 'local'
    option igmp_snooping '1'

dhcp

config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    list ra_flags 'managed-config'
    list ra_flags 'other-config'
    option ra_slaac '0'        # zmienione z 1 na 0
    option ra_default '2'
    list dhcp_option '42,192.168.1.1'
    list dhcp_option '56,fdf6:cc05:9361::1'

config dhcp 'iot'
    option interface 'iot'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    option ra_slaac '1'
    list ra_flags 'other-config'
    option ra_default '2'
    list dhcp_option '42,172.16.5.1'
    list dhcp_option '56,fdf6:cc05:9361::5'

config host
    option name 'ubuntugw'
    option dns '1'
    option mac 'aa:bb:cc:dd:ee:ff'
    option ip '192.168.1.182'
    option duid 'ffdfgdfgdfggdgdgdgerterterteter'
    option hostid '182'

firewall

config defaults
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option synflood_protect '1'

config zone
    option name 'lan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'ACCEPT'
    list network 'lan'

config zone
    option name 'IoTZone'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'
    list network 'iot'

config forwarding
    option src 'lan'
    option dest 'IoTZone'

#config forwarding
#    option src 'IoTZone'
#    option dest 'wan'

config rule
    option name 'Allow_IoT_to_HomeAssistant'
    option src 'IoTZone'
    option dest 'lan'
    option dest_ip '192.168.1.182'
    option dest_port '8123'
    option proto 'tcp'
    option target 'ACCEPT'

config rule
    option name 'Allow-mDNS-IoT'
    option src 'IoTZone'
    option dest 'IoTZone'
    option dest_port '5353'
    option proto 'udp'
    option target 'ACCEPT'

config rule
    option name 'IoT_to_IoT'
    option src 'IoTZone'
    option dest 'IoTZone'
    option target 'ACCEPT'

config rule
    option name 'Allow-DNS-DHCP-IoT'
    option src 'IoTZone'
    option dest_port '53 67'
    option proto 'udp'
    option target 'ACCEPT'

15

Odp: OpenWrt + iot w VLAN + matter

ale działa ci to ?
Ja na razie się poddałem i zaufałem sieci IKEA co do matter (do czasu), włączyłem na LAN  IPv6 i w HA i na razie bangla bez VLAN.
A drugie pytanko ? rozumiem że każde urządzenie matter wpięte do sieci 230V staję się routerem ale tak nie jest, mam gniazdka GRILLPLATS ,Czujnik jakości powietrza ALPSTUGA z IKEA i nie umiem żeby urządzenia było routerem granicznym?
Nest hub2 ,google streamer 4K są u mnie routerem brzegowym a gniazdko i alpstuga nie umie.

https://i.ibb.co/B589Rmds/screenshot-1778070359662.png

16

Odp: OpenWrt + iot w VLAN + matter

janusz07 napisał/a:

ale działa ci to ?

Tak - w powyższej konfiguracji działa.