如何通过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的配置文件中添加一行配置即可:
- 编辑br-lan的网络配置文件(通常位于
/etc/systemd/network/目录下,比如/etc/systemd/network/br-lan.network) - 在
[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 # 新增:禁用该接口生成默认路由
- 重启systemd-networkd服务让配置生效:
sudo systemctl restart systemd-networkd
- 验证效果:执行
ip -6 route命令,确认那条default dev br-lan proto kernel metric 256的路由已经消失,此时系统会优先使用ppp0的RA默认路由,IPv6就能正常工作了。
为什么这个方法有效?
你当前的配置中,br-lan启用了LinkLocalAddressing=ipv6和ConfigureWithoutCarrier=yes(确保接口始终处于活跃状态),systemd-networkd默认会为这类接口生成默认路由。而DefaultRoute=no会明确覆盖这个默认行为,告诉服务不要为br-lan创建默认路由,彻底解决冲突问题。
另外检查了你的其他配置,比如[IPv6SendRA]中的UplinkInterface=:none设置是合理的,因为br-lan作为本地LAN接口,不需要指定上行接口来发送路由公告,这个部分不需要调整。
备注:内容来源于stack exchange,提问作者GongT




