Linux

我可以在 Linux 上擁有多少個自定義路由表?

  • January 31, 2014

我一直在 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 核心而言,最大表為 0xFFFFFFFF(來自 rtnetlink.h)。但是,iproute2 在其過濾器中使用有符號整數進行查找,因此在 2^31 時,它認為您指定了無效表並預設顯示表 255。

引用自:https://serverfault.com/questions/315705