当涉及到默认路由时,我很困惑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总是显示所有的默认路由?
在你的设置中,你有两个不同的默认路由(有和没有度量)。
您可以使用不同度量标准的多个路由到相同的目标目标。 ip route replace会添加路由,如果这条路由不存在,则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 | +------------------+------------------------+------------------+