路由表按最具体到最不具体的顺序使用。
但是,在Linux上,它比您预期的要复杂一些。首先,存在多个路由表,并且何时使用哪个路由表取决于许多规则。
要获得完整图片:
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ ip route show table local
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 192.168.0.0 dev eth0 proto kernel scope link src 192.168.1.27
local 192.168.1.27 dev eth0 proto kernel scope host src 192.168.1.27
broadcast 192.168.1.255 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table main
default via 192.168.1.254 dev eth0
192.168.0.0/23 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table default
$
该local
表是特殊的路由表,其中包含本地和广播地址的高优先级控制路由。
该main
表是包含所有非策略路由的普通路由表。这也是您可以查看是否只是简单执行ip route show
(或简称为执行ip ro
)的表。我建议不再使用旧route
命令,因为它仅显示main
表格,并且其输出格式有些陈旧。
default
如果以前的默认规则未选择该数据包,则该表为空并且保留用于后处理。
您可以添加自己的表并添加规则以在特定情况下使用这些表。一个示例是您有两个Internet连接,但是必须始终通过一个特定的Internet连接路由一个主机或子网。
《Linux上的策略路由》详细解释了所有这些内容。