Firmware voor je router - zo haal je meer uit OpenWrt

Door: Toon van Daele | 30 september 2020 06:08

beste triband-routers
How To

Eerder zijn we uitvoerig ingegaan op de installatie van OpenWrt, de alternatieve routerfirmware op basis van Linux. Deze software voegt heel wat functionaliteit aan de ondersteunde routers toe. Je kunt nog tal van andere diensten en functies toevoegen en deze nauwgezet configureren. In dit tweede artikel gaan we iets dieper in op een aantal features van deze pakketten.

Dankzij snapshots kun je naar een eerder punt in de OpenWrt-configuratie terugkeren. In VirtualBox doe je dat als volgt. In het venster van de draaiende virtuele machine klik je in de menubalk bovenaan op Machine en kies je Maak snapshot. Vul een naam en omschrijving in en bevestig met OK.

Draait je OpenWrt-configuratie in de soep, sluit dan de virtuele machine af en klik op de naam van de virtuele machine in de VirtualBox Manager. Selecteer het snapshot, klik op Restore en bevestig met Terugzetten. Je kunt nu weer verder. Mocht je de netwerkinstellingen niet meer weten, dan geeft het commando uci show network je de nodige informatie.

Je fysieke installatie mist weliswaar zo’n flexibele snapshot-functie, maar we raden je wel aan voor elke belangrijke wijziging een back-up van de firmwareconfiguratie te maken. Dat kan in LuCI via System / Backup - Flash Firmware / Generate archive. Met de knop Upload archive zet je zo’n back-up weer terug.

Maak een back-up van de firmwareconfiguratie voor je wijzigingen aanbrengt.

01 Portforwarden via LuCI

We kunnen ons voorstellen dat je in je thuisnetwerk eigen services hebt draaien die je ook vanaf internet wilt benaderen. Dat kan onder meer met behulp van portforwarding, een functionaliteit die je standaard in OpenWrt vindt en waar we (dus) kort over kunnen zijn. Je vindt die in LuCI bij Network / Firewall, op het tabblad Port Forwards.

Stel, je hebt een ip-camera met een webinterface op poort 81 en je wilt die vanaf een willekeurig internetadres bereiken, dan maak je als volgt een portforwarding-regel. Druk op Add, vul een geschikte regelnaam in, stel Protocol in op TCP (je kunt hier ook extra protocollen selecteren als UDP en ICMP, maar desnoods ook ANY en bij Source zone kies je wan). Normaal gesproken stel je zowel External Port als Internal Port in op hetzelfde poortnummer (81 in dit geval), maar je kunt External Port bijvoorbeeld ook op 80 instellen (wat het op afstand makkelijker maakt om je webserver te bereiken, aangezien men dan van het standaardpoortnummer kan uitgaan). Destination zone stel je in op lan en bij Internal IP address vul je het lan-ip-adres van je ip-camera in. Op het tabblad Advanced Settings kun je bijvoorbeeld ook aangeven dat alleen externe toestellen met een bepaald mac- of ip-adres worden toegelaten.

01 Een portforwarding-regel bevat altijd een aantal vaste elementen.

02 Configuratiescript voor portforwarden

Bevestig je wijzigingen met Save en vervolgens met Save & Apply. Het kan nooit kwaad de router voor alle zekerheid ook opnieuw te starten via System / Reboot. Zo’n regel laat zich ook altijd weer uitschakelen, hetzij tijdelijk (verwijder het vinkje bij Enable) hetzij definitief (druk op de Delete-knop). Bewerken doe je uiteraard met Edit.

Je kunt zo’n portforwarding-regel ook bewerken of zelf aanmaken vanuit de ssh-shell. Voer het commando cd /etc/config uit, gevolgd door ls om de inhoud de zien. Vervolgens tik je (bijvoorbeeld) vi firewall in en scrol je via de pijltjestoetsen tot beneden in dit configuratiebestand. Daar vind je de nieuwbakken regel terug, die er als volgt kan uitzien:

config redirect
option src 'wan'
option name 'IPcam2'
option target 'DNAT'
option dest_ip '192.168.1.35'
option dest 'lan'

option dest_port '81'

option src_dport '80'

option src_ip '81.83.33.80'

Om de bewerkmodus van vi te verlaten, druk je op Esc en vervolgens tik je :wq (wijzigingen eerst bewaren) of :q! (wijzigingen niet bewaren).

