OpenWrt op een Fritzbox 4040
Fritzbox met OpenWrt Het alternatieve routerbesturingssysteem OpenWrt maakt van de modemloze Fritzbox 4040 de ideale partner voor een kabel- of glasvezelverbinding.
FritzOS is een compleet routerbesturingssysteem dat zich kenmerkt door een stabiel alles-in-een pakket. De maker ervan is bij vernieuwingen wat aan de conservatieve kant – AVM wacht vaak tot nieuwe protocollen 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ïnteresseerde consumenten is dat natuurlijk prima, maar voor de wat meer experimenteel ingestelde thuisbeheerders soms ook wat frustrerend.
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ële) oplossing voor: de Fritzbox 4040 wordt namelijk ondersteund door het alternatieve routerbesturingssysteem OpenWrt. De 4040 heeft Gigabit-ethernetpoorten en een snelle ARM-Qualcomm-processor met USB 3.0 – zie [1] voor een korte review. De modulariteit van OpenWrt met duizenden beschikbare pakketten maakt het tot een ideale uitbreiding, die eenvoudig naast een ‘normale’ router kan staan en naar believen uitgebreid kan worden.
De DNS-resolver Stubby kan bijvoorbeeld handig zijn. Die versleutelt de DNS-requests, zodat die
tot aan de DNS-server niet leesbaar zijn voor anderen en beveiligd zijn tegen manipulatie. Daarnaast is de tweede router goed geschikt voor VPN-diensten. FritzOS biedt zelf wel het IPsec-protocol, maar zelfs de topmodellen van AVM lukt het niet om de hoge uploadsnelheden van glasvezel-, vectoring- en supervectoring- en andere aansluitingen volledig te benutten. Het efficiënte, maar nog niet gestandaardiseerde 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 elementaire kennis over netwerken hebben en wat ervaring met de commandline. Bovendien moet je een computer hebben met een LAN-aansluiting. 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 OpenWrtimage compileren [2]. De uiteindelijke snelheid en de geheugenruimte kunnen per router verschillen.
OPENWRT INSTALLEREN
Om OpenWrt in het geheugen van de Fritzbox te krijgen, kun je het bestandsprotocol FTP gebruiken. Daar is de door AVM geïmplementeerde FTP-recoverymodus voor te gebruiken van de EVA-bootloader. Die biedt directe toegang tot het systeemgeheugen. Vanuit Linux en macOS werkt dat met de standaardmiddelen. De FTP-client van Windows ondersteunt de benodigde FTP-modus echter niet – ook al kun je het bijbehorende commando wel uitvoeren, maar dat zet alleen de server in passieve modus. Je krijgt dan waarschijnlijk 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 besturingssysteem.
Een geruststelling vooraf: mocht er onderweg iets mislukken en lijkt je router helemaal niets meer te doen, dan heeft AVM recover-software beschikbaar om het originele FritzOS-besturingssysteem weer op je 4040 te zetten. Kijk voor andere routers van tevoren even goed of die mogelijkheid daarvoor ook bestaat, voordat je wellicht met een dood apparaat blijft zitten dat rechtstreeks naar de milieustraat kan.
Om OpenWrt te installeren, heb je een besturingssysteem-image nodig. Die kun je voor de Fritzbox 4040 downloaden van de website van OpenWrt – zie voor alle webadressen de link op de laatste pagina van dit artikel. Om die download op de commandline uit te voeren, kopieer je het adres, ga je naar een willekeurige 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 netwerkkaart van de computer zetten op 192.168.178.2 met het subnetwerkmasker 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 achterhalen met een ping-commando in een tweede console via
ping 192.168.178.1
Als je de 4040 al op het elektriciteitsnet hebt aangesloten, moet je de stekker er weer uittrekken. Ga naar de console met het voorbereidde 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 netwerkkaart misschien niet snel genoeg op de aangesloten 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 installatie 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.
CONFIGUREREN
Zet je netwerkkaart dan weer terug van een statisch IP-adres naar DHCP. Mocht je er eventueel een switch tussen gezet hebben, dan kun je die nu verwijderen en de pc rechtstreeks 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-webinterface. 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 subnetwerkoverlappingen zijn. Als het netwerk van je router of een remote netwerk hetzelfde lokale IPv4-subnetwerk gebruiken als je OpenWrtrouter, 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, bijvoorbeeld 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 verandering controleert of de browser die de verandering heeft doorgevoerd zich weer meldt. Anders worden de wijzigingen geweigerd, zodat het systeem altijd bereikbaar blijft voor de beheerder.
Omdat de browser na een verandering van het subnetwerk echter probeert om de router te bereiken met zijn oude IP-adres, wordt de countdown niet gesloten en herroept OpenWrt de veranderingen. Dan help het alleen om na de wijzigingen op ‘Apply unchecked’ te klikken. Haal de netwerkkabel 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 transparant vanuit je thuisnetwerk te kunnen bereiken, moet je een vast IP-adres en een statische route instellen in je originele thuisrouter. Je kunt het subnetwerk van de 4040 dan later gebruiken om apparaten met behulp van firewall-regels beperkte toegang tot je thuisnetwerk te geven [3].
Verbind je OpenWrt-router met de (blauwe) WAN-aansluiting van je thuisrouter. Binnen je thuisnetwerk ga je dan naar de interface daarvan (bij een Fritzbox is dat standaard http:// 192.168.178.1). Open onder ‘Home Network / Network’ de instellingen 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 OpenWrtrouter in het thuisnetwerk in en bevestig je dat alles met OK. Om de adresomzetting 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 ‘Masquerading’ en voor ‘MSS clamping’. De eerste deactiveert de netwerkadresomzetting en de tweede het bewerken van pakketten voor het inbelprotocol PPPoE. Bevestig de instellingen met ‘Save & Apply’ en wacht tot het countdown-venster verdwenen is. Daarna verbind je je computer weer met het thuisnetwerk 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 thuisrouter de statische route overgenomen heeft en of de OpenWrt-router de instellingen wellicht geweigerd heeft. Bovendien kunnen extra netwerkkaarten en VPN-diensten op de computer ertoe leiden dat er pakketten verworpen worden.
VERSLEUTELING MET STUBBY
Stubby versleutelt de DNS-requests en voorkomt daarmee dat die leesbaar over internet worden gestuurd. Om Stubby te installeren, ga je bij de webinterface van OpenWrt naar ‘System / Software’. Om OpenWrt duidelijk te maken welke uitbreidingen er beschikbaar zijn, klik je op ‘Update lists’. Daarna typ je ‘stubby’ in bij het filter en installeer je het gelijknamige pakket.
Omdat Stubby nog niet geïntegreerd is binnen de webinterface LuCI van OpenWrt, moet je het configureren met de commandline. Open daar een SSH-sessie voor met de OpenWrt-router – de inloggegevens daarvoor zijn verder hetzelfde als voor de webinterface. Met vi /etc/config/stubby start je de Vi-editor voor Stubby’s configuratiebestand. Bij ‘config stubby global’ voeg je een nieuwe adresregel voor het LANadres van je OpenWrt-router in, bijvoorbeeld 'list listen_address 192.168.144.1@5453', waarbij 5453 de poort is waar Stubby wacht op onversleutelde 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 (bijvoorbeeld 127.0.0.1@5453), dan kun je de net toegevoegde regel beter even van een commentaar-# voorzien om uit te proberen of dat al voldoende is. Sla de instellingen op en start Stubby met het commando service stubby start.
De installatieconfiguratie heeft al Cloudflareservers. 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 instellingen aanpassen: bij de interfaceconfiguratie 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 respectievelijk ::1 in bij het veld ‘Use custom DNS servers’. Ga naar het menu ‘Network / DHCP and DNS’. Om ervoor te zorgen dat dnsmasq alle binnenkomende DNS-requests doorstuurt naar Stubby, zet je in het veld ‘DNS forwardings’ het betreffende adres en poortnummer: 127.0.0.1#5453.
Bij de webinterface van je thuisrouter vul je bij ‘Internet / Account Information’ op het tabblad ‘DNS Server’ het IP-adres in van je OpenWrt-apparaat. Vergeet niet om de DNSv6-instellingen te veranderen. Daarvoor gebruik je het lokale WAN-IPv6-adres (fe80…) dat op de startpagina van OpenWrt staat. Vervolgens is DNS-over-TLS in je thuisnetwerk klaar voor gebruik.
TURBO-VPN: WIREGUARD
WireGuard installeer je ook via het softwarebeheer van OpenWrt. Daar is dan gelukkig wel een LuCI-integratie voor, wat het configureren een stuk makkelijker maakt. De belangrijkste basisprincipes voor een installatie van WireGuard staan in de vorige c’t [4]. We laten hier alleen zien hoe je twee remote netwerken transparant via OpenWrt met behulp van WireGuard met elkaar kunt verbinden – een zogeheten Site-toSite-VPN.
Omdat WireGuard standaard al geïnstalleerd is, hoef je alleen de pakketten luci-proto-wireguard en luci-app-wireguard daarna nog te installeren. Als
WireGuard nog niet geïnstalleerd is, moet je de bijbehorende pakketten ook installeren 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 mogelijkheid. Daarna kom je bij een configuratiepagina, waar je wat makkelijker 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 sleutelpaar 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 consolevenster eerst de privésleutel zien en daaronder de openbare sleutel.
Configureer vervolgens eerst je OpenWrt-router. Vul je privésleutel in bij ‘Private Key’ in de ‘Common Configuration’. Voeg een peer toe en vul je openbare sleutel in bij diens ‘Public Key’. Stel een IP-adresbereik in voor je VPN, wat je invult bij ‘Allowed IPs’, bijvoorbeeld 100.64.0.1/10. Bij de peer geef je de tegenpartij bij ‘Allowed IPs’ een IP-adres uit je VPN-netwerk, bijvoorbeeld 100.64.0.2/24. Via het plusteken voeg je een ander netwerk toe en zet je het adresbereik van de tegenpartij, bijvoorbeeld 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é-aansluiting zonder vast IP-adres is dat vaak een DynDNS-hostnaam. Als een partij bijvoorbeeld achter de NAT-firewall van een provider of netwerkbeheerder zit, vul je bij de peer-instellingen 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 thuisrouter hoef je dan alleen nog de statische route via het lokale IP-adres van je OpenWrtapparaat 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 configuratie bij de tegenpartij en vul daar de basisinstellingen 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 thuisrouter 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 internetrouter van de tegenpartij de routes via het adres van de OpenWrtrouter 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 instellingen 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-instellingen juist zijn. Lukt een handshake wel, maar lukken verbindingen met het netwerk van de tegenpartij niet, kijk dan of de ‘Allowed IPs’ kloppen en de routes in beide hoofdroutes goed ingesteld zijn. Als die routes verkeerd of helemaal niet geconfigureerd zijn, dan worden pakketten uit het privénetwerk simpelweg genegeerd.
UITBREIDINGEN
WireGuard en Stubby zijn maar een fractie van de mogelijkheden van OpenWrt. De Fritzbox 4040 heeft dankzij zijn goede processorprestaties en de voor OpenWrt ruim bemeten 32 MB aan flashgeheugen plek genoeg voor veel meer dan de getoonde voorbeelden. Bij de link hiernaast staat een verwijzing naar de inhoudsopgave van de OpenWrt-documentatie, waar je veel beschrijvingen kunt lezen en andere ideeën kunt opdoen.
Literatuur
[1] Noud van Kruysbergen, 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 Kruysbergen, Meerdere zones, OpenWrt instellen als router voor meerdere net
werkzones, c't 6/2019, p.138
[4] Carsten Strotmann, Beter tunnelen, Veilige VPN-verbindingen met WireGuard, c't 5/2019, p.138