为什么在 Ubuntu 中没有 localhost 的路由?

Bal*_*Rau 13 routing

$ sudo docker run --rm ubuntu:14.04 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
Run Code Online (Sandbox Code Playgroud)

这是否意味着 127.0.0.0/8 被路由到 172.17.42.1 的网关而不是环回设备?

wur*_*tel 26

route命令已弃用,不应再使用。

新方法是使用 iproute 命令集,这些命令都是通过ip后跟一个对象来调用的。例如:

$ ip route show
default via 192.168.1.254 dev eth0 
192.168.0.0/23 dev eth0  proto kernel  scope link  src 192.168.1.27 
Run Code Online (Sandbox Code Playgroud)

现在,我听到你说,这基本上是相同的信息!是的,但这不是故事的全部。在路由表(是的,复数)之前是规则表:

$ ip rule show
    0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 
Run Code Online (Sandbox Code Playgroud)

我们之前查看的main路由表是路由表。您的问题涉及local路由表,其中包含与本地连接相关的所有路由。该表可以显示如下:

$ ip ro sh 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
Run Code Online (Sandbox Code Playgroud)

(您可以缩写ip选项/参数,只要它们仍然是唯一的,因此ip ro ship route show.)

在这里您可以看到环回路由。

您可以使用这种基于策略的路由做各种美妙的事情,我建议您阅读Matthew G. Marsh 的Policy Routing with Linux以获取您需要的所有信息。

  • @PeterCordes 实际上,“local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1”这一行涵盖了到 127.1.1.1 的路线;这意味着以 127. 开头的任何内容都是本地的。 (4认同)