02 De portforwarding-regels vind je terug in het bestand /etc/config/firewall.

03 Ddns-client

Je thuisnetwerk bereik je in principe via het wan-ip-adres. Dat adres achterhaal je snel door vanaf je netwerk te surfen naar een site als www.whatismyip.org, maar het probleem is dat thuisnetwerken vaak een dynamisch ip-adres van de provider krijgen, dat dus zomaar kan wijzigen.

Dat kun je oplossen met een ddns-dienst (dynamic dns). Die koppelt je ip-adres aan een vaste hostnaam. Er moet natuurlijk een mechanisme zijn dat een adreswijziging meteen doorgeeft aan je ddns-provider en daarom biest OpenWrt een ddns-updateclient. Je moet dit pakket wel eerst zelf installeren. Dat kan vanuit LuCI via System / Software, waar je op het tabblad Available naar luci-app-ddns zoekt en op de Install-knop indrukt. Of vanuit PuTTY, met het commando:

opkg install luci-app-ddns

Herstart desnoods je router. De tool duikt nu op in het menu Services / Dynamic DNS. Vul een naam in en druk op Add. Plaats een vinkje bij Enabled en selecteer de gewenste ip-versie: IPv4-Address of IPv6-Address. Klik vervolgens op het pijltje bij DDNS Service provider [IPvx] en selecteer de gewenste provider: standaard worden zo’n 70 providers voor IPv4 en circa 35 providers voor IPv6 ondersteund. OpenWrt maakt hiervoor gebruik van (Bourne shell-)ddns-scripts.

03 De kans is groot dat jouw ddns-provider al in de lijst met ddns-scripts is opgenomen.

04 Ddns-scripts

Onze eigen ddns-provider ontbreekt in deze lijst. In zo’n geval selecteer je custom en vul je zelf de nodige informatie in, waarbij je eventueel gebruikmaakt van een custom-update-script van die provider. Specifiek voor www.noip.com en www.cloudflare.com heeft OpenWrt extra pakketten met het bijbehorende script, respectievelijk ddns-scripts_no-ip_com en ddns-scripts_cloudflare. Die installeer je dus eerst. Vergeet niet rechtsboven op UNSAVED CHANGES: X te klikken en met Save & Apply te bevestigen. De provider staat nu wel in de lijst. Bevestig met Change provider. In principe hoef je nu weinig meer te doen dan de Lookup Hostname en Domain in te vullen, evenals je account-ID. Deze informatie vind je bij je ddns-provider. Op het tabblad Timer Settings stel je de updatefrequentie in en op het tabblad Log File Viewer kun je nagaan wat er eventueel fout gaat. In het overzichtsvenster zie je het nieuwe item staan en zodra je hier op Start klikt, verschijnt het bijbehorende process-ID.

04 Het ddns-script in werking, maar de ddns-provider verwerpt hier (terecht) het private wan-ip-adres van onze virtuele router.

05 OpenVPN-client

Maak je gebruik van een OpenVPN-dienst om vanaf je netwerk veiliger op internet te kunnen, dan installeer je het best een OpenVPN-client op je router. Immers, zo zijn al je netwerkclients in één keer beschermd, inclusief clients die zelf geen voorziening voor een VPN-verbinding hebben. Het is ook mogelijk een eigen vpn-server op te zetten, maar deze procedure is bewerkelijk en kunnen we hier niet verder uitwerken. Voor de nodige instructies zie onder meer www.tiny.cc/ovpnbasic en voor een tor-variant www.tiny.cc/ovpntor.

We houden het hier op een OpenVPN-client en daarvoor installeer je eerst de noodzakelijke pakketten: luci-app-openvpn en openvpn-openssl. In het menu tref je nu ook de optie VPN / OpenVPN aan.

Je hebt in principe twee mogelijkheden om de client te configureren. Ofwel je maakt zelf een geschikt configuratiebestand op basis van een sjabloon via Select template (normaal meestal kies je hier dan Client configuration for a routed multi-client VPN), waarna je via Edit de instellingen aanpast en met de Add-knop alle nodige velden toevoegt. Vanaf OpenWrt 19.07 is er een makkelijkere oplossing: je importeert het OpenVPN-configuratiebestand dat je bij je VPN-provider downloadt.

