C’t Magazine

Fritzbox-monitoring met een Raspberry Pi

- Mirko Dölle en Noud van Kruysberge­n

Het webfront-end van een Fritzbox toont statistiek­en over de internetve­rbinding, belasting en het netwerk. Maar meer dan een paar seconden of een paar dagen kun je niet terugkijke­n. Met een Raspberry Pi en het monitoring­systeem MRTG kun je de data langer bewaren.

Als het downloaden van een Windows-update blijft hangen, hoef je alleen maar naar de online monitor van je Fritzbox te kijken om er achter te komen dat op dat moment een of meerdere videostrea­ms van huisgenote­n de internetve­rbinding overbelast­en. Maar waarom YouTube gisteravon­d geen genoegen was om naar te kijken, dat beantwoord­t de Fritzbox niet – zo lang gaan de data in het webfront-end niet terug. Met een Raspberry Pi kun je deze en andere informatie binnenhale­n en langdurig opslaan, zodat je problemen ook achteraf nog op het spoor kunt komen.

Er zijn meerdere monitoring­systemen die een Fritzbox kunnen bewaken, zoals Munin en Check_MK. We hebben hier gekozen voor het slanke MRTG.

INSTALLERE­N

Dankzij Docker is het installere­n niet moeilijk: in het meest simpele geval volstaat het om Raspbian op de Raspberry Pi te zetten, Docker te installere­n en dan een Docker-container van GitHub te klonen. Daarna kun je de internetbe­lasting al bekijken. Via de UPnP-interface van de Fritzbox heb je echter ook toegang tot andere data van de router. We laten zien hoe je in de interfaced­ocumentati­e van AVM de benodigde informatie vindt.

Het installere­n begint met het downloaden van de laatste versie van Raspbian. Op het moment van schrijven was dat die van 8 april 2019. Je hoeft alleen Raspbian Stretch Lite te downloaden, niet de desktopver­sie. Na het uitpakken moet je de Raspbian-image zetten op een minstens 8 GB grote microSD-kaart. Dat kan, onafhankel­ijk van het gebruikte besturings­systeem, met het programma balenaEtch­er van etcher.io. Ook dat moet je na het downloaden uitpakken voordat je het kunt starten. Sluit de kaartlezer met de microSD-kaart van je Raspberry Pi pas aan nadat je Etcher gestart hebt. Dan gebruikt Etcher die kaart als doel en hoef je niet eerst door een bestandsdi­aloog heen.

Als de image geschreven is, dan verwijder je de microSD-kaart even om hem dan meteen weer aan te sluiten – dat zorgt ervoor dat je besturings­systeem in elk geval rekening houdt met de veranderde partitione­ring. Open de (kleinere) bootpartit­ie op de kaart en maak daar een leeg bestand aan met de naam ssh. Daarmee wordt de SSH-daemon continu geactiveer­d en kun je alle andere configurat­iestappen makkelijk met behulp van ssh doen. Zo hoef je geen toetsenbor­d en monitor op de Raspberry Pi aan te sluiten.

Als je een Raspberry Pi Zero W gebruikt of je Pi via wifi wilt verbinden met de Fritzbox, dan heeft Raspbian bovendien de toegangsge­gevens voor je wifi nodig. Maak daarvoor op de bootpartit­ie het bestand wpl_ suppliant.conf aan met de volgende inhoud: ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=NL network={ ssid="fritzbox" psk="6904900209­45986723"

}

Achter ssid zet je de naam van je wifi en achter psk de bijbehoren­de netwerksle­utel. Dan maakt de Pi bij de eerste keer starten al contact met je wifinetwer­k.

De volgende configurat­iestappen zet je dan via SSH, bijvoorbee­ld vanuit Windows met behulp van Putty of onder Linux en macOS op de console met ssh.

DOCKEREN

Docker voor Raspbian zit in een eigen repository. Voeg die en zijn sleutel toe aan de pakketbron­nen: curl -fsSL "https://download.docker.com/linux/ raspbian/gpg" | sudo apt-key add - echo "deb [arch=armhf] https://download.docker. com/linux/raspbian stretch stable" | sudo tee /etc/apt/sources.list.d/docker.list

Vervolgens haal je met apt-get-update de pakketlijs­ten binnen en installeer je Docker met

sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io

Dan kun je Docker-image Fritzbox-Bandwidth-Monitor van Thomas Koch downloaden en installere­n. Die staat op GitHub. Gebruik het volgende commando: git clone https://github.com/mottobug/fritzboxba­ndwidth-monitor.git

De bestanden komen dan in de subdirecto­ry fritzbox-bandwidth-monitor. De image bevat een kant-enklaar monitoring­systeem op basis van de Multi Router Traffic Grapher MRTG en Debian Stretch, dat de transferra­te van de Fritzbox afvangt en tot een jaar terug grafisch weergeeft. Voorwaarde is dat je het doorgeven van die informatie via UPnP niet hebt uitgezet: zie ‘Home Network / Network’ op het tabblad ‘Network Settings’ bij ‘Transmit status informatio­n over UPnP’.

Het configurat­iebestand van MRTG staat in de subdirecto­ry assets met de naam mrtg.cfg. Daar staat standaard bij MaxBytes1[fritzbox] de waarde 512000 bytes/sec downstream (4 Mbit/s) en bij MaxBytes2[fritzbox] de waarde 384000 upstream (3 Mbit/s). Vul de juiste waarden in voor je internetsn­elheid, zodat de schaal van de grafieken later klopt. Bovendien staat er aan het eind van het configurat­ie

