无法删除其中一条默认路由

无法删除其中一条默认路由

在我的 Linux 服务器(4.9.9_1 内核,x86_64)中enp5s0有一个静态 IP 192.168.1.30,并enp9s0通过 分配一个地址dhcpcd

# ip route ls
default via 192.168.1.1 dev enp5s0 src 192.168.1.30 metric 202 
default via 39.53.131.254 dev enp9s0 src 39.53.131.237 metric 203 
39.53.130.0/23 dev enp9s0 proto kernel scope link src 39.53.131.237 metric 203 
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.30 metric 202

我不明白的第一件事是为什么系统设置了两条默认路线,尽管根据 优先考虑了一条metric

我想要做的是删除第二条默认路由via 39.53....,添加另一个路由表,并ip rule为其设置添加相同的默认路由,但为新的路由表。

什么时候:

# ip route del default via 39.53.131.254 dev enp9s0
# echo $?
0

但路由表似乎没有改变:

    # ip route l
    default via 192.168.1.1 dev enp5s0 src 192.168.1.30 metric 202 
    default via 39.53.131.254 dev enp9s0 src 39.53.131.237 metric 203
39.53.130.0/23 dev enp9s0 proto kernel scope link src 39.53.131.237 metric 203 
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.30 metric 202

之后ip route flush cache

# ip route show cache

什么也没显示。

我应该怎么办?

答案1

在 Freenode IRC ##linux 频道上寻求帮助后。由于dhcpcd负责 的 IP 地址enp9s0,清除通过该接口的路由的方法是刷新设备: ip addr flush dev enp9s0

答案2

有趣的是,但多年以后,我在 Debian Buster 中遇到了类似的情况。

我的默认路由经常出现问题,原因是 systemd connman.service。

最后我找到了日志:

journalctl -n -u connman.service
br0 {add} route 192.168.1.0 gw 0.0.0.0 scope 253 <LINK>
br0 {add} route 0.0.0.0 gw 192.168.1.1 scope 0 <UNIVERSE>
enp5s0 {add} address 169.254.208.64/16 label enp5s0 family 2
enp5s0 {add} route 169.254.0.0 gw 0.0.0.0 scope 253 <LINK>
enp5s0 {add} route 0.0.0.0 gw 0.0.0.0 scope 253 <LINK>

就这样,互联网消失了。

通过完全删除服务来修复:

systemctl stop connman.service
systemctl disable connman.service
systemctl mask connman.service

相关内容