We tonen hoe je dat doet met een gratis (en dus beperkt) account bij ProtonVPN. Meld je aan bij de dienst, klik op Downloads en scrol naar beneden. Selecteer hier de optie Router en (bij voorkeur) UDP, en open het tabblad Server configs. Bij Netherlands vind je een drietal gratis servers. Klik op Download bij een van deze servers en haal het ovpn-bestand op.

05 Met behulp van een ovpn-bestand zet je snel een OpenVPN-client op.

06 Configuratie OpenVPN

In het venster van OpenVPN tik je nu een geschikte naam bij OVPN configuration file upload en verwijs je via Bestand kiezen naar het gedownloade ovpn-bestand. Bevestig met Upload en druk op de Edit-knop van deze OpenVPN-versie. De configuratie staat nu klaar, maar je moet wel nog je ProtonVPN-account-ID invullen in het onderste venster. Hiervoor kun je terecht op https://account.protonvpn.com, bij Account / OpenVPN / IKEv2 username. Kopieer en plak beide items op afzonderlijke regels in het venster. In het bovenste venster tik je vervolgens achter de regel auth-user-pass het pad (voorafgegaan door een spatie):

/etc/openvpn/ProtonVPN.auth

Bevestig met Save. Terug in het overzichtsvenster van OpenVPN plaats je bij je OpenVPN-instantie een vinkje bij Enabled, druk je op Save & Apply en indien nodig op Start.

Als het goed is, is je netwerk nu via deze VPN-dienst met internet verbonden. Dat kun je in PuTTY controleren met bijvoorbeeld

wget -qO- http://ifconfig.co/json

Het wan-ip-adres hoort nu dat van de VPN-server te zijn.

06 Ook op deze manier ontdek je met welke (vpn-)server je netwerk is verbonden.

07 Firewall: iptables

Elke degelijke router heeft ook een firewall en dat is bij OpenWrt niet anders. Aangezien het om een Linux-implementatie gaat zal het je weinig verbazen dat deze firewall rond de opdrachtregeltool iptables is gebouwd. Dat merk je als je vanuit PuTTY Deze commando’s uitvoert:

iptables -L -nv (voor ipv4)
ip6tables -L -nv (voor ipv6)

Overigens vind je deze informatie ook in LuCI, via Status / Firewall, op de tabbladen IPv4 Firewall en IPv6 Firewall. Je zult merken dat ook de door jou toegevoegde regels in deze overzichten worden opgenomen.

Nou kun je de firewall weliswaar helemaal finetunen vanuit de opdrachtregel, maar dat vergt wel een gedegen kennis van iptables. We beperken ons hier tot een paar eenvoudige voorbeelden en focussen ons vervolgens op de wat toegankelijkere LuCI-interface.

Om al het binnenkomende verkeer van een verdacht of ongewenst ip-adres te blokkeren volstaat een regel als:

iptables -I INPUT -s <ip-adres> -j DROP

Deze regel laat zich ook weer makkelijk verwijderen: het volstaat de parameter -I te vervangen door -D.

Het is ook mogelijk al het tcp-verkeer te blokkeren dat op een bepaalde poort van een specifieke netwerkinterface binnenkomt (de namen van de interfaces vind je in LuCI bij Network / Interfaces):

iptables -A INPUT -j DROP -p tcp –destination-port 80 -i eth1.2

Eventueel voeg je helemaal achteraan nog een specifiek bestemmingsadres toe met de parameter -d <ip-adres>.

Op internet vind je terecht meer uitgebreide documentatie en praktijkvoorbeelden rond iptables.

07 Een overzicht van de firewallregels in iptables, zowel via LuCI als via PuTTY.

08 Firewall: icmp

Er is ook al veel mogelijk vanuit LuCI. Stel, je wilt vermijden dat je router kan worden gepingd vanaf internet. Ga dan naar Network / Firewall en open het tabblad Traffic Rules. Klik op Add en vul bij Name bijvoorbeeld Ping-drop in. Protocol stel je in op ICMP, bij Source zone kies je wan (of Any Zone als je ook vanuit je eigen netwerk ping wilt blokkeren) en bij Destination Zone selecteer je Device (input), aangezien het om de router zelf gaat. De optie Action stel je bij voorkeur in op drop, zodat de router geen reactie geeft op ping-verzoeken. Dat is iets ‘veiliger’ dan reject: je merkt het verschil wel als je vervolgens ping-commando’s naar het wan-ip-adres van je netwerk uitvoert. Op het tabblad Advanced Settings kun je IPv4 and IPv6 instellen bij Restrict to address family. Bij Match ICMP type kun je hier tevens aangeven welke icmp-pakketten je precies wilt blokkeren (standaard: any). Let wel op dat je geen andere regel hebt opgenomen die tegenstrijdig is met wat je beoogt. In dat geval kun je de volgorde van de regels nog aanpassen (via het knopje met de drie streepjes) of je verwijdert bij een van de regels het vinkje bij Enable.

