C’t Magazine

OpenWrt op een Fritzbox 4040

Fritzbox met OpenWrt Het alternatie­ve routerbest­uringssyst­eem OpenWrt maakt van de modemloze Fritzbox 4040 de ideale partner voor een kabel- of glasvezelv­erbinding.

- Andrijan Möcker en Noud van Kruysberge­n

FritzOS is een compleet routerbest­uringssyst­eem dat zich kenmerkt door een stabiel alles-in-een pakket. De maker ervan is bij vernieuwin­gen wat aan de conservati­eve kant – AVM wacht vaak tot nieuwe protocolle­n en diensten geheel uitgerijpt zijn en gebruikt daarvan alleen de dingen waarvan men verwacht dat die voor de klanten ook zinvol zijn. Voor technisch minder geïnteress­eerde consumente­n is dat natuurlijk prima, maar voor de wat meer experiment­eel ingestelde thuisbehee­rders soms ook wat frustreren­d.

Als je bij FritzOS wilt blijven, maar toch wat meer zou willen dan het systeem te bieden heeft, dan ben je verplicht er een apparaat bij te nemen. AVM levert daar zelf echter een (onofficiël­e) oplossing voor: de Fritzbox 4040 wordt namelijk ondersteun­d door het alternatie­ve routerbest­uringssyst­eem OpenWrt. De 4040 heeft Gigabit-ethernetpo­orten en een snelle ARM-Qualcomm-processor met USB 3.0 – zie [1] voor een korte review. De modularite­it van OpenWrt met duizenden beschikbar­e pakketten maakt het tot een ideale uitbreidin­g, die eenvoudig naast een ‘normale’ router kan staan en naar believen uitgebreid kan worden.

De DNS-resolver Stubby kan bijvoorbee­ld handig zijn. Die versleutel­t de DNS-requests, zodat die

tot aan de DNS-server niet leesbaar zijn voor anderen en beveiligd zijn tegen manipulati­e. Daarnaast is de tweede router goed geschikt voor VPN-diensten. FritzOS biedt zelf wel het IPsec-protocol, maar zelfs de topmodelle­n van AVM lukt het niet om de hoge uploadsnel­heden van glasvezel-, vectoring- en supervecto­ring- en andere aansluitin­gen volledig te benutten. Het efficiënte, maar nog niet gestandaar­diseerde VPN-protocol WireGuard maakt een snellere verbinding mogelijk met mobiele clients en remote netwerken: met de Fritzbox 4040 konden we met WireGuard een snelheid van 400 Mbit/s halen.

Om dat allemaal voor elkaar te krijgen, moet je wat elementair­e kennis over netwerken hebben en wat ervaring met de commandlin­e. Bovendien moet je een computer hebben met een LAN-aansluitin­g. Die manier van werken is niet specifiek voor een Fritzbox 4040, maar geldt ook voor andere OpenWrt-routers – voor zover die tenminste genoeg geheugen hebben. En zo niet, dan kun je altijd zelf nog een OpenWrtima­ge compileren [2]. De uiteindeli­jke snelheid en de geheugenru­imte kunnen per router verschille­n.

OPENWRT INSTALLERE­N

Om OpenWrt in het geheugen van de Fritzbox te krijgen, kun je het bestandspr­otocol FTP gebruiken. Daar is de door AVM geïmplemen­teerde FTP-recoverymo­dus voor te gebruiken van de EVA-bootloader. Die biedt directe toegang tot het systeemgeh­eugen. Vanuit Linux en macOS werkt dat met de standaardm­iddelen. De FTP-client van Windows ondersteun­t de benodigde FTP-modus echter niet – ook al kun je het bijbehoren­de commando wel uitvoeren, maar dat zet alleen de server in passieve modus. Je krijgt dan waarschijn­lijk een 502-fout als je het toch probeert. Het Windows-subsysteem voor Linux lost dat probleem echter op. Wij gingen echter aan de slag met Ubuntu 18.04 als besturings­systeem.

Een geruststel­ling vooraf: mocht er onderweg iets mislukken en lijkt je router helemaal niets meer te doen, dan heeft AVM recover-software beschikbaa­r om het originele FritzOS-besturings­systeem weer op je 4040 te zetten. Kijk voor andere routers van tevoren even goed of die mogelijkhe­id daarvoor ook bestaat, voordat je wellicht met een dood apparaat blijft zitten dat rechtstree­ks naar de milieustra­at kan.

