You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过systemd-networkd禁用br-lan生成的默认IPv6路由

如何通过systemd-networkd禁用br-lan生成的默认IPv6路由

看起来你遇到了systemd-networkd自动为br-lan生成默认IPv6路由的问题——这条路由的metric更低,直接抢占了ppp0通过RA获取的默认路由,导致IPv6无法正常工作对吧?手动删除虽然能临时解决,但重启后又会回来,我来帮你设置永久禁用的方案。

核心解决方案:添加DefaultRoute=no参数

systemd-networkd提供了专门的参数来阻止接口生成默认路由,你只需要在br-lan的配置文件中添加一行配置即可:

  1. 编辑br-lan的网络配置文件(通常位于/etc/systemd/network/目录下,比如/etc/systemd/network/br-lan.network
  2. [Network]区块中添加DefaultRoute=no,修改后的该区块如下:
[Network]
Description=The local network
DHCP=no
LinkLocalAddressing=ipv6
IPv6SendRA=yes
IPv6PrivacyExtensions=no
DHCPv6PrefixDelegation=yes
DHCPPrefixDelegation=yes
DHCPServer=no
MulticastDNS=yes
LLDP=yes
EmitLLDP=yes
IPForward=yes
ConfigureWithoutCarrier=yes
IPv6MTUBytes=1492
DefaultRoute=no  # 新增:禁用该接口生成默认路由
  1. 重启systemd-networkd服务让配置生效:
sudo systemctl restart systemd-networkd
  1. 验证效果:执行ip -6 route命令,确认那条default dev br-lan proto kernel metric 256的路由已经消失,此时系统会优先使用ppp0的RA默认路由,IPv6就能正常工作了。

为什么这个方法有效?

你当前的配置中,br-lan启用了LinkLocalAddressing=ipv6ConfigureWithoutCarrier=yes(确保接口始终处于活跃状态),systemd-networkd默认会为这类接口生成默认路由。而DefaultRoute=no会明确覆盖这个默认行为,告诉服务不要为br-lan创建默认路由,彻底解决冲突问题。

另外检查了你的其他配置,比如[IPv6SendRA]中的UplinkInterface=:none设置是合理的,因为br-lan作为本地LAN接口,不需要指定上行接口来发送路由公告,这个部分不需要调整。

备注:内容来源于stack exchange,提问作者GongT

火山引擎 最新活动