正如标题所述,从主路由表中删除规则后,我无法添加任何路由,直到我这样做
service network restart
或者
ifup eth0
重现此问题:
ip route list table main
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.47
default via 192.168.2.1 dev eth0
我可以删除并添加默认路由
#ip route del default
#ip route list
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.47
#ip route add default via 192.168.2.1
#ip route list
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.47
default via 192.168.2.1 dev eth0
但是,如果我删除 192.168.2.0/24 路由,我就无法再添加任何路由。
# ip route del 192.168.2.0/24
# ip route list
default via 192.168.2.1 dev eth0
# ip route add 192.168.2.0/24
RTNETLINK answers: No such device
# ip route add 192.168.2.0/24 via 0.0.0.0
RTNETLINK answers: No such device
# ip route add 192.168.2.0/24 src 192.168.2.47
RTNETLINK answers: No such device
# ip route list
default via 192.168.2.1 dev eth0
答案1
原因是您实际上有两个路由表条目。首先是默认条目,它指向 192.168.2.0/24 网络中的网关 192.168.2.1,然后是网络接口eth0
(即 192.168.2.0/24)的网络路由。
如果删除活动网络路由,则实际上会将其关闭。在此特定情况下,删除路由 192.168.2.0/24 意味着您没有可用的路由接口,因此添加路由将失败。
总结:您只是做错了,或者至少顺序错了。如果您在 192.168.2.0/24 网络中有一个活动接口,请不要删除该网络。
答案2
最后我终于找到了这个问题。
基本上,在添加路线时,我们还需要定义范围和原型。
就我而言,我无法将其添加回来的原因是我没有指定范围。范围定义了网络中 IP 的可见性。它可以是主机、链接 [仅限于 LAN]、全局等。
因此,添加它的正确语法是
ip route add 192.168.2.0/24 via 0.0.0.0 dev eth0 scope link