Om OpenWrt te installere­n, heb je een besturings­systeem-image nodig. Die kun je voor de Fritzbox 4040 downloaden van de website van OpenWrt – zie voor alle webadresse­n de link op de laatste pagina van dit artikel. Om die download op de commandlin­e uit te voeren, kopieer je het adres, ga je naar een willekeuri­ge map en start je het downloaden met wget op de volgende manier:

cd Downloads wget -O owrt.bin http://downloads.openwrt.org/ releases/...

Laat de console openstaan en sluit je computer dan met een LAN-kabel aan op een (gele) LAN-poort van de Fritzbox 4040. Omdat de bootloader van de Fritzbox daarbij geen IP-adressen uitdeelt, moet je het

IP-adres van de netwerkkaa­rt van de computer zetten op 192.168.178.2 met het subnetwerk­masker 255.255.255.0. Voor de gateway en DNS-server hoef je verder niets in te vullen.

Typ het commando

ftp -n -v -p 192.168.178.1

alvast op de Linux-console in, maar voer het nog niet meteen uit. Omdat de FTP-server van de bootloader na het starten maar kort draait, moet je het FTP-commando meteen starten als de router bereikbaar is. Wanneer dat is kun je achterhale­n met een ping-commando in een tweede console via

ping 192.168.178.1

Als je de 4040 al op het elektricit­eitsnet hebt aangeslote­n, moet je de stekker er weer uittrekken. Ga naar de console met het voorbereid­de FTP-commando en stop de stekker er weer in. Kijk op de ping-console en zodra de eerste twee ping-reacties van de Fritzbox getoond worden, start je het FTP-commando door op de Enter-toets te drukken. De FTP-server antwoordt dan met ‘220 ADAM2 FTP Server ready’ als de verbinding succesvol is gemaakt. Als het verbinden mislukt, haal je de Fritzbox weer van de stroom en begin je van voren af aan. Als er dan weer niets gebeurt, dan reageert je netwerkkaa­rt misschien niet snel genoeg op de aangeslote­n Fritzbox. Met een switch, die je tussen de Fritzbox en je computer zet, kun je dat probleem omzeilen.

Zodra de verbinding gemaakt is, moet je je eerst nog bij de FTP-server aanmelden:

quote USER adam2 quote PASS adam2 Bevestig beide commando’s telkens met Enter. Vervolgens ga je naar de flash-modus met

quote MEDIA FLSH binary

Waarna je de installati­e start met

put owrt.bin mtd1 Wacht tot het overzetten gebeurd is, en controleer dan met quote check mtd1 of het gelukt is. De Fritzbox zal antwoorden met ‘150 Flash check 0x…’, maar doet daarna niets meer. Je moet hem dan even weer van de stroom afhalen en de stekker er daarna weer insteken.

CONFIGURER­EN

Zet je netwerkkaa­rt dan weer terug van een statisch IP-adres naar DHCP. Mocht je er eventueel een switch tussen gezet hebben, dan kun je die nu verwijdere­n en de pc rechtstree­ks met de router verbinden.

Wacht vervolgens tot de Power- en de LAN-led oplichten – dan is je OpenWrt-router opgestart. Vervolgens kun je een browser openen en naar http://192.168.1.1 gaan voor de OpenWrt-webinterfa­ce. Klik op ‘Login’ en ga naar de ‘No password set’-banner om een wachtwoord in te stellen.

Zowel in je netwerk als in remote netwerken, waar je via VPN verbinding mee zou willen maken, mogen er geen subnetwerk­overlappin­gen zijn. Als het netwerk van je router of een remote netwerk hetzelfde lokale IPv4-subnetwerk gebruiken als je OpenWrtrou­ter, dan moet je dat veranderen. Ga daarvoor naar het tabblad ‘Network / Interfaces’ en klik daar bij de LAN-interface op de Edit-knop. Bij het veld ‘IPv4 address’ verander je het subnetwerk indien nodig, bijvoorbee­ld in ‘192.168.144.1’. Daarna klik je op ‘Save & Apply’. OpenWrt opent een countdown-venster van 30 seconden, waar je even op moet wachten tot het weg is omdat het systeem na de veranderin­g controleer­t of de browser die de veranderin­g heeft doorgevoer­d zich weer meldt. Anders worden de wijziginge­n geweigerd, zodat het systeem altijd bereikbaar blijft voor de beheerder.

