关于 pppoe 重拨后 IPV6 prefix 更新问题

2022-01-20 12:40:00 +08:00
 ggf

我通过 pppoe 连接外网,然后通过 prefix 获取 ipv6 后,我的终端同时拥有 ipv4 和 ipv6 地址,此时一切正常。
问题出现在 pppoe 连接断开重连时,前缀获取的 ipv6 会发生变化,但此时终端获取的是新的 ipv6 地址。 问题是旧地址没有自动消失,导致终端 ipv6 连接异常。
除了终端断开连接,重新连接后可以恢复 ipv6 正常,还有什么办法吗?

6807 次点击
所在节点    宽带症候群
41 条回复
cwbsw
2022-01-21 12:02:21 +08:00
这是苹果的实现问题吧,我这里 OpenWrt+Windows ,重拨后秒更新,旧地址被 deprecated ,valid_lft 过后就消失了。valid_lft 默认是与上游运营商下发的前缀一致,也可以自己指定。
ggf
2022-01-21 23:08:49 +08:00
@cwbsw 不仅仅是 ios windows 上也是如此现象,可能由于我的 valid_lft 都是跟随运营商默认 30d 有关系
ggf
2022-01-21 23:13:22 +08:00
@Sxx1314 我发现其实不重启 dhcp 其实只需要终端断开网络重新连接即可,应该是终端中的旧地址没有释放导致的,因为重新联网获取到的地址就是新的 不会获取到旧地址
raysonx
2022-01-22 01:03:09 +08:00
关掉 dhcpv6 。slaac 可以更新前缀。
cwbsw
2022-01-22 10:20:12 +08:00
@ggf
valid lifetime 和 preferred lifetime 用 ROS 都可以改。
basncy
2022-01-22 13:23:47 +08:00
@ggf 4 楼不是已经给答案了吗?
关闭 dhcp, 用 slaac. 或者缩小 dhcp 租期
dnsmasq 语法:
dhcp-range=br0,::,constructor:br0,ra-stateless,ra-names

PD 用的是 wide-dhcpv6, pppoe 重新拨号后 systemctl restart dhcp6c@ppp0,配合 dnsmasq 配置,该路由下的 v6 自动刷新.
qbqbqbqb
2022-01-22 14:08:10 +08:00
@cwbsw 重拨后是否更新是要看路由端实现的。OpenWRT 会主动 deprecate prefix (发一个旧前缀 preferred lifetime=0 的 RA ),这样即使旧地址的 preferred lifetime 没过期也能强制切换。

但别的路由系统不一定,有的得等前缀自动过期(至少得等旧地址 preferred lifetime 过期,终端才会把新地址设为首选)。
ggf
2022-01-22 19:54:02 +08:00
@basncy 我用的是 ros 用的就是 slaac 问题依旧在
ggf
2022-01-22 20:14:23 +08:00
@qbqbqbqb 确实 ros 应该不会主动 deprecate prefix ,目前问题存在
ggf
2022-01-22 20:15:46 +08:00
@cwbsw 对的我改成了 30min/10min 目前用这个方法解决
basncy
2022-01-22 20:50:15 +08:00
@ggf systemctl restart dhcp6c@ppp0 后 br0 的 ipv6 会变, dnsmasq 监测到变化就会主动发 deprecate prefix.
basncy
2022-01-22 20:53:21 +08:00
@ggf systemctl restart dhcp6c@ppp0 可以写在 pppoe 的 if-up 里, 这样就能秒换了.
ggf
2022-01-22 21:27:50 +08:00
@basncy 我用的并不是 openwrt 我强调过很多次,请仔细阅读
basncy
2022-01-22 21:39:03 +08:00
@ggf 原理都一样. 我用 archlinux 改造的. https://wiki.archlinux.org/title/IPv6#With_WIDE-DHCPv6
z5864703
2022-01-22 22:46:07 +08:00
ROS 调整 ND 的参数就好了,根据 ipv6 前缀的过期时间来改,目前没有问题
Xymmh
2022-01-23 00:14:21 +08:00
干脆不要用 pd 下发的地址了,直接把上级设备给 wan 口分发的 /64 地址中继给终端,类似教育网下的方法。
ggf
2022-01-23 00:22:25 +08:00
@z5864703 是的 这个方法目前可行
zent00
2022-06-25 09:29:36 +08:00
没有 VyOS 用户吗?我来贡献一下 VyOS 的设置。

set service router-advert interface br0 prefix ::/64 preferred-lifetime 300
set service router-advert interface br0 prefix ::/64 valid-lifetime 900

由于我的软路由多个 LAN 口都加入了 br0 ,所以这里 interface 是 br0 ,设置时可按实际情况修改为 ethN 。
test0x01
2022-06-28 23:45:33 +08:00
看样子只有比 lease time 了
luodichen
2023-05-10 09:48:41 +08:00
RouterOS v7.9 已经解决了此问题:

*) ipv6 - send out RA packet with "preferred-lifetime" set to "0" when IPv6 address is deactivated;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX