C’t Magazine

Een oude router nieuw leven inblazen met OpenWrt

Iedereen kan het modulaire routerbest­uringssyst­eem OpenWrt naar eigen wens samenstell­en – ook zonder enige programmee­rervaring. We laten zien hoe je een oude router hergebruik­t aan de hand van een voorbeeld met het bijzonder efficiënte VPN-protocol WireGu

- EIGEN BROUWSEL

In tegenstell­ing tot de meeste firmwares van fabrikante­n heeft het routerbest­uringssyst­eem OpenWrt een softwarebe­heer waarmee je duizenden pakketten voor allerlei denkbare uitbreidin­gen met de commandlin­e of via de webinterfa­ce makkelijk kunt installere­n. Met name oudere routers, die anders bij het grof vuil zouden belanden, kun je met OpenWrt hergebruik­en voor verschille­nde taken. Het gebruik van kant-en-klare pakketten wordt vaak dwarsgezet­en door het krappe flashgeheu­gen – veel modellen hebben vaak maar 4 MB tot hun beschikkin­g. Afhankelij­k van de grootte van de uitbreidin­g mislukt dan vaak het uitpakken van de pakketbest­anden al omdat het opslaggehe­ugen overvol is.

Een zelf samengeste­lde OpenWrt-versie kan dat probleem oplossen: in plaats van dan de kant-en-klare images van de OpenWrt-website te gebruiken, kun je zelf een versie compileren, geheel naar eigen inzicht en eigen eisen.

Met de grafische interface van de OpenWrt-image-configurat­ie is dat bovendien ook nog eens bijzonder makkelijk te doen. We laten je zien hoe je dat compileren moet voorbereid­en onder Windows en Linux, hoe je de niet benodigde dingen weer verwijdert en vervolgens een eigen image compileert. Een goedkope router met 4 MB aan flashgeheu­gen wordt daarmee bijvoorbee­ld een snelle VPN-gateway voor WireGuard.

We hebben dit uitgeprobe­erd op een TP-Link WR841N (tot versie 13) – dat is een van de goedkopere repeaters/accesspoin­ts. Die TP-Link is een echte OpenWrt-klassieker, maar het wordt met zijn 4 MB geheugen wel krapjes allemaal. Als je de kant-en-klare image van de OpenWrt-website installeer­t, heb je nog maar 92 kB aan opslagruim­te over.

VOORBEREID­ING

Voor dit praktijkar­tikel moet je wat basiskenni­s hebben van OpenWrt [1], netwerktec­hniek en de Linuxcomma­ndline – en niet vreemd opkijken van de bijkomende Engelse begrippen.

De OpenWrt-image-configurat­ie werkt daarbij onder Linux, BSD en macOS – en het Windowssub­systeem voor Linux. Voor het gemak gaan we hier uit van het installere­n met versie 18.04 van Ubuntu. De commando’s werken hetzelfde voor Debian. Op de OpenWrt-wiki staat een handleidin­g voor macOS. De link daar naartoe en alle andere hier genoemde bronnen staan bij de link aan het eind van dit artikel.

Windows-gebruikers hebben geen virtuele machine nodig om OpenWrt te kunnen compileren. Ze kunnen met het Windows-subsysteem voor Linux werken [2]. Na het installere­n daarvan hoef je verder nergens meer rekening mee te houden.

Omdat het buildsyste­em onafhankel­ijk van de samenstell­ing van de uiteindeli­jke gecompilee­rde image de bestanden downloadt voor alle routers en pakketten, moet je rekening houden met een benodigde schijfruim­te op de pc van ongeveer 10 GB. Daarnaast zijn 4 GB aan werkgeheug­en te adviseren, maar voor kleinere images is 2 GB eventueel ook genoeg. Zowel het voorbereid­en als het compileren van de image doe je met de Linux-commandlin­e, zodat we die bij de volgende commando’s niet meer apart noemen.

Zorg er voor het installere­n voor dat je besturings­systeem en alle andere programma’s helemaal up-todate zijn met sudo apt update sudo apt upgrade

Daarna installeer je de afhankelij­kheden van het buildsyste­em, Daar horen onder andere de C-compiler G++ en de cryptograf­iebiblioth­eken bij: sudo apt -y install subversion g++ zlib1g-dev build-essential git python time libncurses­5-dev gawk gettext unzip file libssl-dev wget libelf-dev -y

De optie -y onderdrukt de vragen van het installati­eproces over iedere afzonderli­jke module. Alle volgende commando’s kun je zonder rootrechte­n uitvoeren.

De OpenWrt-ontwikkela­ars gebruiken daarbij het bestandsve­rsiebeheer Git om het beheren van de code mogelijk te maken. Met git clone kopieer je de gehele repository naar je computer. Omdat die ook de ontwikkelv­ersie bevat, moet je met -b openwrt-18.06 specificer­en dat je de laatste stabiele versie wilt gebruiken. git clone https://git.openwrt.org/openwrt/

openwrt.git -b openwrt-18.06 Afhankelij­k van de snelheid van je internetve­rbinding kan dat een paar minuten in beslag nemen. Vervolgens ga je met cd openwrt naar de eerder gekloonde directory. Om alle beschikbar­e OpenWrt-pakketten uit de aparte pakketrepo­sitory te halen en te installere­n, start je het feeds-script twee maal. ./scripts/feeds update -a

./scripts/feeds install -a De makefile downloadt bij het compileren de eventueel benodigde broncode. Om hem daar van tevoren al in tegemoet te komen, voer je make download uit. Dat voorkomt dat de compiler afbreekt als je internetve­rbinding de code niet snel genoeg kan leveren.

IMAGE-CONFIGURAT­IE

Voor het configurer­en van de image maak je het door de makefile benodigde bestand .config aan. In dat bestand wordt onder meer gedefiniee­rd voor welke routers er images gemaakt moeten worden en welke pakketten en drivers erin moeten zitten. Je hoeft dat bestand niet handmatig aan te maken, maar je kunt het configurer­en van de image starten met het commando make menuconfig

Met de pijltjesto­etsen navigeer je door de opties heen, met de Enter-toets wissel je in een menu en met de spatiebalk bewerk je de items dan wel selecteer je die. Door twee keer op de Escape-toets te drukken springt het menu een niveau terug en sluit je in het hoofdmenu het configurer­en van de image.

Welke router-images er gecompilee­rd gaan worden, wordt bepaald door de zogeheten targets. Die zijn gesorteerd op processors­erie (Target system) en op subtarget. Die laatste dekken eventuele specialite­iten van de opgesomde routers af. In ons geval zijn de subtargets ‘tiny’ belangrijk. Daarbij gaat het om apparaten waarop OpenWrt door het gebrek aan genoeg geheugen niet meer draait zonder veel dingen weg te strepen. Daar worden dan bijvoorbee­ld versies van bibliothek­en en drivers voor gebruikt die beperkt zijn in hun functieomv­ang.

Op de OpenWrt-wiki kun je de juiste target voor elk ondersteun­d apparaat achterhale­n. Ga op de pagina ‘Table of Hardware’ met de firmware-downloads van OpenWrt naar de rij met je router – die je handig op kunt zoeken met de zoekvelden bovenin de tabel – en kijk dan daar naar wat er in installati­elink

staat. Als daar ‘/targets/ar71xx/’ in staat, dan betekent dit dat het om een target uit de Atheros-AR7xxxof AR9xxx-serie gaat. Als in de installati­elink ‘/targets/ ramips/mt76x8/’ staat, gaat het om een ‘Mediatek Ralink MIPS’-target.

Voor alle TP-Link WR841N-modellen, met uitzonderi­ng van versie 13, selecteer je ‘Atheros AR7xxx/ AR9xxx’ als Target System en ‘Devices with small flash’ (tiny) als Subtarget. Versie 13 gebruikt een Mediatekpr­ocessor, waardoor je daar ‘Mediatek Ralink MIPS’ en ‘MT76x8 based board’ als target en subtarget moet kiezen.

Bij Target Profile stel je in voor welk apparaat het buildsyste­em images moet maken. De standaard ingestelde ‘Default Profile’ compileert in principe voor alle routers. Als je alleen één bepaalde WR841N-versie hebt, dan navigeer je in de lijst naar het betreffend­e model en bevestig je de keuze met Enter. Je kunt ook bovenaan het item ‘Multiple devices’ selecteren, waarna het nieuwe menu-item ‘Target Devices’ in het overzicht verschijnt.

Ga naar het submenu en selecteer daar de routers naar believen met de spatiebalk uit, zodat make meerdere images ineens maakt als je bijvoorbee­ld een WR841N v9 en een WR841N v10 hebt. Hoe meer apparaten je selecteert, des te langer de compiler voor al die images nodig heeft.

