我在我的防火墙 (armbian) LAN 以太网上创建了一个静态 ipv6 地址。我用的是网络管理器。问题是地址显示为:
inet6 2001:DB8:c101:b700::1/64 scope global noprefixroute
noprefixroute 标志表示该接口上没有到 2001:DB8:c101:b700 的自动路由。
我可以使用 NetworkManager 手动创建路由,但我更希望在没有 noprefixroute 标志的情况下自动创建路由。
我知道这是可以完成的,因为我有另一台具有类似配置(debianstretch)的机器,它确实有一个没有标记 noprefixroute 的静态 IP。
inet6 2001:db8:c101:b700:beef::44/64 scope global
我不知道造成这种差异的原因,尽管 NetworkManager 有时确实表现得相当奇怪。
在仍然使用 NetworkManager 的情况下,使接口具有静态 IPv6 地址而不使用 noprefixroute 标志的最佳方法是什么?
答案1
Linux 内核默认为每个地址(IPv4 和 IPv6)添加一个“设备”路由。即前缀所在子网的上链路由。
其一,自动添加的路由始终具有固定的度量(对于 IPv6,为 256)。这不是 NetworkManager 想要的。在 NetworkManager 中,您可以使用设置来配置路由度量ipv6.route-metric
,该设置(如果未指定)具有取决于设备类型的默认值。例如,在以太网上,默认路由度量为 50。
此外,对于 autoconf/SLAAC,根据路由器通告,前缀可能不在链路上。在这种情况下,添加这样的设备路由根本就是错误的。
因此,NetworkManager 总是添加带有 noprefixroute 标志的地址,以防止内核自动添加路由。当然,NetworkManager会根据情况配置合适的/64。
如果您在 NetworkManager 中配置静态地址,例如。 via nmcli connection modify "$PROFILE" +ipv6.addresses "1:2:3:4::1/64" && nmcli connection up "$PROFILE"
,那么您应该会看到相应的 1:2:3:4::/64 路由。
“noprefixroute”标志似乎不是您真正的问题。该标志的设置是有原因的。如果 NetworkManager 配置的 IP 配置不合适,则可能存在另一个问题。