Hallo! Ein gesundes neues Jahr! Ich habe folgendes Problem: Ich muss das Volumen von meinem Rechner (Suse 10) zum Router aufzeichnen. Mein Papa hat einen DSL-Tarif von Arcor mit 1000MB. Nun darf ich die Hälfte verbrauchen, was darüber ist, muss ich zahlen. Nun muss ich ihn nachweisen, dass nicht alles, was drüber ist, von mir ist. Ich möchte also den ganzen Traffic zu dieser IP von Router aufzeichnen, nicht aber zu anderen Rechnern im Netzwerk. Hat jemand eine Möglichkeit, eine Logdatei oder ähnliches aufzuzeichnen? Zur lokalen Situation: Router ist immer an, hat auch intern immer die gleiche IP, mein Rechner ist tagsüber öfters an, das DSL-Modem ist manchmal den ganzen Tag an, manchmal auch nur eine Stunde. Der Router hat auch einen integrierten Switch. Danke für die Arbeit Martin Ereth
Quoting Martin Ereth
Ich habe folgendes Problem: Ich muss das Volumen von meinem Rechner (Suse 10) zum Router aufzeichnen. Mein Papa hat einen DSL-Tarif von Arcor mit 1000MB. Nun darf ich die Hälfte verbrauchen, was darüber ist, muss ich zahlen. Nun muss ich ihn nachweisen, dass nicht alles, was drüber ist, von mir ist.
Ich möchte also den ganzen Traffic zu dieser IP von Router aufzeichnen, nicht aber zu anderen Rechnern im Netzwerk. Hat jemand eine Möglichkeit, eine Logdatei oder ähnliches aufzuzeichnen?
Zur lokalen Situation: Router ist immer an, hat auch intern immer die gleiche IP, mein Rechner ist tagsüber öfters an, das DSL-Modem ist manchmal den ganzen Tag an, manchmal auch nur eine Stunde. Der Router hat auch einen integrierten Switch.
Traffic messen geht in dem Fall am einfachsten über iptables. Entweder auf dem Clientrechner oder auf dem Router. Ungefähr so (Lösung "auf dem Router"): # Parameter definieren CLIENT=192.168.0.5 # der zu überwachende Client INTERNET=ppp0 # Netzwerk-Device, an dem das Internet hängt # Dummy-Chain zum Zählen iptables -N zaehler iptables -A zaehler -j RETURN # eingehender Traffic, der zum Client geht, muß vor dem Filtern gezählt werden iptables -I FORWARD 1 -i $INTERNET -d $CLIENT -j zaehler # ausgehender Traffic, der vom Client kommt, muß nach dem Filtern gezählt werden # deshalb diese Regel ganz am Ende des FORWARD chain (aber vor einem evtl. noch # vorhandenen REJECT oder DENY) setzen. # Wenn irgendwo entsprechender Traffic in andere Chains # abgeleitet und dort ACCEPTed wird, muß der vor dem ACCEPT auch durch den # zaehler - das geht am einfachsten, indem man sich nen Chain accept-it baut, # der aus -j zaehler und dann -j ACCEPT besteht iptables -A FORWARD -s $CLIENT -o $INTERNET -j zaehler So, nun brauchst Du noch ein kleines Skript, das den Byte Count vom Zähler-Chain ausliest und auf 0 zurücksetzt. Das geht z.B. so: #!/bin/bash AMOUNT=$(iptables -vxL traffic --zero traffic|tail -2|head -1|awk '{print $2;}') MONTH=$(date +%m) DATE=$(date) echo $MONTH $AMOUNT $DATE >> /var/log/traffic Dieses Skript pflanzst Du einfach alle paar Minuten in /etc/crontab und am besten auch noch irgendwo in /etc/init.d/rc0.d oder so (damit auch beim Shutdown die Werte weggesichert werden). Damit hast Du in /var/log/traffic ein Logfile, das Du z.B. mit awk bequem auslesen kannst: BEGIN { SUM=0 MONTH=0 } { CURRENT_MONTH=$1; CURRENT_AMOUNT=$2; if (CURRENT_MONTH != MONTH) { if (MONTH != 0) { print "Summe " MONTH ": " SUM/1000000 " Mio Bytes"; } MONTH=CURRENT_MONTH; SUM=0; } SUM += CURRENT_AMOUNT; } END { print "Summe " MONTH ": " SUM/1000000 " Mio Bytes"; } Das wird dann aufgerufen mit: awk -f traffic.awk /var/log/traffic So, das Ganze in die diversen Pfade zu legen, noch nen logrotate dazuzubasteln und den Report ein bißchen zu verschönern bleibt dem geneigten Schüler dann als Übung überlassen. -- Erhard Schwenk Akkordeonjugend Baden-Württemberg - http://www.akkordeonjugend.de k-itx it-dienstleistungen - http://www.k-itx.net
Erhard Schwenk schrieb:
Quoting Martin Ereth
: Ich habe folgendes Problem: Ich muss das Volumen von meinem Rechner (Suse 10) zum Router aufzeichnen. [...]
Traffic messen geht in dem Fall am einfachsten über iptables. Entweder auf dem Clientrechner oder auf dem Router. Ungefähr so (Lösung "auf dem Router"): [..sehr ausführliche ERklärung..]
Hallo Erhard! Danke für deine Erklärung! Soweit ich das verstanden habe (ich weiss nur, dass es iptables gibt, und dass man damit eine Firewall machen kann), richtest du auf dem Router mit IP-Tables einen Zähler ein. Das Problem ist nur: der Router ist kein Linux-Router (*schäm*) sondern ein Hardwarerouter. Netgear RP614. Also muss ich das lokal auf meinem Rechner lösen. Die Idee mit der Chain ist gut, nur brauch ich das jetzt für meinen Rechner. Es soll der Traffic zum und vom Router aufgezeichnet werden (Router:192.168.0.1, mein Rechner: 192.168.0.10) Gibt es gute Lektüre für iptables und Einsteiger in diesem Thema? Danke Martin Ereth
Quoting Martin Ereth
Erhard Schwenk schrieb:
Quoting Martin Ereth
: Ich habe folgendes Problem: Ich muss das Volumen von meinem Rechner (Suse 10) zum Router aufzeichnen. [...]
Traffic messen geht in dem Fall am einfachsten über iptables. Entweder auf dem Clientrechner oder auf dem Router. Ungefähr so (Lösung "auf dem Router"): [..sehr ausführliche ERklärung..]
Hallo Erhard! Danke für deine Erklärung! Soweit ich das verstanden habe (ich weiss nur, dass es iptables gibt, und dass man damit eine Firewall machen kann), richtest du auf dem Router mit IP-Tables einen Zähler ein.
Ich richte eine Filterkette (Chain) ein, die keine Filterregeln enthält, sondern einfach nur den Traffic zurück an die aufrufende Kette gibt. Dann lese ich mittels eines Cron-Jobs den Bytecount in dieser Kette aus und setz ihn auf 0. Der ausgelesene Wert wird in ein Logfile weggeschrieben. Schließlich wird zum Auswerten das Logfile mittels awk aufsummiert.
Das Problem ist nur: der Router ist kein Linux-Router (*schäm*) sondern ein Hardwarerouter. Netgear RP614.
Du kannst das genauso lokal lösen. Die Vorgehensweise ist die gleiche, mußt nur die entsprechenden iptables-Regeln anpassen, die den Traffic an den zaehler übergeben. Beispielsweise so: # am Anfang von INPUT den gesamten eingehenden Traffic, der nicht aus dem LAN # kommt, zählen iptables -I INPUT 1 ! -s 192.168.1.0/24 -j zaehler # am Ende von OUTPUT den gesamten ausgehenden Traffic, der nicht ins LAN geht, # zählen iptables -A OUTPUT ! -d 192.168.1.0/24 -j zaehler Noch was: wenn Du z.B. auf einen lokalen Proxy zugreifst und der seinerseits Traffic generiert, funktioniert die Methode natürlich nicht. In dem Fall mußt Du das Problem auf dem Proxy lösen.
Also muss ich das lokal auf meinem Rechner lösen. Die Idee mit der Chain ist gut, nur brauch ich das jetzt für meinen Rechner. Es soll der Traffic zum und vom Router aufgezeichnet werden (Router:192.168.0.1, mein Rechner: 192.168.0.10)
Gibt es gute Lektüre für iptables und Einsteiger in diesem Thema?
http://netfilter.org/documentation/index.html http://www.netfilter.org/documentation/HOWTO/de/packet-filtering-HOWTO.html -- Erhard Schwenk Akkordeonjugend Baden-Württemberg - http://www.akkordeonjugend.de k-itx it-dienstleistungen - http://www.k-itx.net
Hallo Erhard! Erhard Schwenk schrieb:
Ich richte eine Filterkette (Chain) ein, die keine Filterregeln enthält, sondern einfach nur den Traffic zurück an die aufrufende Kette gibt. Dann lese ich mittels eines Cron-Jobs den Bytecount in dieser Kette aus und setz ihn auf 0. Der ausgelesene Wert wird in ein Logfile weggeschrieben. Schließlich wird zum Auswerten das Logfile mittels awk aufsummiert.
Das Problem ist nur: der Router ist kein Linux-Router (*schäm*) sondern ein Hardwarerouter. Netgear RP614.
Du kannst das genauso lokal lösen. Die Vorgehensweise ist die gleiche, mußt nur die entsprechenden iptables-Regeln anpassen, die den Traffic an den zaehler übergeben. Beispielsweise so:
# am Anfang von INPUT den gesamten eingehenden Traffic, der nicht aus dem LAN
Hm. Das LAN wird über das integrierte Switch angesprochen. Der Router hat 192.168.0.1, alle Clients haben was zwischen 192.168.0.2 und 192.168.0.100. Mein Rechner hängt da als 192.168.0.10 drin. Ich denke mal, dass 192.168.0.1 sehr wohl zum LAN zählt. Zählt der das dann richtig so?
# kommt, zählen iptables -I INPUT 1 ! -s 192.168.1.0/24 -j zaehler
# am Ende von OUTPUT den gesamten ausgehenden Traffic, der nicht ins LAN geht, # zählen iptables -A OUTPUT ! -d 192.168.1.0/24 -j zaehler
Noch was: wenn Du z.B. auf einen lokalen Proxy zugreifst und der seinerseits Traffic generiert, funktioniert die Methode natürlich nicht. In dem Fall mußt Du das Problem auf dem Proxy lösen.
Also muss ich das lokal auf meinem Rechner lösen. Die Idee mit der Chain ist gut, nur brauch ich das jetzt für meinen Rechner. Es soll der Traffic zum und vom Router aufgezeichnet werden (Router:192.168.0.1, mein Rechner: 192.168.0.10)
Der Router (s.o.) ist Switch und Gateway, er ist direkt am Modem angeschlossen und stellt die inet-verbindung her. Danke für den Lesestoff. Ich kämpf mich mal durch. Danke für die Arbeit Martin Ereth
Quoting Martin Ereth
Hallo Erhard!
Erhard Schwenk schrieb: Ich richte eine Filterkette (Chain) ein, die keine Filterregeln enthält, sondern einfach nur den Traffic zurück an die aufrufende Kette gibt. Dann lese ich mittels eines Cron-Jobs den Bytecount in dieser Kette aus und setz ihn auf 0. Der ausgelesene Wert wird in ein Logfile weggeschrieben. Schließlich wird zum Auswerten das Logfile mittels awk aufsummiert.
Das Problem ist nur: der Router ist kein Linux-Router (*schäm*) sondern ein Hardwarerouter. Netgear RP614.
Du kannst das genauso lokal lösen. Die Vorgehensweise ist die gleiche, mußt nur die entsprechenden iptables-Regeln anpassen, die den Traffic an den zaehler übergeben. Beispielsweise so:
# am Anfang von INPUT den gesamten eingehenden Traffic, der nicht aus dem LAN
Hm. Das LAN wird über das integrierte Switch angesprochen. Der Router hat 192.168.0.1, alle Clients haben was zwischen 192.168.0.2 und 192.168.0.100. Mein Rechner hängt da als 192.168.0.10 drin. Ich denke mal, dass 192.168.0.1 sehr wohl zum LAN zählt. Zählt der das dann richtig so?
Ja. Die Pakete kommen ja erstmal nicht vom Switch, sondern vom absendenden Rechner. Traffic, der aus dem LAN kommt, gehört nicht in die Rechnung - ausgenommen irgendwelche Proxies, die auf dem Switch laufen, dazu brauchst Du aber immer ne extra Lösung, weil der Traffic, den Dein Rechner mit dem Proxy hat, nicht identisch ist mit dem, den der Proxy nach Außen schiebt (z.B. bei einem Cache Hit eines HTTP-Proxy wäre der externe Traffic immer noch sehr klein, obwohl vielleicht ein paar MB Daten aus dem Proxy-Cache kommen). Diese Trafficzuordnung ist ohnehin nicht unproblematisch. Wer von Euch kriegt z.B. den Traffic berechnet, wenn irgendjemand den Router von Außen mit nem Floodping zuschmeißt?
Der Router (s.o.) ist Switch und Gateway, er ist direkt am Modem angeschlossen und stellt die inet-verbindung her.
Das macht gar nix. Die Frage ist nur, ob der Router nur maskiert (dann funktioniert die genannte Methode) oder ob er z.B. nen lokalen DNS, nen lokalen SMTP-Forwarder oder nen lokalen HTTP Proxy hat. Dann klappt die genannte Methode nicht mehr und Du hast das Problem, wie der Proxy-Traffic gemessen und zugeordnet werden kann (was allerdings absolut nichttrivial bis ziemlich uneindeutig ist - z.B. ist es alles andere als fair, wenn der erste Abrufer einer HTTP-Seite den Traffic voll draufgeknallt kriegt und der zweite weil sie ja dann schon im Cache liegt praktisch nix mehr!) Letztlich stellt sich auch die Frage, ob Ihr nicht einfacher ein paar Euro mehr in einen Tarif mit 2-5 GB Transfervolumen schiebt - wenn Du nicht grad pausenlos exzessives Filesharing betreibst, sollte das für zwei Leute ewig reichen. -- Erhard Schwenk Akkordeonjugend Baden-Württemberg - http://www.akkordeonjugend.de k-itx it-dienstleistungen - http://www.k-itx.net
Erhard Schwenk schrieb:
Quoting Martin Ereth
: [...] Ja. Die Pakete kommen ja erstmal nicht vom Switch, sondern vom absendenden Rechner. Traffic, der aus dem LAN kommt, gehört nicht in die Rechnung - ausgenommen irgendwelche Proxies, die auf dem Switch laufen, dazu brauchst Du aber immer ne extra Lösung, weil der Traffic, den Dein Rechner mit dem Proxy hat, nicht identisch ist mit dem, den der Proxy nach Außen schiebt (z.B. bei einem Cache Hit eines HTTP-Proxy wäre der externe Traffic immer noch sehr klein, obwohl vielleicht ein paar MB Daten aus dem Proxy-Cache kommen). Diese Trafficzuordnung ist ohnehin nicht unproblematisch. Wer von Euch kriegt z.B. den Traffic berechnet, wenn irgendjemand den Router von Außen mit nem Floodping zuschmeißt?
Der Router (s.o.) ist Switch und Gateway, er ist direkt am Modem angeschlossen und stellt die inet-verbindung her.
Das macht gar nix. Die Frage ist nur, ob der Router nur maskiert (dann funktioniert die genannte Methode) oder ob er z.B. nen lokalen DNS, nen lokalen SMTP-Forwarder oder nen lokalen HTTP Proxy hat. Dann klappt die genannte Methode nicht mehr und Du hast das Problem, wie der Proxy-Traffic gemessen und zugeordnet werden kann (was allerdings absolut nichttrivial bis ziemlich uneindeutig ist - z.B. ist es alles andere als fair, wenn der erste Abrufer einer HTTP-Seite den Traffic voll draufgeknallt kriegt und der zweite weil sie ja dann schon im Cache liegt praktisch nix mehr!)
Letztlich stellt sich auch die Frage, ob Ihr nicht einfacher ein paar Euro mehr in einen Tarif mit 2-5 GB Transfervolumen schiebt - wenn Du nicht grad pausenlos exzessives Filesharing betreibst, sollte das für zwei Leute ewig reichen.
Hallo Erhard! Also werde ich das wie von Dir beschrieben auf meinem Rechner versuchen. Bei Problemen gibt es mal wieder ne Mail. Danke. Nachdem mein Papa den Vertrag mit der Telekom gekündigt hat, und wir komplett auf Arcor umgestiegen sind, ergibt sich das Problem, dass Arcor eine Mindestvertragslaufzeit von 24 Monaten angesetzt hat. Man kann den Tarif in dieser Zeit nur upgraden, sonst nix. Der nächsthöhere Tarif wäre DSL-Flat mit DSL 2000 (Speed), was dann insgesamt im Monat 10 Euro mehr kostet. Das ist mein Papa nicht bereit zu zahlen. Das DSL-Modem lässt keine andere Verbindung als zu Arcor zu. Danke für dein Ohr Martin Ereth
Hallo Erhard! Nun habe ich folgende Befehle ausgeführt: iptables -N zaehler iptables -I INPUT 1 ! -s 192.168.0.0/24 -j zaehler iptables -A OUTPUT ! -d 192.168.0.0/24 -j zaehler Danach habe ich etwas im Internet gesurft, meine e-Mails abgeholt. die Ausgabe von den iptables zeigt: ------snip Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 142 53553 zaehler all -- any any !localhost/24 anywhere 2500 237K ACCEPT all -- lo any anywhere anywhere 21788 20M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 329 40825 input_ext all -- eth0 any anywhere anywhere 0 0 input_ext all -- any any anywhere anywhere 0 0 LOG all -- any any anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-IN-ILL-TARGET ' 0 0 DROP all -- any any anywhere anywhere ------snip Chain OUTPUT (policy ACCEPT 3 packets, 378 bytes) pkts bytes target prot opt in out source destination 2500 237K ACCEPT all -- any lo anywhere anywhere 26300 2780K ACCEPT all -- any any anywhere anywhere state NEW,RELATED,ESTABLISHED 3 378 LOG all -- any any anywhere anywhere limit: avg 3/min burst 5 LOG level warning tcp-options ip-options prefix `SFW2-OUT-ERROR ' 0 0 zaehler all -- any any anywhere !localhost/24 -----snip Chain zaehler (2 references) pkts bytes target prot opt in out source destination ----snip Die INPUT-Chain hat ja in der ersten Regel Pakete gezählt, und auch Volumen. Super. Aber die OUTPUT-Chain? 0 kann nicht stimmen. Ich hab ja meine E-Mail abgerufen. Wenn ich jetzt die OUTPUT-Regel von ganz unten nach ganz oben schiebe, zählt er dann richtig? Oder muss ich das anders machen? Danke für die Arbeit Martin Ereth
Am Dienstag, den 03.01.2006, 15:33 +0100 schrieb Martin Ereth:
Gibt es gute Lektüre für iptables und Einsteiger in diesem Thema?
Moin Martin, ich habe auch vor kurzem gesucht und bin dabei unter anderem auf dieses Tutorial gestoßen: http://www.pl-forum.de/t_netzwerk/iptables.html - ausnahmsweise deutsch. Gruß, Lars
Am Dienstag, 3. Januar 2006 15:02 schrieb Martin Ereth:
Hallo!
Ein gesundes neues Jahr!
Ich habe folgendes Problem: Ich muss das Volumen von meinem Rechner (Suse 10) zum Router aufzeichnen. Mein Papa hat einen DSL-Tarif von Arcor mit 1000MB. Nun darf ich die Hälfte verbrauchen, was darüber ist, muss ich zahlen. Nun muss ich ihn nachweisen, dass nicht alles, was drüber ist, von mir ist.
Ich möchte also den ganzen Traffic zu dieser IP von Router aufzeichnen, nicht aber zu anderen Rechnern im Netzwerk. Hat jemand eine Möglichkeit, eine Logdatei oder ähnliches aufzuzeichnen?
Zur lokalen Situation: Router ist immer an, hat auch intern immer die gleiche IP, mein Rechner ist tagsüber öfters an, das DSL-Modem ist manchmal den ganzen Tag an, manchmal auch nur eine Stunde. Der Router hat auch einen integrierten Switch.
Danke für die Arbeit
Martin Ereth Hallo Martin Ich benutze hierfür das Prg gkrellm... dort kannst du deine Netzwerkkarte dafür einrichten Bei mir ergibt das eine tägliche, wöchendliche und monatliche Auswertung. Desweiteren gibt es noch ein Prg KTrafficAnalyzer (mal googeln), das sich hierfür auch gut nutzen lässt....kenn ich aber nicht so gut. bye GA -- ________Gerald_______________________________________________ __303487___http://counter.li.org__
Gerald schrieb:
Ich benutze hierfür das Prg gkrellm... dort kannst du deine Netzwerkkarte dafür einrichten Bei mir ergibt das eine tägliche, wöchendliche und monatliche Auswertung. Desweiteren gibt es noch ein Prg KTrafficAnalyzer (mal googeln), das sich hierfür auch gut nutzen lässt....kenn ich aber nicht so gut.
Hallo Gerald! Das Problem ist doch, dass ich über die Netzwerkkarte nicht nur den Switch anspreche, sondern auch das restliche LAN. Also zählt doch ktrafficanalyzer/gkrellm (öder ähnliches) den ganzen Traffic über diese Karte, oder nicht? Ich bräuchte das aber für nur eine Adresse. Viele Grüße Martin Ereth
Martin Ereth schrieb:
Ich möchte also den ganzen Traffic zu dieser IP von Router aufzeichnen, nicht aber zu anderen Rechnern im Netzwerk. Hat jemand eine Möglichkeit, eine Logdatei oder ähnliches aufzuzeichnen?
Hallo Martin, sehr schnell und einfach geht das mit ifconfig. Da gibt es die benötigten angaben fuer jedes Device. Musst du nur noch per Script auslesen und in ein Logfile schreiben. Da steht dann zB. sowas drin. RX bytes:202830834 (193.4 MiB) TX bytes:6289444 (5.9 MiB) Gruß Ingo
Ingo Holewczuk schrieb:
Martin Ereth schrieb:
Ich möchte also den ganzen Traffic zu dieser IP von Router aufzeichnen, nicht aber zu anderen Rechnern im Netzwerk. Hat jemand eine Möglichkeit, eine Logdatei oder ähnliches aufzuzeichnen? Hallo Martin, sehr schnell und einfach geht das mit ifconfig. Da gibt es die benötigten angaben fuer jedes Device. Musst du nur noch per Script auslesen und in ein Logfile schreiben. Da steht dann zB. sowas drin. RX bytes:202830834 (193.4 MiB) TX bytes:6289444 (5.9 MiB)
Hallo Ingo! Das Problem ist doch, dass ich über die Netzwerkkarte nicht nur den Switch anspreche, sondern auch das restliche LAN. Also zählt doch ifconfig (öder ähnliches) den ganzen Traffic über diese Karte, oder nicht? Ich bräuchte das aber für nur eine Adresse. Viele Grüße Martin Ereth
participants (5)
-
Erhard Schwenk
-
Gerald
-
Ingo Holewczuk
-
Martin Ereth
-
speicherplatz4you.de Webmaster