下面的路由是粘性的,即使手动删除,它也会由 connmand(连接管理器守护进程)使用另一个接口名称添加。如果使用 ip link cmd 关闭特定接口,我会看到同样的问题。
root@soc:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 eth0
有没有办法配置connmand
不这样做?
附加信息:eth0 使用静态 IP 地址。在我的系统 (SoC) 上,我有 4 个接口,其中 3 个使用静态 IP 地址,一个使用 DHCP。我添加了 systemd/network 文件,它定义了下面 eth0 的静态 IP。
root@soc:/etc/systemd/network$ cat 10-eth0-soc.network
[Match]
Name=eth0
[Network]
Address=10.10.11.2/24
root@soc:/etc/systemd/network$
答案1
connmand
看起来是如此的简约和简单,以至于它显然根本无法修改 DHCP 指定的路由。
connmand
快速浏览一下源代码后,如果 DHCP 服务器已这样指定,则似乎会将默认网关设置为 0.0.0.0。显然它曾经包含过滤掉此类情况的代码,但是它已被删除,因为在某些 IPv4LL 情况下,此类路由可能是有效的配置。
在我看来,这connmand
可能太简单了,无法处理您的多宿主主机(=有多个连接到不同网络的接口),您可能必须寻求其他解决方案。
事实上,您可以使用*.network
带有 IP 地址的文件,这表明您可以systemd-networkd
使用这些文件。您可以尝试connmand
完全禁用 DHCP 接口,并使用一个.network
文件,因为它允许比connmand
.
UseRoutes=false
具体来说,您可以在文件[DHCPV4]
的部分中设置.network
DHCP 服务器是否提供了需要忽略的有害路由/网关。
如果您无法放弃connman
,那么您可能必须检查 DHCP 服务器的配置,并确保如果它没有可提供的网关地址,则它根本不应该发送相关的 DHCP 选项,而不是将其指定为0.0.0.0
。但是,如果某些其他硬件要求 DHCP 服务器始终指定某个网关,那么您可能会遇到麻烦,除非您的 DHCP 服务器足够灵活,允许为每个客户端定制其服务。