使用 iproutes2 的多个默认路由

使用 iproutes2 的多个默认路由

ip rules我对默认路由的语义感到非常困惑。

有时,我可以使用不同的网关拥有多个默认路由:

# ip route
default via 10.0.0.4 dev eth0  proto static  metric 1024 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 
# ip route replace default via 192.168.12.1
# ip route
default via 192.168.12.1 dev rath 
default via 10.0.0.4 dev eth0  proto static  metric 1024 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

在其他时候,我不能:

# ip route del default via 10.0.0.4 dev eth0
# ip route
default via 192.168.12.1 dev rath 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

# ip route add default via 10.0.0.4
RTNETLINK answers: File exists

# ip route
default via 192.168.12.1 dev rath 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

但是如果我删除默认路由,它就会被改变(或者更有可能的是,其他默认规则变得可见):

# ip route del default via 192.168.12.1
# ip route
default via 10.0.0.4 dev eth0  proto static  metric 1024 
10.0.0.0/16 dev eth0  proto kernel  scope link  src 10.0.0.129 
45.79.69.51 via 10.0.0.4 dev eth0 
169.254.0.0/16 dev rath  scope link  metric 1000 
192.168.12.0/24 dev rath  proto kernel  scope link  src 192.168.12.2 

这是怎么回事?为什么不ip route replace default更改默认路由?为什么不ip route show总是显示所有默认路由?

答案1

在您的设置中,您有两种不同的默认路由(有和无度量)。

您可以使用不同的度量标准将多条路由发送到同一目标。 ip route replace如果此路由不存在,则添加路由,否则替换路由。在您的例子中,您没有无度量标准的默认路由,并且ip route replace default via 192.168.12.1已添加无度量标准的默认路由。

再说一遍:到同一目的地,有度量的路由和没有度量的路由是不同的路由!

+------------------+------------------------+------------------+
| Command          | route to               |route to same dst |
|                  | same dst exists        | doesn't exists   |
+------------------+------------------------+------------------+
| ip route add     |  error                 |  ok              |
| ip route change  |  ok                    |  error           |
| ip route replace |  ok                    |  ok              |
| ip route del     |  ok                    |  error           |
+------------------+------------------------+------------------+

相关内容