我一直在使用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在它的filter中使用一个有符号的整数来进行查找,所以在2 ^ 31它认为你指定了一个无效的表,并默认显示你的表255。
那么,我不能评论,但我想注意以下几点:
~# ip route list table 79456894975 ~# ip route list table 79456894976 ... stuff that appears to be table 0 ...
所以看起来79456894976是唯一最高的路由表号。
此外,数字> 79456894976似乎都显示路线表0.我不知道限制进入,但似乎是实际的限制。