Router statusinformatie monitoren

Noud van Kruysbergen
1

Inhoudsopgave

Het webfront-end van veel routers zoals de Fritzbox toont statistieken over de internetverbinding, belasting en het netwerk. Maar meer dan een paar seconden of een paar dagen kun je niet terug­kijken. Met een Raspberry Pi en het monitoringsysteem MRTG kun je statusinformatie van je Fritzbox router monitoren en 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 videostreams van huisgenoten de internetverbinding overbelasten. Maar waarom YouTube gisteravond geen genoegen was om naar te kijken, dat beantwoordt de Fritzbox niet – zo lang gaan de data in het webfront-end niet terug. Met een Raspberry Pi kun je deze en andere informatie binnenhalen en langdurig opslaan, zodat je problemen ook achteraf nog op het spoor kunt komen.

Er zijn meerdere monitoringsystemen die een Fritz­box kunnen bewaken, zoals Munin en Check_MK. We hebben hier gekozen voor het slanke MRTG.

router statusinformatie Fritzbox MRTG script Raspberry Pi

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.

Installeren

Dankzij Docker is het installeren niet moeilijk: in het meest simpele geval volstaat het om Raspbian op de Raspberry Pi te zetten, Docker te installeren en dan een Docker-container van GitHub te klonen. Daarna kun je de internetbelasting 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 interfacedocumentatie van AVM de benodigde informatie vindt.

Het installeren begint met het downloaden van de laatste versie van Raspbian. We hebben getest met Raspbian Stretch Lite, niet de desktopversie. Na het uitpakken moet je de Raspbian-image zetten op een minstens 8 GB grote microSD-kaart. Dat kan, onafhankelijk van het gebruikte besturingssysteem, met het programma balenaEtcher 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 bestandsdialoog heen.

router statusinformatie Fritzbox MRTG script Raspberry Pi kaart

Zet Raspbian op een SD-kaart voor de Pi.

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 besturingssysteem in elk geval rekening houdt met de veranderde partitionering. Open de (kleinere) bootpartitie op de kaart en maak daar een leeg bestand aan met de naam ssh. Daarmee wordt de SSH-daemon continu geactiveerd en kun je alle andere configuratiestappen makkelijk met behulp van ssh doen. Zo hoef je geen toetsenbord 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 toegangsgegevens voor je wifi nodig. Maak daarvoor op de bootpartitie 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=”690490020945986723″
}

Achter ssid zet je de naam van je wifi en achter psk de bijbehorende netwerksleutel. Dan maakt de Pi bij de eerste keer starten al contact met je wifinetwerk.

De volgende configuratiestappen zet je dan via SSH, bijvoorbeeld vanuit Windows met behulp van Putty of onder Linux en macOS op de console met ssh.

Fritzbox Docker-image

Docker voor Raspbian zit in een eigen repository. Voeg die en zijn sleutel toe aan de pakketbronnen:

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 pakketlijsten binnen en installeer je Docker met

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

Dan kun je de Docker-image Fritzbox-Bandwidth-­Monitor van Thomas Koch downloaden en installeren. Die staat op GitHub. Gebruik het volgende commando:

git clone https://github.com/mottobug/fritzbox-bandwidth-monitor.git

De bestanden komen dan in de sub­directory fritzbox-bandwidth-monitor. De image bevat een kant-en-klaar monitoringsysteem op basis van de Multi Router Traffic Grapher MRTG en Debian Stretch, dat de transfer­rate van de Fritzbox router afvangt en tot een jaar terug grafisch weergeeft. Voorwaarde is dat je in de Fritzbox het doorgeven van die informatie via UPnP niet hebt uitgezet: zie ‘Home Network / Network’ op het tabblad ‘Network Settings’ bij ‘Transmit status information over UPnP’.

Het configuratiebestand van MRTG staat in de subdirectory 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 internet­snelheid, zodat de schaal van de grafieken later klopt. Bovendien staat er aan het eind van het configuratiebestand wat HTML-code, die bij de grafieken ingevoegd wordt. Hier kun je bijvoorbeeld het juiste model van je Fritzbox invoegen en de correcte datasnelheden.

router statusinformatie Fritzbox MRTG script Raspberry Pi grafiek graph

Container voor monitoren

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-bandwidth-monitor

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

