web-dev-qa-db-ja.com

すべてのルートテーブルを一覧表示する

すべてのルートテーブルの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を使用してテーブルをフラッシュできることを知っています。 localmain、およびdefault以外のすべてのテーブルをフラッシュできるようにしたいのですが。したがって、既存のテーブルを一覧表示できるようにしたいと考えています。

私は人々がcat /etc/iproute2/rt_tablesを使用するのを見てきましたが、それだけが生成されます:

#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep

現在存在するすべてのテーブル名を取得するにはどうすればよいですか?前もって感謝します!

13
nic

すべてのテーブルのすべてのルーティングエントリを一覧表示する方法があります。 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]"
19
nic

現在存在するすべてのテーブル名を取得するにはどうすればよいですか?

ファイル /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ビットは多くのスペースをカバーするため、これには永遠に時間がかかります。

5
larsks
(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。

4