Le cache de routage Linux pour IPv4 a été supprimé dans Linux 3.6 (ne laissant que l'utilisation d'un LPC-trie optimisé). Il n'y a donc aucun moyen avec un système Linux avec un système d'exploitation postérieur à 2012 d'obtenir le cache de routage statistiques.
Un moyen facile de taguer l'utilisation de la route par défaut consiste à placer un domaine valeur sur cet itinéraire. Un paquet correspondant à cette route (plutôt qu'une route plus spécifique utilisant la même passerelle) sera identifié comme étant avec la valeur de domaine donnée. Donc, si la route par défaut était 192.0.2.1 via eth0 , l'itinéraire serait défini par exemple comme ceci :
ip route add default via 192.0.2.1 proto static realm 10
Ou vous pouvez modifier une route par défaut précédente (sans domaine) en remplaçant add
avec change
, sans interruption.
Cette balise de domaine peut ensuite être réutilisée au moins dans deux autres sous-systèmes réseau :tc filter ... route
ou nft ... meta rtclassid
de nftables .
Contrôle du trafic
tc
est assez grossier et fonctionne généralement au niveau de l'interface. Le moyen le plus simple d'attacher un filtre est d'utiliser le prio
qdisc, le plus simple des qdisc par classe. Ses propriétés prioritaires spécifiques ne seront pas réellement utilisées. Donc, en suivant l'exemple précédent :
tc qdisc add dev eth0 root handle 1: prio
Ajoutez maintenant le filtre avec une action vide (et avec un pref commande et un continuer contrôle pour autoriser des filtres similaires supplémentaires si nécessaire), juste pour avoir des statistiques dessus :
tc filter add dev eth0 parent 1: protocol ip pref 1 route to 10 action continue
Désormais, chaque paquet IP correspondant au domaine de route 10 sera affiché dans les statistiques en utilisant tc -s filter show dev eth0
. Exemple :
# 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
Remarque :et ont tous deux été transférés les paquets d'origine locale correspondent, ce qui pourrait être un problème pour les mesures.
nfttables
nfttables ici ne sera pas utilisé pour faire n'importe quel type de pare-feu, mais juste pour incrémenter certains compteurs.
nfttables installe uniquement les crochets de netfilter demandés, plutôt que tous disponibles, ayant ainsi généralement une empreinte moindre que iptables . Ici, nous avons juste besoin d'une règle correspondant au domaine - c'est le rôle du rtclassid expression - avec un compteur dessus. S'il s'agit de paquets d'origine locale, utilisez simplement la sortie accrocher. Le hook de transfert ne correspondra qu'aux paquets transférés.
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
Ce qui donnerait par exemple plus tard :
# nft list ruleset
table ip stats {
chain forward {
type filter hook forward priority filter; policy accept;
meta rtclassid 10 counter packets 1453 bytes 118264
}
}
La mise à zéro de la valeur n'est possible que si elle est stockée dans un objet nommé, le jeu de règles serait à la place (à charger avec nft -f file
):
table ip mystats {
counter defaultroutecount { }
chain forward {
type filter hook forward priority filter; policy accept;
meta rtclassid 10 counter name "defaultroutecount"
}
}
Alors nft list counters
ou nft reset counters
affichera (ou affichera et réinitialisera) son contenu.