使用 nmcli 添加的静态路由未显示

使用 nmcli 添加的静态路由未显示
root@Andromeda:~# nmcli con show "Wired connection 1" | grep -i routes
ipv4.routes:                            --

然后 ...

root@Andromeda:~# nmcli con modify "Wired connection 1" +ipv4.routes "188.88.88.88/23 172.16.2.1"
root@Andromeda:~# nmcli connection up "Wired connection 1" 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)
root@Andromeda:~# nmcli con show "Wired connection 1" | grep -i routes
ipv4.routes:                            { ip = 188.88.88.88/23, nh = 172.16.2.1 }

但 ...

root@Andromeda:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         speedport-entry 0.0.0.0         UG    100    0        0 enp3s0
10.10.10.0      0.0.0.0         255.255.255.240 U     0      0        0 br-f8186d7831df
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp3s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp3s0
root@Andromeda:~# ip route
default via 192.168.1.1 dev enp3s0 proto dhcp metric 100 
10.10.10.0/28 dev br-f8186d7831df proto kernel scope link src 10.10.10.1 linkdown 
169.254.0.0/16 dev enp3s0 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.1.0/24 dev enp3s0 proto kernel scope link src 192.168.1.6 metric 100 

尽管在使用 时似乎存在特定路线,但为什么ip route或命令没有显示特定路线?routenmcli

答案1

首先,nmcli connection ...显示手动路由位于连接配置文件中。配置文件是用于配置网络设备的一组设置。但这不是设备本身的配置。如果你想查看当前配置的路由,那么nmcli -f all device show enp3s0ip route show是正确的。这两个命令的作用并不完全相同,第一个命令询问 NetworkManager 它认为当前的配置是什么,第二个命令通过 netlink API 询问内核。当然,双方指挥所提供的信息应该一致。

不管怎样,你在配置文件中设置路由并激活它。您期望在设备上看到路线是正确的。

它不存在,因为172.16.2.1无法直接访问网关。内核不允许添加此路由,并且可能在 NetworkManager 的日志文件中您会看到有关添加路由失败的警告。您也无法ip route add直接添加此路由。

潜在的解决方案是将路由配置为onlink(内核和 NetworkManager 最近才支持)。更好的解决方案是还添加一条到网关的直接路由 ( +ipv4.routes 172.16.2.1/32)。前提是这是您网络中的正确配置。

相关内容