前两天给一台机器配置ipv6的时候出现个奇怪的问题:
刚开始能ping通,过几分钟就不行了,重启systemd-networkd后能短暂恢复,过几分钟又嗝屁,如此反复。。
找半天原因最后通过查看路由表发现问题:
图中红框的这条路由就是问题所在,通过看到proto ra可以得知这条路由是上级路由器发的ra通告。机器收到ra后systemd-networkd就会自动加上这条路由。。这个时候你手动用ip -6 route del去删是没用的,过一会又给你自动加上。。
解决办法,编辑对应网卡的networkd配置文件:
nano /etc/systemd/network/20-wired.network
在[Network]里面加上IPv6AcceptRA=no:
[Network] Address=xxx.xxx.xxx.xxx/24 Address=xxx:xxx:xxx:xxx:x::x/80 IPv6AcceptRA=no
重启networkd:
systemctl restart systemd-networkd
如果机器没用networkd,也可以通过修改内核配置来关闭ra:
echo 'net.ipv6.conf.all.accept_ra = 0' >> /etc/sysctl.d/99-sysctl.conf sysctl --system