Der Linux-Routing-Cache für IPv4 wurde in Linux 3.6 entfernt (es bleibt nur die Verwendung eines optimierten LPC-Trie). Es gibt also keine Möglichkeit mit einem Linux-System mit einem OS von nach 2012 an den Routing-Cache zu kommen Statistiken.
Eine einfache Möglichkeit zum Taggen Die Verwendung der Standardroute besteht darin, einen Realm zu platzieren Wert auf dieser Strecke. Ein Paket, das zu dieser Route passt (und nicht zu einer spezifischeren Route, die dasselbe Gateway verwendet), wird als Paket mit dem angegebenen Bereichswert identifiziert. Wenn also die Standardroute 192.0.2.1 über eth0 wäre , würde die Route beispielsweise so eingestellt:
ip route add default via 192.0.2.1 proto static realm 10
Oder Sie könnten eine vorherige Standardroute (ohne Realm) ändern, indem Sie add
ersetzen mit change
, ohne Unterbrechung.
Dieses Realm-Tag kann dann mindestens in zwei anderen Netzwerk-Subsystemen wiederverwendet werden:tc filter ... route
oder nft ... meta rtclassid
von nftables .
Verkehrskontrolle
tc
ist ziemlich grob und arbeitet normalerweise auf der Schnittstellenebene. Der einfachste Weg, einen Filter hinzuzufügen, ist die Verwendung von prio
qdisc, die einfachste klassengerechte qdisc. Seine spezifischen Prioritätseigenschaften werden nicht wirklich verwendet. Also nach dem vorherigen Beispiel:
tc qdisc add dev eth0 root handle 1: prio
Fügen Sie nun den Filter mit einer leeren Aktion hinzu (und mit einem pref bestellen und weiter Kontrolle, um bei Bedarf zusätzliche ähnliche Filter zuzulassen), nur um Statistiken darüber zu haben:
tc filter add dev eth0 parent 1: protocol ip pref 1 route to 10 action continue
Jetzt wird jedes IP-Paket, das zu Route Realm 10 passt, in der Statistik angezeigt, indem tc -s filter show dev eth0
verwendet wird . Beispiel:
# tc -s filter show dev eth0
filter parent 1: protocol all pref 1 route chain 0
filter parent 1: protocol all pref 1 route chain 0 fh 0xffff000a to 10
action order 1: gact action continue
random type none pass val 0
index 1 ref 1 bind 1 installed 48 sec used 4 sec
Action statistics:
Sent 12230 bytes 79 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
Hinweis:beide werden an und weitergeleitet lokal erzeugte Pakete stimmen überein, was ein Problem für Messungen sein könnte.
nftables
nftables hier wird nicht für irgendwelche Firewalls verwendet, sondern nur um einige Zähler zu erhöhen.
nftables installiert nur die angeforderten Netfilter-Hooks, anstatt alle verfügbaren, und hat daher normalerweise einen geringeren Platzbedarf als iptables . Hier brauchen wir nur eine zum Realm passende Regel - das ist die Rolle der rtclassid Ausdruck - mit einem Zähler darauf. Wenn es sich um lokal erzeugte Pakete handelt, verwenden Sie einfach die Ausgabe Haken. Der Forward-Hook passt nur zu weitergeleiteten Paketen.
nft add table ip mystats
nft add chain ip mystats forward '{ type filter hook forward priority 0; policy accept; }'
nft add rule ip mystats forward meta rtclassid 10 counter
Was würde zB später geben:
# nft list ruleset
table ip stats {
chain forward {
type filter hook forward priority filter; policy accept;
meta rtclassid 10 counter packets 1453 bytes 118264
}
}
Das Nullen des Werts ist nur möglich, wenn er in einem benannten Objekt gespeichert wird, der Regelsatz wäre stattdessen (zu laden mit nft -f file
):
table ip mystats {
counter defaultroutecount { }
chain forward {
type filter hook forward priority filter; policy accept;
meta rtclassid 10 counter name "defaultroutecount"
}
}
Dann nft list counters
oder nft reset counters
wird seinen Inhalt anzeigen (oder anzeigen und zurücksetzen).