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


12

私は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カスタムルーティングテーブルはありますか?

回答:


8

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


だから、無効な名前はエラーになりますが、無効な整数は255になりますか?また、255は以前の最大値(2.4では多分ですか?)でしたが、カーネル2.6では32ビット数に増加したと思いますか?
ボブ

はい、2.4および2.2の最大値は255でした。
Ciclamino

また、32ビットの値のテーブル255を常に表示することは、計画的な動作ではなく、単なるバグのように見えます。iprouteへの1行のパッチで、4294967290という番号のテーブルを作成して表示することができました。しかし、それはそれほど単純ではないかもしれません。2^ 32テーブルをまだ処理しない他の部分があるかもしれません。
Ciclamino

受け入れました、ありがとう。たぶんあなたはパッチを提出する必要があります:)
ボブ

1
最近のツールでは、2 ^ 32-1までのテーブル値を許可する傾向があります(例:($ ip -V ip utility, iproute2-ss180813 $ ip route list table 4294967296 Error: argument "4294967296" is wrong: table id value is invalid $ ip route list table 4294967295出力なし)。以前の動作は「unspec」テーブル0(255ではない)を表示することでしたが、0は255(および他の表)
AB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.