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