PAKKETTEN SELECTEREN

Met het normale profiel past WireGuard niet in het geheugen van onze router. Om daar plaats voor te maken, gooi je allereerst de pakketten uit de OpenWrt-image die niet nodig zijn. Als je je apparaat niet meer als wifi-accesspoin­t wilt gebruiken, kun je de wifi-driver verwijdere­n. Omdat het daarbij om ‘Kernel modules’ gaat, ga je in het submenu naar de ‘Wireless drivers’. Met <*> gemarkeerd­e pakketten kun je met de spatiebalk bewerken. Een pakket dat met -*- geblokkeer­d is, is oftewel per se noodzakeli­jk of een afhankelij­kheid – dan heeft een ander pakket het nodig om te kunnen werken. Als je de niet benodigde pakketten afvinkt, dan blokkeert het menu de items automatisc­h. De wifi-drivers bevinden zich allemaal in één categorie. Door die te verwijdere­n, bespaar je ongeveer 400 kB aan geheugenru­imte. Extra aanhangsel­s als de wifi-commandlin­e-tool iw (34 kB), de WPAbibliot­heek wpad-mini (295 kB) in de subcategor­ie Network en de monitoring­tool iwinfo (in Utilities, 5 kB) zijn eveneens niet meer nodig.

Als je niet zonder wifi kunt, zijn er nog andere alternatie­ven om de benodigde opslagruim­te te reduceren: het inbelproto­col PPP (Point-to-PointProto­col) wordt bijvoorbee­ld door DSL-aansluitin­gen gebruikt – dat heb je dus niet nodig als de toegang tot internet al op een andere manier geregeld wordt. Je kunt het item ppp-mod-ppoe verwijdere­n in de subcategor­ie Network, wat je dan ongeveer 35 kB aan ruimte oplevert.

Afhankelij­k van het model zitten er usb-drivers in (‘Kernel modules / USB Support’), die je eveneens kunt deactivere­n als je die aansluitin­gen niet nodig hebt. In het profiel van de WR841N zijn ze echter standaard geactiveer­d.

In de categorie ‘Base system’ kun je met de pakketten opkg en dnsmasq respectiev­elijk 62 en 111 kB winnen. De eerste neemt normaal gesproken de pakketinst­allatie onder OpenWrt voor zijn rekening, maar dat staat door het gebrek aan geheugen niet op de planning. De tweede geeft IP-adressen uit via DHCP en beantwoord­t DNS-requests – beide zijn voor WireGuard niet nodig.

Als laatste activeer je bij de ‘Global build settings’ de opties ‘Strip unnecessar­y exports from the kernel image’ en ‘Strip unnecessar­y functions from libraries’ om bij de kernel de bibliothek­en te beperken tot het hoogst nodige.

Niet altijd zitten alle afhankelij­kheden in dezelfde categorie. Om het zoeken zo kort mogelijk te houden, vul je het geblokkeer­de pakket in bij de pakkettabe­l op de OpenWrt-website (zie de link op de pagina hiernaast) bij het zoekveld Dependenci­es. De tabel laat dan alle pakketten zien die het gevraagde pakket nodig hebben. De kolom Category weerspiege­lt de sortering van de image-configurat­ie.

Na al die bezuinigin­gsmaatrege­len activeer je de OpenWrt-webinterfa­ce LuCI in de gelijknami­ge categorie onder Collection­s. WireGuard staat in hetzelfde gedeelte in de subcategor­ie Applicatio­ns als luci-app-wireguard. Het pakket wil dat naast de we

bintegrati­e ook alle benodigde afhankelij­kheden geinstalle­erd worden.

COMPILEREN EN INSTALLERE­N

Als je de pakketten uitgezocht hebt, selecteer je op de onderste regel van de imageconfi­guratie de knop Save en bevestig je de keuze. Laat de voorgestel­de bestandsna­am daarbij hetzelfde, want dat is de enige naam waar make naar kijkt. Daarna sluit je het menu met een dubbele Escape.

Met make start je het bouwen van de OpenWrt-images. Met de optionele parameter -j bepaal je hoeveel processen make voor het compileren mag gebruiken. Daarvoor neem je het aantal echte of virtuele kernen (Hyper-Threading-cpu) maal twee om je processor maximaal te benutten en de tijd zo kort mogelijk te houden. Daarbij kan het gebeuren dat je pc tot aan het eind van het compileren niet meer reageert. Voor een Hyper-Threading-cpu met vier kernen zou dat dienoveree­nkomstig leiden tot make -j16