08 Voortaan reageert je router niet meer op icmp-verzoeken (zoals ping) van buitenaf.

09 Tijdsrestricties

Maken er ook kinderen gebruik van je thuisnetwerk, dan vind je het wellicht ook handig als je (bepaald) internetverkeer automatisch op gezette tijden kunt laten blokkeren. Voeg een nieuwe regel toe met de knop Add. Verzin een naam en selecteer de gewenste protocollen, zoals TCP en UDP. Bij Source Zone kies je lan en bij Source Address kies je het interne ip-adres van de toestellen die je wilt blokkeren. Destination Zone stel je in op wan en bij Action kies je drop. Op het tabblad Advanced Settings kun je overigens (ook) het Source MAC address van de toestellen in kwestie invullen.

Over naar het tabblad Time Restrictions, waar je de dagen, tijdstippen en periode selecteert waarbinnen deze beperking moet gelden. Je vult hier best alle waarden in. Controleer via System / System, op het tabblad General Settings en eventueel ook op Time Synchronisation of de tijd(zone) van je router wel correct staat ingesteld.

Naast het iptables-overzicht (zie paragraaf 7) vind je deze regels ook terug in het configuratiebestand firewall in de map /etc/config. Met deze commando’s kun je via de pijltjestoetsen door het bestand bladeren en het zelf(s) bewerken:

cd /etc/config
vi firewall

09 Handig: je kunt regels voor het internetverkeer ook tijdsgebonden maken.

10 Webproxy

Misschien vind je het ook wel nuttig om webverkeer te monitoren. Dat los je op met een webproxy. We nemen hier Privoxy als voorbeeld. Je installeert die vanuit de LuCI-interface of met het commando:

opkg install luci-app-privoxy

Na de installatie vind je bij Services de optie Privoxy WEB proxy, waar je een vinkje plaatst bij Enabled, de Start-knop indrukt en bevestigt met Save & Apply. Op het tabblad Access Control zie je bij Listen addresses het adres en de poort van de proxyserver (standaard poort 8118).

Het is nu de bedoeling dat je de proxy van de clienttoestellen hierop afstemt. In Firefox doe je dat via Opties / Algemeen waar je bij Netwerkinstellingen op Instellingen drukt en bij Handmatige proxyconfiguratie het ip-adres en de poort invult voor HTTP-proxy en HTTPS-proxy. Voor Chrome en Edge zoek je in het Windows-startmenu naar proxy en start je Proxy-instellingen op. Zet Proxyserver gebruiken op Aan en vul ook hier de juiste gegevens in. Bevestig met Opslaan.

Terug bij Privoxy kun je in eerste instantie op het tabblad Logging een vinkje plaatsen bij Debug 1 (Log the destination for each request …). Vervolgens open je het tabblad Log File Viewer en klik je op Read / Reread log file: alle http(s)-verzoeken van de geconfigureerde browsers vind je hier terug.

Het is trouwens ook mogelijk om via Privoxy allerlei restricties in te stellen, bijvoorbeeld om het tonen van advertenties tegen te gaan. Dat doe je via de configuratiebestanden die op het tabblad Files en Directories staan vermeld. We hebben hier helaas niet de ruimte om er dieper in te gaan. Meer uitleg vind je hier.

10 Als je dat wenst log je alle mogelijke http(s)-verzoeken van netwerkclients.

0 Reactie(s) op: Firmware voor je router - zo haal je meer uit OpenWrt

  • Om te reageren moet je ingelogd zijn. Nog geen account? Registreer je dan en praat mee!
  • Er zijn nog geen reacties op dit artikel.

Wanneer je een reactie plaatst ga je akoord
met onze voorwaarden voor reacties.