Hoe twee routers te linken met beide een guest net door gebruik te maken van VLAN 802.1q tagging en OpenWrt

English version here: link

Door de corona crisis is er niet veel vakantie te vieren, dus heb ik besloten om mijn Wifi setup te moderniseren met twee nieuwe routers om op beide routers een guestnet te krijgen. Op verzoek heb ik deze post gemaakt.

Ik heb dus twee Netgeat r7800 routers gekocht omdat je er zowel OpenWrt als ook DD-WRT erop kan zetten. Maar besloten om OpenWrt erop te zetten omdat in mijn mening superieur is in flexibiliteit, updates, transparantie, en de interface is ook logischer. Daarom heb ik OpenWrt gedownload van https://openwrt.org/downloads.
De laatste stabiele versie (19.07.3 op dit moment), heeft geen support voor 802.11k and 802.11v (kennelijk je kan het wel aanzetten, maar dan stuurt die geen nutige informatien). In de laatste Snapshot werkt het wel. Dus raad ik de laatste snapshot aan (totdat dit ook in een nieuwe stabiele versie zit).

Voor een nieuwe install moet je eerste een stabiele flashen. Dit maakt het ook makkelijker om passwords en IP addressen te stellen (De snapshot heeft standaard geen Luci geinstalleerd, je kan het wel makkelijk toevoegen, zie de instructies aan het einde van deze pagina).

Na het instellen van de IPs van de routers (ik heb 192.168.15.1 en .2 gekozen) is het tijd om de switch in te stellen: een VLAN toevoegen en and tagging of packets aan te zetten voor de VLANs. Ik heb de routers verbonden via de 4de LAN poort. De setup op beide routers zou er zoiets als dit uit moeten zien:

Volgens mij moet je ze beide rebooten na de verandering. Zorg ervoor dat je nog met beide kan connecten.

Als dat goed werkt dan is de radio setup het volgende om in te stellen, radio0:

Selecteer mode:

Ik heb de channel maar op “auto” gelaten en 80MHz geselecteerd. Later heb ik alsnog 160Mhz gekozen en channel 52 en 100 geselecteerd. Op sommige 5GHz channels moet er wetteljk verplicht gescant worden of er een weer radar actief is. Daarom kan het soms lang duren voordat ze echt actief worden, maar meestal na een minuut of zo zijn ze wel actief. Goed opletten dat de radios correct gebridged zijn:

Op de security pagina moet je “KRACK countermeasures” selecteren:

De guest net wifi zou er bijna identiek uit moeten zien, maar ik gebruik WPA2-CCMP as securityen daarnaast moeten ze gebridged zijn naar de “guest” bridge. Ook heb ik geen KRACK countermeasures geselecteerd omdat security niet zo belangrijk is voor guest net.

Je kan ook de clients isoleren met de checkbox under advanced settings, maar dat lijkt niet echt te werken (misschien moet er een firewall rule bij, geen idee):

Voor radio 1 moet het er hetzelfde uitzien:

Nu de interfaces in stellen:

Lan moet er zo uit zien:

De guest interface:

Als laatste de firewall:

De eerste kolom laat zien uit welke zone de packets geforward mogen worden naar andere zones. De 2de kolom “input” laat zien wat er met packets moet gebeuren die de router als bestemming hebben. De 3de kolom geeft aan of de router packets naar een bepaalde zone mag sturen. De “Forward” kolom laat zien of er packets van de verschillende interfaces binnen een zone geforward mogen worden.

Zoals je kan zien laat ik toe dat devices van de “lan” kontakt mogen zoeken met devices op de “geust” maar niet omgekeerd. De reden daarvoor is dat ik een internet radio op het guestnet heb die ik wil kunnen aansturen. De “forward” op het op het “guest” kan je ook op “reject” zetten, maar in dit geval maakt het niet veel uit omdat er maar 1 interface in de zone is. Als je access naar de router wil blokkeren (wat een goed idee is), dan moet je “input” voor guest op “reject” zetten (zoals in de screenhot). Reject blokt ook DNS and DHCP dus daar moeten we appart een regel voor maken om dat toe te laten:

Router 2 zou er hetzelfde uit moeten zien behalve dat er geen WAN interfaecs zijn en de gateway moet naar router 1 wijzen:

Nu zou alles functioneel moeten zijn aleen nog geen 802.11v, k and w. 802.11w kan je instellen in de Luci interface, maar om onduidelijke reden niet in de snapshot versie.

Hoe dan ook, dit is het moment om de snapshot te installeren. Dan met “putty” naar de router gaan en de volgende commandos uitvoeren:

opkg update
opkg install luci
opkg install luci-ssl
opkg install nano
opkg remove wpad-basic-wolfssl
opkg remove wpad-basic
opkg install wpad-wolfssl
opkg install wireguard
opkg install luci-app-wireguard
opkg install luci-app-statistics
opkg install collectd-mod-thermal
opkg install luci-app-uhttpd
opkg install openssl-util
opkg install openssh-sftp-server
opkg install qrencode
opkg install freeradius3
opkg install acme
opkg install luci-app-acme
opkg install umdns
opkg install dawn
opkg install luci-app-dawn

Nano is een text editor, wpad-openssl voor WPA2 enterprise (802.1X), wireguard voor remote access naar het network (alternatief voor openvpn), statistics voor monitoring. Dawn is voor bandsteering. Werkte niet echt goed, en ook geen goede handleiding om het in te stellen, dus ik heb hem er op dit moment weer af gegooid. umdns is nodig voor dawn.
Nu de setup van de items die niet via Luci kunnen:

