Iptables

列出所有路由表

  • November 17, 2021

我需要知道如何列出所有路由表的 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,maindefault. 因此,我希望能夠列出現有的表。

我見過人們使用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]"

引用自:https://serverfault.com/questions/618857