Linux - 查找預設路由的命中
與此類似的問題 -路由表命中?- 除了我不使用 iptables 並在核心路由表中尋找正常的路由命中。
但是我的案例是查找通過防火牆中的預設路由轉發了多少數據包,以確保在我刪除它之前它是無用的。對上述問題的回答包括檢查記憶體,但是否有可能轉發某些數據包而不會命中記憶體?
此外,在檢查記憶體後,推薦的命令 (
route -neeC
) 剛剛終止,我想長時間(約 24 小時)檢查預設路由“查找命中”。關於如何做到這一點的任何建議?乾杯。
IPv4 的 linux 路由記憶體已在Linux 3.6中刪除(僅保留使用優化的LPC-trie)。因此,具有 2012 年之後作業系統的 Linux 系統無法獲取路由記憶體統計資訊。
標記預設路由的使用的一種簡單方法是在此路由上放置一個領域值。匹配此路由的數據包(而不是使用同一網關的更具體的路由)將被辨識為具有給定領域值。因此,如果預設路由是 192.0.2.1 via eth0,則路由將設置如下:
ip route add default via 192.0.2.1 proto static realm 10
或者,您可以通過替換為 來更改以前的預設路由(無領域)
add
,change
而不會中斷。然後,這個領域標籤至少可以在其他兩個網路子系統中重用:
tc filter ... route
或 nftables’nft ... meta rtclassid
。交通管制
tc
相當粗糙,通常在介面級別工作。附加過濾器的最簡單方法是使用prio
qdisc,這是最簡單的有類 qdisc。它的特定優先級屬性實際上不會被使用。所以按照前面的例子:tc qdisc add dev eth0 root handle 1: prio
現在添加帶有空操作的過濾器(如果需要,還可以使用pref order 和continue控制項以允許其他類似的過濾器),只是為了對其進行統計:
tc filter add dev eth0 parent 1: protocol ip pref 1 route to 10 action continue
現在每個匹配路由領域 10 的 ip 數據包,都將使用 顯示在統計資訊中
tc -s filter show dev eth0
。例子:# 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
注意:轉發的和本地發起的數據包都是匹配的,這可能是測量的問題。
表格
這裡的nftables不會用於做任何類型的防火牆,而只是用於增加一些計數器。
nftables只安裝請求的 netfilter 的鉤子,而不是所有可用的鉤子,因此通常比iptables佔用更少的空間。在這裡,我們只需要一個匹配領域的規則——這就是rtclassid表達式的作用——上面有一個計數器。如果它用於本地發起的數據包,那麼只需使用輸出掛鉤。forward hook 將只匹配轉發的數據包。
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
例如稍後會給出:
# nft list ruleset table ip stats { chain forward { type filter hook forward priority filter; policy accept; meta rtclassid 10 counter packets 1453 bytes 118264 } }
僅當將值儲存在命名對像中時才可能將值歸零,規則集將改為(使用 載入
nft -f file
):table ip mystats { counter defaultroutecount { } chain forward { type filter hook forward priority filter; policy accept; meta rtclassid 10 counter name "defaultroutecount" } }
然後
nft list counters
ornft reset counters
將顯示(或顯示並重置)其內容。