如何配置 connmand 不添加 IP 0.0.0.0 和 GW 0.0.0.0 的不必要路由

如何配置 connmand 不添加 IP 0.0.0.0 和 GW 0.0.0.0 的不必要路由

下面的路由是粘性的,即使手动删除,它也会由 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]的部分中设置.networkDHCP 服务器是否提供了需要忽略的有害路由/网关。

如果您无法放弃connman,那么您可能必须检查 DHCP 服务器的配置,并确保如果它没有可提供的网关地址,则它根本不应该发送相关的 DHCP 选项,而不是将其指定为0.0.0.0。但是,如果某些其他硬件要求 DHCP 服务器始终指定某个网关,那么您可能会遇到麻烦,除非您的 DHCP 服务器足够灵活,允许为每个客户端定制其服务。

相关内容