nano /etc/config/wireless

om te checken dat de interfaces “wifinet2” and “wifinet3” hetzelfde zijn.

Als de namen overeen komen (zo niet de namen veranderen):

uci set wireless.wifinet2.ieee80211k=’1′
uci set wireless.wifinet2.ieee80211v=’1′
uci set wireless.wifinet2.wnm_sleep_mode=’1′
uci set wireless.wifinet2.wnm_sleep_mode_no_keys=’0′
uci set wireless.wifinet2.bss_transition=’1′
uci set wireless.wifinet2.time_advertisement=’2′
uci set wireless.wifinet2.time_zone=’CET-1CEST,M3.5.0,M10.5.0/3′

uci set wireless.wifinet3.ieee80211k=’1′
uci set wireless.wifinet3.ieee80211v=’1′
uci set wireless.wifinet3.wnm_sleep_mode=’1′
uci set wireless.wifinet3.wnm_sleep_mode_no_keys=’0′
uci set wireless.wifinet3.bss_transition=’1′
uci set wireless.wifinet3.time_advertisement=’2′
uci set wireless.wifinet3.time_zone=’CET-1CEST,M3.5.0,M10.5.0/3′

uci set wireless.default_radio0.ieee80211k=’1′
uci set wireless.default_radio0.ieee80211v=’1′
uci set wireless.default_radio0.wnm_sleep_mode=’1′
uci set wireless.default_radio0.wnm_sleep_mode_no_keys=’0′
uci set wireless.default_radio0.bss_transition=’1′
uci set wireless.default_radio0.time_advertisement=’2′
uci set wireless.default_radio0.time_zone=’CET-1CEST,M3.5.0,M10.5.0/3′
uci set wireless.default_radio0.ieee80211w=’2′
uci set wireless.default_radio0.eap_reauth_period=’0′

uci set wireless.default_radio1.ieee80211k=’1′
uci set wireless.default_radio1.ieee80211v=’1′
uci set wireless.default_radio1.wnm_sleep_mode=’1′
uci set wireless.default_radio1.wnm_sleep_mode_no_keys=’1′
uci set wireless.default_radio1.bss_transition=’1′
uci set wireless.default_radio1.time_advertisement=’2′
uci set wireless.default_radio1.time_zone=’CET-1CEST,M3.5.0,M10.5.0/3′
uci set wireless.default_radio1.ieee80211w=’2′
uci set wireless.default_radio1.eap_reauth_period=’0′
uci commit wireless
wifi up

Niet zeker of wnm_sleep_mode, wnm_sleep_mode_no_keys, time_advertisement, en time_zone nodig zijn. Timezone kan je vinden met:

cat /etc/TZ

Ik heb 802.11w op required gezet voor het hoofd network en uit voor het guestnet. Ik heb ook wnm_sleep_mode_no_keys aanggezet voor het hoofd netwerk en uit voor het guest netwerk (vergelijkbaar met KRACK counter measures).

Zie ook https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf for info.

Als laatste nog even de CPUs getweaked (voor meer stability). Dit toevoegen aan /etc/rc.local:

echo ondemand > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo ondemand > /sys/devices/system/cpu/cpufreq/policy1/scaling_governor
echo 800000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpufreq/policy1/scaling_min_freq
echo 75 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
echo 10 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor

Het zou nu allemaal moeten werken. In geval van vragen laat maar even weten.

P.S. Wireguard setup:

Listen port: 43648
IP addresses: 192.168.25.1/24

Daarnaast een een firewall zone selecteren. Dan per peer een naam invullen, de public key, een IP uit de range boven (b.v. 192.168.25.100/32, en eventueel een pre-shared key. Deze laatste kan je genereren met:

wg keygen

Aan de peer kant: Adressess=192.168.25.100/32, DNS=192.168.15.1, public key van de router, endpoint= public IP router

P.P.S 802.11r setup:
Voor WPA2 en WPA3 personal is het enige wat je moet doen is de optie “802.11r” aanvinken. Voor WPA2 enterprise was het wat lastiger:

uci set wireless.default_radio0.nasid=’MACIDWITHOUTCOLONS’
uci set wireless.default_radio0.ft_over_ds=’1′
uci set wireless.default_radio0.ft_bridge=’br-lan’
uci set wireless.default_radio0.mobility_domain=’ABCD’
uci set wireless.default_radio0.r1_key_holder=’MACIDWITHOUTCOLONS’
uci set wireless.default_radio0.ft_psk_generate_local=’0′
uci set wireless.default_radio0.pmk_r1_push=’1′
uci set wireless.default_radio0.r0kh=’FF:FF:FF:FF:FF:FF,*,32digithexkey’
uci set wireless.default_radio0.r1kh=’00:00:00:00:00:00,00:00:00:00:00:00,32digithexkey’

Voor radio1 dezelfde opties, mobility domain moet hetzelfde zijn, maar de nasid en r1_key_holder moet de MAC van die radio zijn.
P.P.P.S bekijk ook https://openwrt.org/docs/guide-user/luci/getting_rid_of_luci_https_certificate_warnings en
https://jamielinux.com/docs/openssl-certificate-authority/sign-server-and-client-certificates.html