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
或命令没有显示特定路线?route
nmcli
答案1
首先,nmcli connection ...
显示手动路由位于连接配置文件中。配置文件是用于配置网络设备的一组设置。但这不是设备本身的配置。如果你想查看当前配置的路由,那么nmcli -f all device show enp3s0
或ip route show
是正确的。这两个命令的作用并不完全相同,第一个命令询问 NetworkManager 它认为当前的配置是什么,第二个命令通过 netlink API 询问内核。当然,双方指挥所提供的信息应该一致。
不管怎样,你在配置文件中设置路由并激活它。您期望在设备上看到路线是正确的。
它不存在,因为172.16.2.1
无法直接访问网关。内核不允许添加此路由,并且可能在 NetworkManager 的日志文件中您会看到有关添加路由失败的警告。您也无法ip route add
直接添加此路由。
潜在的解决方案是将路由配置为onlink
(内核和 NetworkManager 最近才支持)。更好的解决方案是还添加一条到网关的直接路由 ( +ipv4.routes 172.16.2.1/32
)。前提是这是您网络中的正确配置。