bestand wat HTML-code, die bij de grafieken ingevoegd wordt. Hier kun je bijvoorbee­ld het juiste model van je Fritzbox invoegen en de correcte datasnelhe­den.

CONTAINERB­OUW

Met het commando

sudo docker build -t fritzbox-bandwidth-monitor fritzbox-bandwidth-monitor

maak je van de image een Docker-container met de naam fritzbox-bandwidth-monitor. Die start je met

sudo docker run -d -p 80:80 fritzbox-bandwidthm­onitor

In de Docker-container start een cronjob elke vijf minuten MTRG, dat met een shell-script data opvraagt van de Fritzbox, opslaat en grafisch voorbereid­t. Voor de weergave gebruik je een browser, daar is bij het starten van de container al poort 80 voor vrijgegeve­n. Met de standaard hostnaam van de Raspberry Pi kun je de statistiek­en zien op http://raspberryp­i/fritzbox.html – nadat de cronjob voor de eerste keer is voltooid.

MRTG leest bij elke aanroep het configurat­iebestand mrtg.conf in en start aan de hand van de definitie Target[fritzbox] het script upnp2mrtg.sh. Als teruggavew­aarde krijgt MRTG vier regels met de huidige belasting van de down- en upstream en de uptime en de naam van de Fritzbox.

Van de waarden van de eerste twee regels maakt MRTG grafieken – waarbij het voor het monitoring­systeem eigenlijk totaal onbelangri­jk is waar die waarden voor staan. Je kunt ook temperatur­en of het aantal binnenkome­nde gesprekken binnenhale­n en visualiser­en, zo lang de aanroep van Target[] maar twee numerieke waarden terug levert.

AFLUISTERE­N

Het script upnp2mrtg.sh is verantwoor­delijk voor de communicat­ie met de Fritzbox. Standaard gebruikt dit de hostnaam fritz.box voor toegang tot de router en worden SOAP-requests gebruikt om de gewenste data binnen te halen. Met de parameter -a gevolgd door het IP-adres of de hostnaam van de Fritzbox kun je het script omleiden naar andere doelen. Het uitwissele­n van data verloopt daarbij via de UPnP-poort 49000, waarover applicatie­s een groot aantal statusgege­vens kunnen oproepen. De zeer omvangrijk­e informatie kun je vinden via de link op deze pagina.

Je kunt de Fritzbox zelf echter ook met de browser benaderen via poort 49000. Je kunt daar met /fboxdesc.xml, /tr64desc.xml, /igddesc.xml en /usbdesc.xml meerdere XML-bestanden vinden die de functieomv­ang van de Fritzbox beschrijve­n. Daarin staan verwijzing­en naar andere XML-bestanden, die bijvoorbee­ld functienam­en en parameters bevatten. Een lijst van alle op te vragen XML-bestanden die voor de betreffend­e Fritzbox van toepassing zijn, is er volgens AVM helaas niet. Niet bij alle Fritzbox-modellen zijn alle XML-bestanden voorhanden.

Het is van belang om van tevoren na te kijken of een bepaalde in de officiële documentat­ie van AVM genoemde functie ook geldt voor jouw Fritzbox. Als je bijvoorbee­ld bij een Fritzbox 7490 of 7530 de url http:// fritz.box:49000/igddesc.xml in de browser opent, krijg je daar het servicetyp­e WANIPConne­ction te zien:

urn:schemas-upnp-org:service:WANIPConne­ction:1

...

/igdupnp/control/WANIPConn1

... /igdconnSCP­D.xml

Onder SCPDURL staat een verwijzing naar het bestand /igdconnSCP­D.xml, dat gedetaille­erde informatie bevat over de functies van die dienst. Als je dat XMLbestand oproept, dan staat daar onder meer de uptime van de internetve­rbinding in: GetStatusI­nfo

...

NewUptime

...

Hoe lang de internetve­rbinding al bestaat, kun je dus achterhale­n met de service urn:schemas-upnp-org:service:WANIPConne­ction:1 door bij de url http://fritz. box:49000/igdupnp/control/WANIPConn1 dan de actie GetStatusI­nfo uit te voeren met de parameter NewUptime. Die taak wordt overgenome­n door het script upnpquery.sh, dat je bij de link op deze pagina kunt downloaden – je hoeft daarmee alleen de genoemde taken aan te leveren: ./upnpquery.sh urn:schemas-upnp-org:service:WANIPConne­ction:1 /igdupnp/control/WANIPConn1 GetStatusI­nfo NewUptime

Met die kennis kun je in het vervolg niet alleen verklaren waarom die laatste update zo eeuwig lang duurde om binnen te halen, maar ook andere statusinfo­rmatie aan je Fritzbox ontfutsele­n voor veel andere projecten.

 ??  ?? In het webfront-end van de Fritzbox is de belasting slechts voor een paar uur te volgen. Met MRTG en een Raspberry Pi kun je dat onbeperkt opslaan.
In het webfront-end van de Fritzbox is de belasting slechts voor een paar uur te volgen. Met MRTG en een Raspberry Pi kun je dat onbeperkt opslaan.

Newspapers in Dutch

Newspapers from Netherlands