Linux: Netzwerk-Statistiken zurücksetzen, ohne Rechner neu zu starten

Kein Kommentar Autor: Jürgen (jdo)

Shell Teaser 150x150Die meisten Linux sind sicher mit dem Befehl ifconfig vertraut. Dieser gibt uns nicht nur die derzeit zugewiesene IP-Adresse aus, sondern auch die Statistiken über die Netzwerkkarte. Also wie viele Pakete und Byte darüber geflossen sind. Das sieht dann zum Beispiel so aus, wenn ich ifconfig eth0 verwende:

eth0       Link encap:Ethernet  HWaddr 00:e0:4c:00:02:bb
inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr: fe80::2e0:4cff:fe00:2bb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:95142 errors:0 dropped:0 overruns:0 frame:0
TX packets:75294 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:64889509 (64.8 MB)  TX bytes:19445103 (19.4 MB)
Interrupt:19 Base address:0xc000

Nun kann es aber aus irgendwelchen Gründen sein, dass ich diese Statistiken auf 0 zurücksetzen möchte. Dies kann man durch einen Neustart des Rechners erreichen. Es geht aber auch anders – schneller.

Diese Statistiken werden im Kernel-Treiber der Netzwerkkarte gespeichert. Man kann diese auch direkt einsehen, indem man

cat /proc/dev/net

ausführt. Am schnellsten setzt man diese Statistiken zurück, indem man das entsprechende Kernel-Modul entfernt und sofort wieder einfügt. Nun muss man allerdings zunächst herausfinden, welches Modul gerade zuständig ist. Das geht mit ethtool, das sich in der Regel in den Repositories der entsprechenden Distribution befindet:

ethtool -i eth0

In der ersten Zeile der Ausgabe finden Sie nun zum Beispiel driver: e100. Nun wissen wir, welches Modul für die Netzwerkkarte eth0 zuständig ist.

modprobe -r e100; modprobe e100; ifup eth0

setzt nun die Statistiken der Netzwerkkarte zurück. Wem das schnelle auswerfen und einfügen nicht geheuer ist, kann noch ein sleep 1 dazwischen setzen:

modprobe -r e100; sleep 1; modprobe e100; sleep 1; ifup eth0

Der ganze Vorgang ist in wesentlich weniger Zeit abgeschlossen, als das System neu zu starten.

Warum ich das brauche? Ein ausgemusterter PC dient mir als Squid-Webproxy-Server und ich teile mir die Internet-Verbindung mit dem Bewohner unter mir. Wir haben zwar eine für diese Region tolle 4-MBit-Leitung, aber der ägyptische Provider rückt nur 80 GByte pro Monat inklusive mit voller Geschwindigkeit raus. Danach ist eine Drosselung auf 256 KBit angesagt, die unglaublich langsam ist. Da die 80 GByte nun drei Monate hintereinander bereits nach der Hälfte des Monats erreicht waren (und ich wars nicht! Ehrlich!), musste eine Lösung her. 80 GByte reichen eigentlich dicke, wenn man nicht jeden Monat das ganze Internet herunterlädt. Also jeder hat 40 GByte im Monat. Somit hat jeder pro Tag 1,3 GByte, um das Limit nicht zu überschreiten. Der unter mir hängt an einer separaten Netzwerkkarte und lädt nun mal gerne Sachen runter.

BitTorrent zu blocken ist schwierig, gerade, wenn Verschlüsselung im Spiel ist. Und mir ist es auch egal, was der Mitnutzer mit seinen GByte macht, solange meine Arbeit darunter nicht leiden muss. Also setz ich die Netzwerkkarte jede Nacht zurück und ein Script frägt minütlich per Cronjob den Verbrauch ab, der über diese Karte läuft. Wer über 1,2 GByte pro Tag verbrät, wird mittels Wondershaper auf 128 KBit für den restlichen Tag gedrosselt. Ab Mitternacht sind die Statistiken wieder auf Null und die Leitung macht wieder auf. Ich finde das eine praktische und faire Lösung und keiner kommt dem anderen in die Quere.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.