すべてのルートテーブルの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
シェルパイピングマジックを使用すると、次のようにすべてのテーブル名と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]"
現在存在するすべてのテーブル名を取得するにはどうすればよいですか?
ファイル /etc/iproute2/rt_tables
は、システム上のテーブルnamesの唯一のソースです。内部的には、ルーティングテーブルには整数の識別子があります。
残りの質問は少し混乱しています。テーブルがルールによって参照されない場合、システムのルーティングに影響を与えないため、テーブルは事実上「削除」されます。したがって、次のようにすべてのactiveルーティングテーブルをリストできます。
ip rule list | awk '/lookup/ {print $NF}'
これにより、ルーティングルールですべてのlookup
アクションが検索され、ターゲットが出力されます。
ルーティングテーブルは64ビット整数で識別されるようです。システムに影響を与えない非アクティブなものも含めて、ルールを含むすべてのルーティングテーブルを本当に見つけたい場合は、単純に1から2 ^ 64までループを繰り返すことができます。
seq 0 $(echo '2 64 ^ p' | dc) | xargs -iTABLE sh -c 'echo === TABLE ===; ip route show table TABLE'
...しかし、64ビットは多くのスペースをカバーするため、これには永遠に時間がかかります。
(egrep '^\s*[0-9]' /etc/iproute2/rt_tables | awk '{print $2}' | sort -u; ip rule list | awk '/lookup/ {print $NF}' | sort -u; ip route show table all | sed 's/.*\(table.*\)/\1/g' | awk '{if($0 ~ /table/) print $2; else print "main";}' | sort -u) | sort | uniq -c
このコンボにつながるこのスレッドに感謝します。このコンボは、現在ルートを含み、ルールによって参照され、名前が付けられているすべてのルーティングテーブルを表示します。コンテンツを含む各テーブルの横に3があり、参照され、2または3つの条件のうち1つまたは2つが当てはまる場合は1。