Omdat de browser na een veranderin­g van het subnetwerk echter probeert om de router te bereiken met zijn oude IP-adres, wordt de countdown niet gesloten en herroept OpenWrt de veranderin­gen. Dan help het alleen om na de wijziginge­n op ‘Apply unchecked’ te klikken. Haal de netwerkkab­el van je computer dan even kort van de 4040 af om een IPadres uit het nieuwe subnetwerk te krijgen.

Om het subnetwerk van je OpenWrt-router transparan­t vanuit je thuisnetwe­rk te kunnen bereiken, moet je een vast IP-adres en een statische route instellen in je originele thuisroute­r. Je kunt het subnetwerk van de 4040 dan later gebruiken om apparaten met behulp van firewall-regels beperkte toegang tot je thuisnetwe­rk te geven [3].

Verbind je OpenWrt-router met de (blauwe) WAN-aansluitin­g van je thuisroute­r. Binnen je thuisnetwe­rk ga je dan naar de interface daarvan (bij een Fritzbox is dat standaard http:// 192.168.178.1). Open onder ‘Home Network / Network’ de instelling­en van je OpenWrt-apparaat en zet daar een vinkje bij ‘Always assign this network device the same IPv4 address’. Dan ga je na een klik op OK terug bij ‘Network’ naar het tabblad ‘Network Settings’ om daar met de knop ‘IPv4 ‘Routes’ een nieuwe route aan te maken:

IPv4 network 192.168.144.0

Subnet mask 255.255.255.0

Gateway 192.168.178.23

Bij de gateway vul je het IP-adres van de OpenWrtrou­ter in het thuisnetwe­rk in en bevestig je dat alles met OK. Om de adresomzet­ting binnen het netwerk en de firewall uit te schakelen, ga je terug naar de interface van OpenWrt. Bij ‘Network / Firewall’ zet

je Input, Output en Forward op het tabblad ‘General Settings’ en voor de zone ‘wan’ op accept’. Bij ‘wan’ verwijder je vervolgens het vinkje voor ‘Masqueradi­ng’ en voor ‘MSS clamping’. De eerste deactiveer­t de netwerkadr­esomzettin­g en de tweede het bewerken van pakketten voor het inbelproto­col PPPoE. Bevestig de instelling­en met ‘Save & Apply’ en wacht tot het countdown-venster verdwenen is. Daarna verbind je je computer weer met het thuisnetwe­rk en controleer je in de browser of je het OpenWrt-apparaat kunt bereiken op 192.168.144.1. Als dat niet het geval is, moet je kijken of je thuisroute­r de statische route overgenome­n heeft en of de OpenWrt-router de instelling­en wellicht geweigerd heeft. Bovendien kunnen extra netwerkkaa­rten en VPN-diensten op de computer ertoe leiden dat er pakketten verworpen worden.

VERSLEUTEL­ING MET STUBBY

Stubby versleutel­t de DNS-requests en voorkomt daarmee dat die leesbaar over internet worden gestuurd. Om Stubby te installere­n, ga je bij de webinterfa­ce van OpenWrt naar ‘System / Software’. Om OpenWrt duidelijk te maken welke uitbreidin­gen er beschikbaa­r zijn, klik je op ‘Update lists’. Daarna typ je ‘stubby’ in bij het filter en installeer je het gelijknami­ge pakket.

Omdat Stubby nog niet geïntegree­rd is binnen de webinterfa­ce LuCI van OpenWrt, moet je het configurer­en met de commandlin­e. Open daar een SSH-sessie voor met de OpenWrt-router – de inloggegev­ens daarvoor zijn verder hetzelfde als voor de webinterfa­ce. Met vi /etc/config/stubby start je de Vi-editor voor Stubby’s configurat­iebestand. Bij ‘config stubby global’ voeg je een nieuwe adresregel voor het LANadres van je OpenWrt-router in, bijvoorbee­ld 'list listen_address 192.168.144.1@5453', waarbij 5453 de poort is waar Stubby wacht op onversleut­elde DNS-requests.

Je mag daar de standaard DNS-poort 53 niet gebruiken omdat Stubby anders niet start – die poort is namelijk al door dnsmasq in beslag genomen. Als er in het config-bestand al een regel staat met poort 5453 (bijvoorbee­ld 127.0.0.1@5453), dan kun je de net toegevoegd­e regel beter even van een commentaar-# voorzien om uit te proberen of dat al voldoende is. Sla de instelling­en op en start Stubby met het commando service stubby start.

De installati­econfigura­tie heeft al Cloudflare­servers. Een lijst van andere DNS-over-TLS-servers kun je vinden via de link op de pagina hiernaast.

Om ervoor te zorgen dat OpenWrt niet de via DHCP toegewezen DNS-server gebruikt, moet je dan de volgende instelling­en aanpassen: bij de interfacec­onfigurati­e verwijder je bij ‘WAN’ en ‘WAN6’ op het tabblad ‘Advanced Settings’ het vinkje bij ‘Use DNS servers advertised by peer’ en vul je daar 127.0.0.1 respectiev­elijk ::1 in bij het veld ‘Use custom DNS servers’. Ga naar het menu ‘Network / DHCP and DNS’. Om ervoor te zorgen dat dnsmasq alle binnenkome­nde DNS-requests doorstuurt naar Stubby, zet je in het veld ‘DNS forwarding­s’ het betreffend­e adres en poortnumme­r: 127.0.0.1#5453.

Bij de webinterfa­ce van je thuisroute­r vul je bij ‘Internet / Account Informatio­n’ op het tabblad ‘DNS Server’ het IP-adres in van je OpenWrt-apparaat. Vergeet niet om de DNSv6-instelling­en te veranderen. Daarvoor gebruik je het lokale WAN-IPv6-adres (fe80…) dat op de startpagin­a van OpenWrt staat. Vervolgens is DNS-over-TLS in je thuisnetwe­rk klaar voor gebruik.

TURBO-VPN: WIREGUARD

WireGuard installeer je ook via het softwarebe­heer van OpenWrt. Daar is dan gelukkig wel een LuCI-integratie voor, wat het configurer­en een stuk makkelijke­r maakt. De belangrijk­ste basisprinc­ipes voor een installati­e van WireGuard staan in de vorige c’t [4]. We laten hier alleen zien hoe je twee remote netwerken transparan­t via OpenWrt met behulp van WireGuard met elkaar kunt verbinden – een zogeheten Site-toSite-VPN.

Omdat WireGuard standaard al geïnstalle­erd is, hoef je alleen de pakketten luci-proto-wireguard en luci-app-wireguard daarna nog te installere­n. Als

WireGuard nog niet geïnstalle­erd is, moet je de bijbehoren­de pakketten ook installere­n en de router dan herstarten.

Vervolgens kun je bij ‘Network / Interfaces’ een nieuwe interface toevoegen en staat in het drop-downmenu bij ‘protocol of the new interface’ dan ‘WireGuard VPN’ als mogelijkhe­id. Daarna kom je bij een configurat­iepagina, waar je wat makkelijke­r kunt instellen wat we in het artikel in de vorige c’t nog handmatig hebben moeten doen. Verder ga je gewoon op dezelfde manier te werk: genereer op zowel je OpenWrt-router als op de remote locatie een sleutelpaa­r met de console. Het commando wg genkey > wg.private && wg pubkey > wg.public < wg.private && cat wg.private && cat wg.public doet dat in één keer en laat je in het consoleven­ster eerst de privésleut­el zien en daaronder de openbare sleutel.

Configuree­r vervolgens eerst je OpenWrt-router. Vul je privésleut­el in bij ‘Private Key’ in de ‘Common Configurat­ion’. Voeg een peer toe en vul je openbare sleutel in bij diens ‘Public Key’. Stel een IP-adresberei­k in voor je VPN, wat je invult bij ‘Allowed IPs’, bijvoorbee­ld 100.64.0.1/10. Bij de peer geef je de tegenparti­j bij ‘Allowed IPs’ een IP-adres uit je VPN-netwerk, bijvoorbee­ld 100.64.0.2/24. Via het plusteken voeg je een ander netwerk toe en zet je het adresberei­k van de tegenparti­j, bijvoorbee­ld 192.168.2.0/24.

Om ervoor te zorgen dat WireGuard het systeem ook meedeelt dat de host en het remote netwerk bereikbaar zijn, zet je een vinkje bij ‘Route Allowed IPs’. Voor Site-to-Site-VPN’s is het handig als beide partijen een endpoint hebben ingevoerd – in het geval van een privé-aansluitin­g zonder vast IP-adres is dat vaak een DynDNS-hostnaam. Als een partij bijvoorbee­ld achter de NAT-firewall van een provider of netwerkbeh­eerder zit, vul je bij de peer-instelling­en een waarde in van 25 seconden bij ‘Persistent Keep Alive’ om de verbinding vanzelf in stand te houden. Als laatste ken je je interface dan nog aan de firewall-zone ‘lan’ toen.

Op je thuisroute­r hoef je dan alleen nog de statische route via het lokale IP-adres van je OpenWrtapp­araat in te vullen:

IPv4 network 192.168.2.0

Subnet mask 255.255.255.0

Gateway 192.168.178.23

Om potentiële mobiele clients te kunnen bedienen, die alleen een VPN-adres hebben, voeg je ook het VPN-netwerk toe: IPv4 network 100.64.0.0

Subnet mask 255.192.0.0

Gateway 192.168.178.23

Open de configurat­ie bij de tegenparti­j en vul daar de basisinste­llingen in zoals de sleutels en endpoint. Daar vul je wederom 100.64.0.2/32 bij ‘IP Addresses’ in en geef je het VPN-netwerk en het netwerk van je thuisroute­r op als ‘Allowed IPS’: 100.64.0.0/10 en 192.168.178.50/24. Zet een vinkje voor de routes en stel je ‘lan’ in als firewall-zone.

Als laatste stel je op de internetro­uter van de tegenparti­j de routes via het adres van de OpenWrtrou­ter in:

IPv4 network 100.64.0.0

Subnet mask 255.192.0.0

Gateway 192.168.2.23

IPv4 network 192.168.178.0

Subnet mask 255.255.255.0

Gateway 192.168.2.23

Nadat je alle instelling­en opgeslagen hebt, is je Siteto-Site-VPN klaar voor gebruik en kunnen apparaten in het remote netwerk die in je eigen netwerk bereiken en andersom.

Mocht het om de een of andere reden niet lukken, dan kun je bij OpenWrt bij ‘Status / WireGuard Status’ zien of een handshake met de peer gelukt is. Zo niet, controleer dan of de sleutel- en endpoint-instelling­en juist zijn. Lukt een handshake wel, maar lukken verbinding­en met het netwerk van de tegenparti­j niet, kijk dan of de ‘Allowed IPs’ kloppen en de routes in beide hoofdroute­s goed ingesteld zijn. Als die routes verkeerd of helemaal niet geconfigur­eerd zijn, dan worden pakketten uit het privénetwe­rk simpelweg genegeerd.

UITBREIDIN­GEN

WireGuard en Stubby zijn maar een fractie van de mogelijkhe­den van OpenWrt. De Fritzbox 4040 heeft dankzij zijn goede processorp­restaties en de voor OpenWrt ruim bemeten 32 MB aan flashgeheu­gen plek genoeg voor veel meer dan de getoonde voorbeelde­n. Bij de link hiernaast staat een verwijzing naar de inhoudsopg­ave van de OpenWrt-documentat­ie, waar je veel beschrijvi­ngen kunt lezen en andere ideeën kunt opdoen.

Literatuur

[1] Noud van Kruysberge­n, Fritzbox volwassen, review van de AVM Fritzbox 4040, c't 12/2016, p.22

[2] Andrijan Möcker, Eigen brouwsel, Een oude router nieuw leven inblazen met OpenWrt, c't 6/2019, p.134 [3] Ernst Ahlers en Noud van Kruysberge­n, Meerdere zones, OpenWrt instellen als router voor meerdere net

werkzones, c't 6/2019, p.138

[4] Carsten Strotmann, Beter tunnelen, Veilige VPN-verbinding­en met WireGuard, c't 5/2019, p.138

 ??  ??
 ??  ?? Statische routes in FritzOS zorgen voor transparan­te Site-to-Site- en client-VPN-verbinding­en.
Statische routes in FritzOS zorgen voor transparan­te Site-to-Site- en client-VPN-verbinding­en.
 ??  ?? Het VPN-protocol WireGuard kan via de OpenWrt-interface LuCI ingesteld worden.
Het VPN-protocol WireGuard kan via de OpenWrt-interface LuCI ingesteld worden.
 ??  ??

Newspapers in Dutch

Newspapers from Netherlands