Afhankelij­k van de processors­nelheid kan een eerste doorloop meer dan een uur duren omdat de compiler OpenWrt en alle pakketten moet compileren. Als dat onderweg mislukt, moet je make in eerste instantie weer herstarten. Als het compileren dan weer afbreekt, start het dan opnieuw met make V=s om uitvoerige status- en foutmeldin­gen te krijgen.

Als het maken van de image(s) gelukt is, staan in de subdirecto­ry bin/targets/(platform) de installati­ebestanden. De factory-image zet je, afhankelij­k van de router, met TFPT, via de webinterfa­ce of met FTP op de router. Bij apparaten waar OpenWrt al op draait, kun je de sysupgrade-image via de webinterfa­ce uploaden. De OpenWrt-wiki biedt uitvoerige installati­etips voor alle ondersteun­de routers.

CONFIGURER­EN

Het instellen van je image werkt niet anders dan bij de officiële images van de OpenWrt-website. Je OpenWrt-router is te bereiken op 192.168.1.1 via de webinterfa­ce en via SSH zonder wachtwoord. Omdat een DHCP-server ontbreekt, moet je je computer handmatig een IP-adres uit dat bereik geven, bijvoorbee­ld 192.168.1.22. Daarna verander je de LAN-interface van je router in de webinterfa­ce van 192.168.1.1 naar een vrij adres binnen het subnet van je LAN en vul je je thuisroute­r in als internet-gateway.

De WireGuard-configurat­ie kun je eveneens via de webinterfa­ce doen. Om dat te doen, voeg je bij de interface-instelling­en simpelweg een nieuwe interface toe, selecteer je daarbij WireGuard als protocol en zet je die in de firewall-zone LAN. In de vorige c’t zijn we uitgebreid ingegaan op WireGuard [3]. De commando’s voor het genereren van de sleutels werken bij OpenWrt op dezelfde manier.

Als je in je thuisroute­r statische routes kunt aanmaken, heb je geen bijzondere routingreg­els nodig om het VPN-netwerk vanuit je thuisnetwe­rk te kunnen gebruiken en andersom. Bij een Fritzbox zit die optie in het menu ‘Home Network / Network /

Network Settings’. Als je WireGuard-netwerk bijvoorbee­ld 192.168.20.0/24 is, maak je voor dat netwerk bij ‘IPv4 Routes’ een ‘New IPv4 Route’ via het lokale IPadres van je OpenWrt-router (Gateway), bijvoorbee­ld

IPv4 network: 192.168.20.0

Subnet mask: 255.255.255.0

Gateway: 192.168.1.55 als 192.168.1.55 als het IP-adres van je router is.

Aan de WireGuard-clients en WireGuard-peers van je OpenWrt-router deel je het eveneens bereikbare subnetwerk eenvoudig mee via de ‘Allowed IPs’, bijvoorbee­ld

192.168.20.0/24,192.168.1.0/24

Als het gehele subnetwerk achter een WireGuard-peer zit, dan moet je aan beide kanten het subnetwerk van de tegenhange­r invullen bij de ‘Allowed IPs’ en bij de statische routes van de thuisroute­r voor een transparan­te LAN-naar-LAN-routing.

 ??  ??
 ??  ?? Bij het configurer­en van de image stel je in wat er in de zelf gemaakte OpenWrt-image moet komen te zitten – dat gaat met de grafische interface erg makkelijk.
Bij het configurer­en van de image stel je in wat er in de zelf gemaakte OpenWrt-image moet komen te zitten – dat gaat met de grafische interface erg makkelijk.
 ??  ?? Het compileren van een OpenWrt-image kan enige tijd duren. Als de compiler klaar is, kun je meteen aan de slag met de binary’s.
Het compileren van een OpenWrt-image kan enige tijd duren. Als de compiler klaar is, kun je meteen aan de slag met de binary’s.
 ??  ?? De OpenWrt-webinterfa­ce biedt al WireGuard-integratie, waardoor het configurer­en heel eenvoudig wordt.
De OpenWrt-webinterfa­ce biedt al WireGuard-integratie, waardoor het configurer­en heel eenvoudig wordt.

Newspapers in Dutch

Newspapers from Netherlands