Debian 12虚拟机中如何阻止SLAAC自动设置默认路由并强制出站流量走eth0
Debian 12虚拟机中如何阻止SLAAC自动设置默认路由并强制出站流量走eth0
嗨,这个场景我太熟了——双IPv6接口+RA(路由通告)自动生成的默认路由很容易出现这种“突然切换”的问题,尤其是当两个路由metric相同时,系统的选路逻辑可能会偏向某一个接口。下面给你分步解决,从临时应急到持久化配置都覆盖到:
一、临时应急修复(立即生效,重启后失效)
如果现在要马上恢复eth0的默认路由优先级,先做这两步:
- 删掉eth1的默认路由,把它从路由表里移除:
这里的ip route del default via fe80::xxxx:xxxx:xxxx:xxxx dev eth1fe80::xxxx:xxxx:xxxx:xxxx要替换成你路由表里eth1对应的网关地址。 - 给eth0的默认路由设置更低的metric值(数值越小,优先级越高),比如改成512,确保系统优先选它:
改完之后用ip route change default via fe80::be24:xxxx:xxxx:xxxx dev eth0 proto ra metric 512traceroute -6测一下出站流量,应该就会走eth0了。
二、持久化配置(重启后依然生效)
核心是阻止eth1通过RA自动添加默认路由,同时确保eth0的默认路由始终拥有最高优先级。分两种Debian 12常用的网络配置工具来说明:
情况1:使用systemd-networkd(Debian 12默认网络管理工具)
- 进入systemd-networkd的配置目录:
cd /etc/systemd/network/ - 新建或编辑eth1对应的配置文件,比如
10-eth1.network,内容如下:[Match] Name=eth1 [Network] IPv6AcceptRA=yes # 保留SLAAC自动获取IPv6地址的功能 IPv6AcceptRAUseDefaultRoute=no # 拒绝RA发来的默认路由 - 再编辑eth0的配置文件
10-eth0.network,给它的默认路由设置更低的metric:[Match] Name=eth0 [Network] IPv6AcceptRA=yes IPv6AcceptRAMetric=512 # 让eth0的默认路由优先级远高于默认的1024 - 重启systemd-networkd服务让配置生效:
systemctl restart systemd-networkd
情况2:使用传统ifupdown(基于/etc/network/interfaces)
如果你的虚拟机用的是老版本的ifupdown配置方式,修改/etc/network/interfaces文件:
- 找到eth1的IPv6配置段,修改成这样:
iface eth1 inet6 auto accept_ra 1 # 保留SLAAC地址自动配置 accept_ra_defrtr 0 # 不接受RA推送的默认路由 - 再修改eth0的配置段,提升它的默认路由优先级:
iface eth0 inet6 auto accept_ra 1 accept_ra_metric 512 # 设置更低的metric确保优先选路 - 重启两个网络接口让配置生效:
ifdown eth1 && ifup eth1 ifdown eth0 && ifup eth0
三、验证配置是否生效
执行ip -6 route查看IPv6路由表,你应该会看到:
- 只有eth0的默认路由(或者eth0的默认路由metric数值远小于eth1的)
- fd45::/64的网段依然绑定在eth0接口上
这样配置后,不管系统重启还是网络服务重载,eth0都会作为默认出站接口,同时eth1也能正常获取SLAAC地址,不会再抢默认路由了。
备注:内容来源于stack exchange,提问作者jsw
相关产品推荐
相关产品推荐