MRTG leest bij elke aanroep het configuratie­bestand mrtg.conf in en start aan de hand van de definitie Target[fritzbox] het script upnp2mrtg.sh. Als teruggavewaarde 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 onbelangrijk is waar die waarden voor staan. Je kunt ook temperaturen of het aantal binnenkomende gesprekken binnenhalen en visualiseren, zo lang de aanroep van Target[] maar twee ­numerieke waarden terug levert.

Router statusinformatie

Het script upnp2mrtg.sh is verantwoordelijk voor de communicatie 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 uitwisselen van data verloopt daarbij via de UPnP-poort 49000, waarover applicaties een groot aantal statusgegevens kunnen oproepen. Via de webpagina van het script kun je zeer omvangrijke informatie vinden.

Je kunt de Fritzbox zelf echter ook met de browser benaderen via poort 49000. Je kunt daar met /fbox­desc.xml, /tr64desc.xml, /igddesc.xml en /usb­desc.xml meerdere XML-bestanden vinden die de functieomvang van de Fritzbox beschrijven. Daarin staan verwijzingen naar andere XML-bestanden, die bijvoorbeeld functienamen en parameters bevatten. Een lijst van alle op te vragen XML-bestanden die voor de betreffende 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 documentatie van AVM genoemde functie ook geldt voor jouw Fritzbox. Als je bijvoorbeeld bij een Fritzbox 7490 of 7530 de url http://fritz.box:49000/igddesc.xml in de browser opent, krijg je daar het servicetype WANIPConnection te zien:

<service>
<serviceType>
urn:schemas-upnp-org:service:WANIPConnection:1
</serviceType>

<controlURL>
/igdupnp/control/WANIPConn1
</controlURL>

<SCPDURL>/igdconnSCPD.xml</SCPDURL>
</service>

Onder SCPDURL staat een verwijzing naar het bestand /igdconnSCPD.xml, dat gedetailleerde informatie bevat over de functies van die dienst. Als je dat XML-­bestand oproept, dan staat daar onder meer de uptime van de internetverbinding in:

<action>
<name>GetStatusInfo</name>
<argumentList>

<name>NewUptime</name>

</argumentList>
</action>

Hoe lang de internetverbinding al bestaat, kun je dus achterhalen met de service urn:schemas-upnp-org:service:WANIPConnection:1 door bij de url http://fritz.box:49000/igdupnp/control/WANIPConn1 dan de actie GetStatusInfo uit te voeren met de parameter New­Uptime. Die taak wordt overgenomen door het script upnpquery.sh – je hoeft daarmee alleen de genoemde taken aan te leveren:

./upnpquery.sh urn:schemas-upnp-org:service:WANIPConnection:1 /igdupnp/control/WANIPConn1 GetStatusInfo 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 statusinformatie aan je Fritzbox ontfutselen voor veel andere projecten.

(Mirko Dölle en Noud van Kruysbergen, c’t magazine)

Vind meer workshops en achtergrondinfo in c’t 11/2024

Deel dit artikel

Noud van Kruysbergen
Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

Lees ook

Windows 11 Home upgraden naar Pro? Zo kun je dit voor elkaar krijgen!

Wil je je Windows 11 Home upgraden naar Pro zodat je beschikking hebt over meer functies? Met de tips in deze workshop kun je dat (bijna altijd) doen ...

Met Raspberry Pi port knocking de computers in je netwerk beveiligen

Iedereen die een computer of server met het openbare internet verbindt, wordt al snel het doelwit van hackers. Sommige wetenschappers gaan ervan uit d...

1 Praat mee
avatar
  Abonneer  
nieuwsteoudste
Laat het mij weten wanneer er
Jan
Lezer
Jan

Hallo enig idee hoe ik bijvoorbeeld de totale ontvangen en uitgaande bytes kan monitoren via upnpquery.sh?

In het SOAP schema staan er meerdere parameters voor gedefinieerd:
http://fritz.box:49000/igdconnSCPD.xml

Maar wanneer ik deze op een vergelijkbare manier opvraag (zoals hierboven vwb de uptime):

./upnpquery.sh -V urn:schemas-upnp-org:service:WANIPConnection:1 /igdupnp/control/WANIPConn1 GetTotalBytesSent

Dan krijg ik een 500 Internal Server Error. Ik heb al meerdere namen/actions geprobeerd, maar geen enkele werkt om de GetTotalBytesSent of NewByteSendRate of ook maar iets uit deze XML op te vragen via upnpquery.sh.