Iptables
列出所有路由表
我需要知道如何列出所有路由表的 ID。例如,我可以執行:
ip rule add fwmark 2 table 104 ip route add dev eth0 default via 192.168.3.7 table 104
來電
ip rule list
顯示:0: from all lookup local 32765: from all fwmark 0x2 lookup 104 32766: from all lookup main 32767: from all lookup default
並呼籲
ip route show table 104
顯示:default via 192.168.3.7 dev eth0
如果我隨後呼叫
ip rule del table 104
,則隨後呼叫ip rule list
顯示:0: from all lookup local 32766: from all lookup main 32767: from all lookup default
但是,呼叫
ip route show table 104
仍然顯示:default via 192.168.3.7 dev eth0
我知道我可以使用
ip route flush table 104
. 我希望能夠刷新所有不是local
,main
和default
. 因此,我希望能夠列出現有的表。我見過人們使用
cat /etc/iproute2/rt_tables
,但這只會產生:# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep
我該怎麼做才能獲取目前存在的所有表名?提前致謝!
有一種方法可以列出所有表的所有路由條目。
ip route show table all
使用一些 shell 管道魔術,您可以像這樣提取所有表名和 ID:
ip route show table all | grep "table" | sed 's/.*\(table.*\)/\1/g' | awk '{print $2}' | sort | uniq
或者
ip route show table all | grep -Po 'table \K[^\s]+' | sort -u
如果您只關心數字表名稱,請添加一些 grep 過濾:
ip route show table all | grep "table" | sed 's/.*\(table.*\)/\1/g' | awk '{print $2}' | sort | uniq | grep -e "[0-9]"
或者
ip route show table all | grep -Po 'table \K[^\s]+' | sort -u | grep -e "[0-9]"