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