@coupile #10 问了ai才知道信息量这么大!贴出来给有需要的小伙伴也做个参考:这位教你的人是个懂 OpenWrt 路由底层和 IPv6 协议的“老江湖”。他说的这段话信息量很大,直接切中了旁路由 IPv6 的痛点。 为了让你彻底明白,我们把这段话拆成三部分来解释:什么是 NDP Relay、什么是 IPv6 PD,以及为什么说 OpenWrt 有 Bug。 什么是 "NDP Relay" 和 "IPv6 PD"? 在 IPv4 的世界里,旁路由可以用 NAT(网络地址转换)或者单纯改网关来伪装流量。但在 IPv6 的世界里,每个设备都要拿一个独立的公网 IP。这就涉及到主路由怎么把 IP 分给旁路由和手机的问题。 这两种方式代表了两种分发 IP 的思路: IPv6 PD (Prefix Delegation,前缀授权): 原理:主路由从运营商那里拿到一个大网段(比如 /56),然后切出一小块(比如 /64)直接下发给旁路由。旁路由自己当“小队长”,再去给手机分发 IP。 缺点:在旁路由架构下,主路由和旁路由容易打架。很多主路由(比如官方原厂固件、小米、华为等)根本不支持把前缀二次授权给旁路由,导致旁路由下的设备拿不到 IPv6。 NDP Relay (邻居发现协议中继): 原理:这是目前旁路由最完美的解法。旁路由自己不当“小队长”了,它变成一个“传话筒”。主路由发出的 IPv6 广播,旁路由通过 NDP 中继直接复制、转发给手机。 优点:手机和主路由在同一个 IPv6 层面上,手机能完美拿到移动的公网 IPv6。同时,因为所有流量在经过旁路由时被“中继”了一手,旁路由的 PassWall 就能在这个时候神不知鬼不觉地把流量劫持下来。这就是他说的“最优雅的方式”。 “抛弃 IPv6 PD”是什么意思? 意思是在旁路由的 LAN 口配置里,不要开启“IPv6 接口分配长度”(即关闭 PD 关联)。 你要把旁路由的 IPv6 模式彻底从“主路由模式(路由分配)”切换到 “中继模式 (Relay)”。让旁路由彻底放弃自己去分配 IP 的想法,一心一意做主路由和手机之间的“桥梁”。 “OpenWrt 的 IPv6 NDP 多少有点问题,Snapshot 好像修了”是什么意思? 这是 OpenWrt 社区一个历史悠久的“老坑”: 稳定版 OpenWrt(如 22.03, 23.05 等):内置的 IPv6 管理组件(主要是 odhcpd)在处理 NDP 中继 (Relay) 时存在不稳定的 Bug。经常表现为:刚开机时手机能上网,但过几个小时或者到了第二天,中继邻居表失效了,手机的 IPv6 就断网了,或者旁路由突然就劫持不到流量了。 Snapshot(快照版/开发版):这是 OpenWrt 每天更新的最前沿版本。这位朋友记得,社区的开发者后来在源码里修正了 odhcpd 的这个中继 Bug,修复后的版本在中继模式下非常稳定,不会再莫名其妙断流。 🛠️ 总结:你现在该怎么办? 这位高手给你的建议,技术上确实是“最优雅”的(能完美兼顾国内 IPv6 直连 + 国外流量被旁路由劫持)。但由于 OpenWrt 稳定版的 Bug,折腾起来会比较搞心态。 如果你想尝试他的“最优雅方式”,核心操作是: 登录旁路由,进入 “网络” -> “接口” -> “LAN”。 在“IPv6 设置”里,把 “路由器通告服务 (RA)” 和 “DHCPv6 服务”、“NDP 代理” 全部改成 “混合模式 (hybrid)” 或 “中继模式 (relay)”。 把“IPv6 分配长度”设为 设置为“已禁用”(也就是抛弃 PD)。 谢谢佬们,我继续琢磨下…
@usrfeng #7 如果这样说设置的话那么需要ss的终端连接旁路由时是只应用了v4么?(好像终端没有获得v6)
@卡拉彼丘 #8 谢谢,我依照这个思路继续和ai磨一磨看能否找到解决方案
@darwin #9 腻害,前半句听懂了,后半句还在问ai是什么意思…马克下,感谢佬
@coupile #10 问了ai才知道信息量这么大!贴出来给有需要的小伙伴也做个参考:这位教你的人是个懂 OpenWrt 路由底层和 IPv6 协议的“老江湖”。他说的这段话信息量很大,直接切中了旁路由 IPv6 的痛点。
为了让你彻底明白,我们把这段话拆成三部分来解释:什么是 NDP Relay、什么是 IPv6 PD,以及为什么说 OpenWrt 有 Bug。
在 IPv4 的世界里,旁路由可以用 NAT(网络地址转换)或者单纯改网关来伪装流量。但在 IPv6 的世界里,每个设备都要拿一个独立的公网 IP。这就涉及到主路由怎么把 IP 分给旁路由和手机的问题。
这两种方式代表了两种分发 IP 的思路:
IPv6 PD (Prefix Delegation,前缀授权):
原理:主路由从运营商那里拿到一个大网段(比如 /56),然后切出一小块(比如 /64)直接下发给旁路由。旁路由自己当“小队长”,再去给手机分发 IP。
缺点:在旁路由架构下,主路由和旁路由容易打架。很多主路由(比如官方原厂固件、小米、华为等)根本不支持把前缀二次授权给旁路由,导致旁路由下的设备拿不到 IPv6。
NDP Relay (邻居发现协议中继):
原理:这是目前旁路由最完美的解法。旁路由自己不当“小队长”了,它变成一个“传话筒”。主路由发出的 IPv6 广播,旁路由通过 NDP 中继直接复制、转发给手机。
优点:手机和主路由在同一个 IPv6 层面上,手机能完美拿到移动的公网 IPv6。同时,因为所有流量在经过旁路由时被“中继”了一手,旁路由的 PassWall 就能在这个时候神不知鬼不觉地把流量劫持下来。这就是他说的“最优雅的方式”。
意思是在旁路由的 LAN 口配置里,不要开启“IPv6 接口分配长度”(即关闭 PD 关联)。
你要把旁路由的 IPv6 模式彻底从“主路由模式(路由分配)”切换到 “中继模式 (Relay)”。让旁路由彻底放弃自己去分配 IP 的想法,一心一意做主路由和手机之间的“桥梁”。
这是 OpenWrt 社区一个历史悠久的“老坑”:
稳定版 OpenWrt(如 22.03, 23.05 等):内置的 IPv6 管理组件(主要是 odhcpd)在处理 NDP 中继 (Relay) 时存在不稳定的 Bug。经常表现为:刚开机时手机能上网,但过几个小时或者到了第二天,中继邻居表失效了,手机的 IPv6 就断网了,或者旁路由突然就劫持不到流量了。
Snapshot(快照版/开发版):这是 OpenWrt 每天更新的最前沿版本。这位朋友记得,社区的开发者后来在源码里修正了 odhcpd 的这个中继 Bug,修复后的版本在中继模式下非常稳定,不会再莫名其妙断流。
🛠️ 总结:你现在该怎么办?
这位高手给你的建议,技术上确实是“最优雅”的(能完美兼顾国内 IPv6 直连 + 国外流量被旁路由劫持)。但由于 OpenWrt 稳定版的 Bug,折腾起来会比较搞心态。
如果你想尝试他的“最优雅方式”,核心操作是:
登录旁路由,进入 “网络” -> “接口” -> “LAN”。
在“IPv6 设置”里,把 “路由器通告服务 (RA)” 和 “DHCPv6 服务”、“NDP 代理” 全部改成 “混合模式 (hybrid)” 或 “中继模式 (relay)”。
把“IPv6 分配长度”设为 设置为“已禁用”(也就是抛弃 PD)。
谢谢佬们,我继续琢磨下…
蹲一个懂行的大佬,抄下方案。
我的旁路由用的v6的节点,我记得只要把上网设备的v6关了就可以了,旁路由开启ipv6,测试设备从v4到旁路由,旁路由v6出站到v6节点
代理机器上主动广播RA将自己设为最高优先级的路由
爱快可以根据设备或者lan口选择用哪一路做出口,我op的wan是分配了电信的v4+移动的v6,op的lan接回爱快的wan(hkt),这样爱快相当于能看到3条出口
建议你改用网关使用主路由的旁路方案(例如Fakeip方案),没那么多烦恼,IPv6也一切正常
说实话挺麻烦的,高优先级 RA 还不一定能覆盖成功……我推荐要走旁路网关的设备上直接把 IPv6 关了,不然指不定哪里就漏了。