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 |
+------------------+------------------------+------------------+