web-dev-qa-db-ja.com

Linuxではいくつのカスタムルートテーブルを使用できますか?

Linuxでカスタムルートテーブルを使用していて、「ip route」コマンドのドキュメントと動作の一部に少し混乱しています。有効な値は0〜255に加えて、/ etc/iproute2/rt_tablesで定義されている名前だけであるようです。

255 local
254 main
253 default
0   unspec

これにより、カスタムテーブル用に1-252が残されます。未定義のテーブル名を使用しようとすると、エラーが発生します。

$ ip route show table Kermit
Error: argument "Kermit" is wrong: table id value is invalid

ただし、255をはるかに超える数値をエラーなしで使用できるようです。

$ ip route show table 1000
[no output]
$ ip route add 10.10.10.0/24 dev eth0 table 1000
[no output]
$ ip route show table 1000
10.10.10.0/24 dev eth0  scope link

ある時点で、事態はさらに奇妙になります。 maxint(2 ^ 31)で、ローカルテーブル(255)に「オーバーフロー」します。

$ ip route show table 2147483647
[no output]
$ ip route show table 2147483648
[exact output of table 255 (local)]

誰が何が起こっているのか説明できますか?実際に使用できるmaxintカスタムルーティングテーブルはありますか?

12
Bob

2.6カーネルに関する限り、最大テーブルは(rtnetlink.hから)0xFFFFFFFFです。ただし、iproute2はフィルターで符号付き整数を使用してルックアップを行うため、2 ^ 31で無効なテーブルを指定したと見なされ、デフォルトでテーブル255が表示されます。

8
Ciclamino