OpenWrt 软路由 IPv6 工作流详解:HomeProxy、OpenClash、sing-box、mihomo 双栈代理与防泄漏教程
IPv6 结合软路由全局代理,基本就是家庭网络配置里的高难度关卡。尤其是 N100、N150 这类 x86 小主机跑 iStoreOS 或原生 OpenWrt 时,如果底层 IPv6 逻辑没理顺,很容易出现 DNS 泄漏、国内网站加载慢、IPv4/IPv6 寻址互相打架、代理节点看似可用但网页一直转圈的问题。
很多人一碰到 IPv6,就会陷入几个问题:
- LAN 口禁用了 IPv6,为什么
br-lan还有 IPv6? - 电脑没有 IPv6,软路由还能不能用 IPv6 连 VPS?
- OpenClash / HomeProxy 里开 IPv6 会不会泄漏?
- sing-box、mihomo、OpenClash、HomeProxy 到底谁负责 DNS,谁负责路由?
- VPS 有 IPv6,VLESS + Reality + Vision 怎么做 IPv4 / IPv6 双节点?
- 3x-ui / Xray 面板里怎么设置 IPv6 双栈代理?
这篇文章不只给按钮位置,而是把完整工作流讲清楚:运营商怎么下发 IPv6,OpenWrt 怎么把前缀交给 LAN,HomeProxy / OpenClash / sing-box / mihomo 又该在 DNS、TUN、透明代理和节点出站之间怎么配合。
核心结论先放前面:IPv6 不是开或关这么简单,它分为“软路由自己是否有 IPv6”“LAN 是否给终端下发 IPv6”“代理核心是否使用 IPv6 连接节点”“客户端访问目标网站是否走 IPv6”四层。
本文所有 IPv6 地址、命令输出和示意图都做了脱敏处理。公网 IPv6 示例统一使用 2001:db8::/32 文档专用地址,它不能实际路由,只用于教程演示。你自己的真实公网 IPv6、VPS IPv6、家庭宽带前缀,不建议原样发到公开文章或截图里。
一、先建立正确模型:IPv6 有四层
软路由环境里,IPv6 至少分成四层:
| 层级 | 负责对象 | 典型配置 |
|---|---|---|
| WAN IPv6 | 软路由自己能不能拿到运营商 IPv6 | wan6、DHCPv6 Client、PD |
| LAN IPv6 | 内网电脑手机能不能拿到 IPv6 | RA、DHCPv6、NDP、ip6assign |
| 代理核心 IPv6 | HomeProxy/OpenClash 能不能用 IPv6 连节点 | sing-box/mihomo 出站、节点 server |
| 目标网站 IPv6 | 访问 Netflix/OpenAI/Google 时目标是否走 IPv6 | DNS AAAA、路由规则、出站策略 |
很多人说“我禁用了 IPv6”,其实只是禁用了 LAN 侧的 RA / DHCPv6,并不代表软路由自己不能用 IPv6。
标准 IPv6 流程:PD -> /64 -> RA -> SLAAC
理解代理为什么会和 IPv6 冲突,先要理解正常家庭宽带 IPv6 是怎么工作的:
- 运营商的 BRAS 给软路由 WAN 口下发 IPv6 地址。
- 同时通过 DHCPv6-PD 下发一个前缀,常见是
/60、/56,也可能是/64。 - OpenWrt 收到 PD 前缀后,把其中一段
/64分配给 LAN。 - LAN 侧的
odhcpd发送 RA,也就是 Router Advertisement,告诉内网设备这里有 IPv6 路由。 - 手机、电脑收到 RA 后,通过 SLAAC 自动生成自己的公网 IPv6 地址。
- 设备之间和网关之间通过 NDP 做邻居发现。
这和 IPv4 最大的不同是:IPv6 通常不是靠 NAT 把内网地址“藏”起来,而是终端直接拿公网地址。也正因为如此,一旦 LAN 终端拿到了公网 IPv6,而代理插件又没有接管 IPv6 流量,就可能绕过代理直连。
这也是最推荐的折中方案:
1 | 电脑/手机不拿公网 IPv6 |
链路是:
1 | 手机/电脑 |
这样既能利用 VPS 的 IPv6 节点,又能降低终端 IPv6 直连泄漏风险。
二、最终设置总览图
如果你只是想先照着配置,直接按这张图来:
这一套配置的目标不是“全局关闭 IPv6”,而是:
1 | WAN6:保留 IPv6,让软路由自己能访问 IPv6 |
最终链路是:
1 | 电脑/手机 |
这样不会影响 VPS 的 IPv6,也不会影响软路由自己使用 IPv6。它只是不让 LAN 里的电脑、手机直接拿家宽公网 IPv6,从而降低 IPv6 直出和 WebRTC 暴露风险。
三、IPv6 地址先分清:公网、ULA、链路本地
看 ip -6 addr 时,最重要的是区分三类地址。
1. 公网 IPv6:常见 2xxx:、3xxx: 开头
例如,下面使用 2001:db8::/32 文档专用前缀做脱敏示例:
1 | 2001:db8:2409:b120::18/64 |
真实运营商或机房分配的公网 IPv6 可以在公网路由;2001:db8::/32 只用于文档演示,不能实际路由。
如果电脑、手机拿到了这类地址,就存在 IPv6 直连和 WebRTC 暴露的可能。
2. ULA 本地地址:fdxx: 开头
例如:
1 | fd12:3456:789a::1/60 |
这是 IPv6 的本地地址段,类似 IPv4 的:
1 | 192.168.0.0/16 |
它不能直接在公网路由。
所以 fd12:3456:789a::/48 通常不是泄漏风险重点,可以保留。
3. 链路本地地址:fe80:: 开头
例如:
1 | fe80::c7e:2aff:fe65:8a18/64 |
这是网卡链路本地地址,只在同一个二层网络里有效。
每个启用 IPv6 的接口几乎都会有 fe80::,这不代表公网 IPv6 已经启用。
四、OpenWrt/iStoreOS 的 IPv6 核心组件
OpenWrt 默认支持 IPv6,主要组件包括:
odhcp6c:WAN 侧 DHCPv6 客户端,用来向运营商请求 IPv6 地址和前缀。odhcpd:LAN 侧 RA / DHCPv6 / NDP 服务。wan6:IPv6 上联接口。ip6assign:把运营商给的前缀分配给 LAN。- IPv6 防火墙:控制 IPv6 入站、转发和出站。
OpenWrt 官方文档也明确说明,OpenWrt 提供 DHCPv6 client、RA/DHCPv6 server 和 IPv6 firewall,并支持 RA、DHCPv6、NDP relay 等模式。
参考:
OpenWrt IPv6 configuration
OpenWrt odhcpd
五、图文设置步骤:LAN 禁 IPv6,软路由自己用 IPv6
这是最适合大多数代理用户的方案。
目标:
1 | LAN 终端没有公网 IPv6 |
1. WAN 侧保持 IPv6 正常
LuCI / iStoreOS 界面建议先看:
1 | 网络 -> 接口 -> WAN6 |
常见配置:
1 | 协议:DHCPv6 客户端 |
如果你点进 wan 或 wan6 的“DHCP 服务器 -> IPv6 设置”,这里不要给 WAN 口开 RA / DHCPv6:
1 | 指定的主接口:不勾选 |
WAN 口是上联口,不是给内网设备发 IPv6 的接口。这里保持禁用是正常的。

图中是在 接口 -> wan -> DHCP 服务器 -> IPv6 设置,RA / DHCPv6 / NDP 都保持已禁用。
wan6 -> 高级设置 建议这样看:
1 | 使用该接口的网关作为默认网关:勾选 |


保存应用后,先确认 WAN6 能拿到运营商分配的公网 IPv6 和前缀委派。中国大陆家宽常见公网 IPv6 前缀可能是 2408:、2409:、240e: 等开头。不要把真实地址截图直接发到公开文章里,演示时建议改成 2001:db8::/32 这类文档地址。
在软路由 SSH 中检查:
1 | ip -6 addr |
上面最后一条是脱敏示例,请换成你自己的 VPS IPv6。只要软路由能 ping6 通公共 IPv6 和 VPS IPv6,就说明 WAN6 基础链路已经成立。
如果你正在运行 OpenClash / mihomo 的 Fake-IP 模式,curl -6 域名 可能会失败,这不一定代表 IPv6 坏了。后面排错部分会单独解释。
2. LAN 侧不下发 IPv6
LuCI / iStoreOS 界面:
1 | 网络 -> 接口 -> LAN -> DHCP 服务器 -> IPv6 设置 |
建议:
1 | RA 服务:已禁用 |

如果你想更彻底,不让 br-lan 拿公网 IPv6 前缀:
1 | 网络 -> 接口 -> LAN -> 高级设置 |

上面这张图是一个容易踩坑的位置:如果这里还显示 60,说明 LAN 仍然在拿一段 IPv6 前缀。按照本文的防泄漏方案,应该把它改成“已禁用”。
SSH 对应命令:
1 | uci set dhcp.lan.ra='disabled' |
注意:删除 ip6assign 不是必须。只要 RA / DHCPv6 已禁用,终端通常就拿不到公网 IPv6。
如果你刚刚从“LAN 开 IPv6”改成“LAN 禁 IPv6”,ip -6 addr 里可能还能看到 br-lan 残留一条公网 IPv6,并显示:
1 | scope global deprecated |
这通常是旧前缀残留,等 valid_lft 到期会消失。想立刻清掉,可以重启网络或重启软路由。
3. DHCP/DNS 里不要乱过滤 AAAA
很多教程会让你去:
1 | 网络 -> DHCP/DNS -> 高级设置 |
然后勾选“过滤 IPv6 AAAA 记录”。这在“全网只用 IPv4”的极简场景里可以临时止血,但不适合你这种想让软路由自己使用 IPv6 节点的配置。
建议:
1 | 过滤本地包:可以保持勾选 |

原因很简单:HomeProxy / OpenClash / sing-box / mihomo 后面可能需要解析 IPv6 节点域名,或者需要根据 AAAA 记录做规则判断。DNS 是否返回 AAAA,应该交给代理核心和分流规则控制,不建议在 dnsmasq 底层一刀切。
4. 判断终端是否真的没有公网 IPv6
在 Mac / Linux:
1 | ifconfig | grep inet6 |
如果只有:
1 | ::1 |
没有运营商分配的 2xxx:、3xxx: 等公网 IPv6,就说明 LAN 没给终端下发公网 IPv6。
也可以打开:
1 | https://test-ipv6.com |
理想状态:
- 终端没有本地公网 IPv6
- WebRTC 不暴露家宽公网 IPv6
- 访问出口显示代理 IP
六、推荐方案二:LAN 开 IPv6,但必须完整防泄漏
如果你希望电脑、手机也有原生 IPv6,那么 LAN 可以开启 RA / DHCPv6。
适合:
- 家庭网络全栈 IPv6
- NAS / 内网服务需要 IPv6
- 你清楚自己在做 IPv6 防火墙和透明代理
不适合:
- 只想省心防泄漏
- 不确定 OpenClash/HomeProxy 是否接管 IPv6
- 不想处理 WebRTC、DNS、AAAA 泄漏
典型 LAN 配置:
1 | RA 服务:服务器模式 |
如果只用 SLAAC,OpenWrt 官方示例里也会让 ra server,并把 DHCPv6 设为 disabled。
关键是:一旦 LAN 给终端发了公网 IPv6,代理核心必须接管 IPv6 流量,否则 IPv6 很容易绕过代理直连。
全 LAN IPv6 时,ICMPv6 不能乱拦
IPv6 非常依赖 ICMPv6,尤其是:
- RA 路由器通告
- NDP 邻居发现
- 路径 MTU 发现
- IPv6 错误回报
所以不要把 ICMPv6 当成“可有可无的 ping”。如果防火墙把关键 ICMPv6 全挡掉,就可能出现一种很怪的现象:ping6 看起来通,网页却打不开,或者某些网站能开、某些网站无限加载。
OpenWrt 默认 IPv6 防火墙规则通常已经处理了基础 ICMPv6。除非你很清楚每条规则的含义,不建议手动删除默认的 Allow-ICMPv6-Input、Allow-ICMPv6-Forward 这类规则。
全 LAN IPv6 的冲突点
开启 LAN IPv6 后,代理冲突通常不是“IPv6 本身坏了”,而是这些路径没有统一:
| 冲突点 | 原因 | 表现 |
|---|---|---|
| DNS 泄漏 | 终端或运营商 IPv6 DNS 抢答,代理核心没有接管 AAAA | 国内网站秒开,海外网站打不开或解析异常 |
| IPv6 绕过 | TUN/TProxy/透明代理只接管 IPv4,IPv6 直接出 WAN | 节点显示可用,但浏览器真实 IPv6 直出 |
| A/AAAA 选择冲突 | 浏览器优先访问 IPv6,但代理规则只处理 IPv4 | 页面一直转圈,测速却正常 |
| WebRTC 暴露 | 浏览器通过 WebRTC 暴露本机公网 IPv6 | 代理出口正常,但泄漏测试显示家宽 IPv6 |
核心解决思路是:国内流量可以走原生 IPv6 直连,海外流量的 DNS 和 IPv6 连接必须被代理核心接管。
七、HomeProxy 的 IPv6 工作流
HomeProxy 本质上是 OpenWrt 上的 sing-box 管理前端。它的核心逻辑要按 sing-box 理解。
推荐架构:
1 | LAN 不下发公网 IPv6 |
这时终端没有 IPv6,也不影响 HomeProxy 使用 IPv6 节点。
HomeProxy 配置重点
- 路由设置里优先确认这几项:
1 | 代理 IPv6 流量:按需求开启 |
其中 Sniffing 很关键。开启后,即使设备访问的是 IP,sing-box 也可以尝试从 TLS ClientHello 的 SNI 或 HTTP Host 中识别真实域名,再重新应用规则。它不能解决所有问题,但对透明代理和复杂分流非常有用。
- 节点地址可以直接填 VPS IPv6:
1 | 2001:db8:52c0:41d5::1697 |
- 如果使用 URI,IPv6 地址要加方括号:
1 | vless://UUID@[2001:db8:52c0:41d5::1697]:443?...#VLESS-Reality-IPv6 |
- Reality 参数保持不变:
1 | UUID 不变 |
- DNS 不要让终端自己乱跑。
HomeProxy/sing-box 应该统一处理 DNS,终端只把请求交给软路由。这样比较容易控制 AAAA、IPv6 出站和防泄漏。
HomeProxy DNS 建议
HomeProxy 的 DNS 可以按“国内直连、国外代理”的思路拆:
1 | 默认/直连 DNS:223.5.5.5、119.29.29.29、2400:3200::1 |
如果你的节点本身只支持 IPv4 出站,或者某个机场节点不支持 IPv6 出口,可以在相关出站里使用:
1 | domain strategy: prefer_ipv4 |
或者更保守:
1 | domain strategy: ipv4_only |
这样做的效果是:LAN 终端可以把流量交给软路由,软路由再根据规则决定用 IPv4 还是 IPv6 连接节点。即使终端没有公网 IPv6,也不影响 HomeProxy 使用 VPS IPv6 节点。
八、OpenClash / mihomo 的 IPv6 工作流
OpenClash 使用的是 Clash.Meta / mihomo 核心。mihomo 的 IPv6 和 DNS 配置要分开看。
官方 mihomo 文档里有独立的 ipv6 配置项,DNS 文档也强调节点域名解析和普通 DNS 处理是不同逻辑。
参考:
mihomo General configuration
mihomo DNS configuration
1. LAN 禁 IPv6 时,OpenClash 仍可用 IPv6 节点
只要软路由本机能通 IPv6:
1 | curl -6 ip.sb |
OpenClash/mihomo 就可以从软路由出站连接 VPS IPv6。
这不需要 LAN 终端有 IPv6。
2. OpenClash 里 IPv6 相关选项怎么理解
不同版本界面名字会有差异,但原则一致:
| 选项类型 | 含义 |
|---|---|
| IPv6 支持 | mihomo 是否处理 IPv6 目标和 AAAA |
| DNS IPv6 / AAAA | 是否返回 IPv6 解析结果 |
| TUN IPv6 | TUN 是否接管 IPv6 流量 |
| 节点域名解析 | 节点 server 是域名时,用哪个 DNS 解析 |
| 代理服务器解析 DNS | proxy-server-nameserver,专门解析代理节点域名 |
如果你使用的是 VPS IPv6 字面量,而不是域名:
1 | 2001:db8:52c0:41d5::1697 |
那节点本身不需要 DNS 解析。
如果节点是域名,并且同时有 A 和 AAAA,客户端可能自动选择 IPv4 或 IPv6,不方便判断。测试阶段建议两个节点分开写:
1 | DMIT-Reality-IPv4 -> server 填 IPv4 |
3. mihomo YAML 示例:保留 IPv6 能力,但避免终端泄漏
下面是核心思路,不是完整模板:
1 | ipv6: true |
这里的重点不是盲目开 ipv6: true,而是:
- LAN 终端没有公网 IPv6。
- DNS 由 OpenClash/mihomo 接管。
- 代理节点 IPv6 是软路由自己去连接。
- 终端不能绕过软路由直连 IPv6。
如果 LAN 开了公网 IPv6,就必须配合 TUN / 防火墙接管 IPv6,否则不建议开启终端 IPv6。
4. OpenClash 推荐组合:Fake-IP + TUN/TProxy + DNS 接管
如果你追求比较完整的国内外分流,OpenClash/mihomo 更推荐:
1 | DNS 模式:Fake-IP |
Fake-IP 的作用是让终端拿到一个假的地址,例如 198.18.0.x,从而把连接强行吸进 mihomo。mihomo 再根据域名、规则集、策略组和节点状态决定真实连接怎么走。
全 LAN IPv6 时尤其要注意:
1 | 只开 Fake-IP 不够 |
你需要确认 OpenClash 底层确实接管 IPv6 连接。不同版本界面名称可能不同,常见会出现在:
1 | 全局设置 -> 模式设置 / TUN 设置 / 实验性设置 |
另外,局域网和本地 IPv6 前缀要放行,不要代理:
1 | ::1/128 |
如果你自己有 LAN 的公网 IPv6 前缀,也要小心处理。它既可能是“本地网络需要放行的地址”,也可能是“泄漏测试里不希望出现的真实地址”。不确定时,先采用本文推荐的工作流 B:LAN 不下发 IPv6,软路由自己用 IPv6 连节点。
九、sing-box 服务端:VLESS + Reality + Vision 双栈监听
如果 VPS 上跑 sing-box 服务端,要让同一个入站支持 IPv4 和 IPv6,关键是:
1 | "listen": "::" |
如果你之前已经搭好了 sing-box,只是想把现有 VLESS + Reality + Vision 节点改成 IPv4 / IPv6 双栈监听,通常只改这一行:
1 | - "listen": "0.0.0.0", |
其它配置不要乱动,尤其是:
1 | uuid |
这些参数必须和客户端保持一致。下面是一份完整脱敏示例,重点看 listen 已经从 0.0.0.0 改成了 :::
1 | { |
这里的 www.microsoft.com 只是示例。如果你原来的 Reality 伪装域名不是它,就继续用你自己的原配置,不要为了照抄示例而更换 SNI。
检查:
1 | sing-box check -c /etc/sing-box/config.json |
看到:
1 | [::]:443 |
就说明 IPv6 已监听。
再检查 Linux 是否允许 IPv4 映射到 IPv6 socket:
1 | sysctl net.ipv6.bindv6only |
如果是:
1 | net.ipv6.bindv6only = 0 |
那么 listen: "::" 通常就是双栈监听。
如果是 1,则只监听 IPv6,需要改:
1 | echo 'net.ipv6.bindv6only = 0' > /etc/sysctl.d/99-ipv6-dualstack.conf |
sing-box 1.13.12 仍然能用旧字段,但要注意未来版本迁移。官方已维护 deprecated 列表,升级前建议先看变更。
参考:
sing-box Deprecated
sing-box VLESS outbound
sing-box Dial Fields
十、3x-ui / Xray 面板:IPv6 双栈代理怎么设置
如果你不想手写 sing-box 服务端配置,也可以用 3x-ui。它本质上是一个 Xray 面板:面板负责生成配置、管理用户和流量,真正监听端口、处理 VLESS / Reality / Vision 的仍然是 Xray-core。
所以 3x-ui 的 IPv6 双栈思路和 sing-box 很像:
1 | 同一个 VLESS + Reality + Vision 入站 |
1. 什么时候用 3x-ui,什么时候用 sing-box
如果只是你自己用,一个 sing-box 配置文件通常更干净,排错也更直接。
如果你有这些需求,3x-ui 会更方便:
- 想用网页面板添加、删除用户
- 想看用户流量统计
- 想快速生成分享链接或订阅
- 想同时维护多个入站和多个客户端
- 不想每次都手动编辑 JSON
但要记住:面板方便,不等于更稳。双栈能不能成功,最终还是看 Xray 有没有监听 IPv6、系统有没有双栈 socket、防火墙有没有放行 IPv6。
2. 3x-ui 入站怎么填
进入 3x-ui 面板:
1 | Inbounds / 入站列表 -> Add Inbound / 添加入站 |
推荐参数如下:
| 项目 | 推荐值 |
|---|---|
| 协议 | VLESS |
| 传输 | TCP |
| 安全 | Reality |
| Flow | xtls-rprx-vision |
| 端口 | 443 |
| 监听 IP / Listen IP | 优先填 ::,如果面板版本不支持就留空后再验证 |
| SNI / Server Name | 使用你原来 Reality 的伪装域名 |
| Dest / Target | 示例:www.microsoft.com:443,实际以你的原配置为准 |
| Short ID | 使用面板生成值或你的原值 |
| Public Key / Private Key | 使用面板生成值或你的原值 |
最关键的是监听地址:
1 | 监听 IP::: |
如果你的 3x-ui 界面没有这个输入框,或者留空代表监听所有地址,也可以先留空,保存后用命令检查。不要只看面板提示,要以 ss 的结果为准。
Xray 官方文档里,入站的 listen 是监听地址;:: 和 0.0.0.0 都可以表示全接口监听,并且可同时监听 IPv4 和 IPv6。实际服务器上还要配合 Linux 的 net.ipv6.bindv6only。
3. 不要新建两个同端口入站
很多人会误以为:
1 | IPv4 入站:0.0.0.0:443 |
这样做通常会端口冲突。正确做法是:同一个入站监听 ::,让系统提供双栈监听能力。
如果你已经有一个 VLESS + Reality + Vision 入站,不建议重建节点。直接编辑原入站,把监听 IP 改成 ::,其它参数保持不变:
1 | UUID:不变 |
这样客户端只需要新增一个 IPv6 服务器地址的节点,不需要重新换密钥。
4. 保存后检查 Xray 是否双栈监听
保存入站后,在 3x-ui 面板里重启 Xray,或者在服务器执行:
1 | systemctl restart x-ui |
然后检查 443:
1 | ss -tlpn | grep ':443' |
理想结果类似:
1 | LISTEN 0 4096 *:443 *:* users:(("xray",pid=12345,fd=7)) |
或者:
1 | LISTEN 0 4096 [::]:443 [::]:* users:(("xray",pid=12345,fd=7)) |
再看系统是否允许 IPv4 映射到 IPv6 socket:
1 | sysctl net.ipv6.bindv6only |
推荐结果:
1 | net.ipv6.bindv6only = 0 |
如果是 1,就改成 0:
1 | echo 'net.ipv6.bindv6only = 0' > /etc/sysctl.d/99-ipv6-dualstack.conf |
如果你改完仍然只看到 0.0.0.0:443,说明这个入站没有监听 IPv6;如果只看到 [::]:443,还要结合 bindv6only = 0 判断是否同时接 IPv4。
5. VPS 防火墙和云平台安全组
3x-ui/Xray 已经监听,不代表公网一定能连进来。还要放行两层:
1 | VPS 系统防火墙 |
Debian / Ubuntu 上如果用 ufw:
1 | ufw allow 443/tcp |
如果用 nftables 或云厂商防火墙,确认 TCP 443 同时允许:
1 | IPv4 来源:0.0.0.0/0 |
如果你的面板管理端口也暴露在公网,建议至少做到:
- 面板端口不要用默认值
- 面板路径和用户名密码不要太弱
- 面板只允许自己的固定 IP 访问
- 3x-ui 面板和代理入站不要共用同一个易猜路径
- 定期备份 3x-ui 数据库和配置
6. 客户端怎么写 IPv4 / IPv6 两个节点
3x-ui 生成的分享链接通常会把服务器地址写成当前域名或 IP。双栈最稳的做法仍然是复制两个节点:
1 | 3x-ui-Reality-IPv4 |
IPv4 节点:
1 | server = 203.0.113.10 |
IPv6 节点:
1 | server = 2001:db8:52c0:41d5::1697 |
如果是 VLESS URI,IPv6 地址必须加中括号:
1 | vless://UUID@[2001:db8:52c0:41d5::1697]:443?...#3x-ui-Reality-IPv6 |
其它参数保持一致:
1 | uuid / id |
如果你是在 OpenClash / mihomo 里写 YAML,IPv6 地址建议加引号:
1 | server: "2001:db8:52c0:41d5::1697" |
不加引号有时也能解析,但加引号更稳。
7. 3x-ui 双栈排错顺序
如果 IPv4 节点能用,IPv6 节点不能用,按这个顺序查:
1 | ip -6 addr |
判断逻辑:
1 | VPS 自己 ping6 外网不通:VPS IPv6 路由没好 |
8. 3x-ui 和本文推荐方案怎么配合
如果你采用本文推荐的家庭网络结构:
1 | LAN 不给手机电脑下发 IPv6 |
那么 3x-ui 只负责服务器端入站。软路由侧仍然按前面的 OpenClash / HomeProxy 方法设置:
1 | DHCP/DNS 不过滤 AAAA |
这样既能利用 VPS 的 IPv6,又不会让 LAN 终端直接拿公网 IPv6 出去,逻辑最清楚,泄漏风险也最低。
参考:
3x-ui 官方 Wiki:Configuration
Xray 官方文档:Inbound Proxy
十一、sing-box 客户端:IPv4 / IPv6 两个节点并存
最稳方式不是让一个域名自动选择,而是复制两个节点:
1 | DMIT-Reality-IPv4 |
IPv4 节点:
1 | "server": "你的_VPS_IPv4" |
IPv6 节点:
1 | "server": "2001:db8:52c0:41d5::1697" |
其它参数保持一致:
1 | server_port: 443 |
这样你可以在 OpenClash / HomeProxy 里分别测速:
- IPv4 节点晚高峰是否拥堵
- IPv6 节点是否更稳
- 哪个丢包更低
- 哪个 YouTube/下载速度更好
十二、DNS 是防泄漏关键:不要只盯代理节点
IPv6 泄漏常见不是代理节点错了,而是 DNS 错了。
常见泄漏路径:
1 | IPv4 走代理 |
或者:
1 | 代理节点走 IPv4 |
防泄漏要看三件事:
- 终端有没有公网 IPv6。
- DNS 是否由代理核心接管。
- IPv6 目标流量是否被 TUN/透明代理/防火墙接管。
如果你选择“LAN 禁 IPv6,软路由自己用 IPv6”,泄漏面会小很多。
该不该过滤 AAAA?
这个选项最容易被误用。
| 场景 | 建议 |
|---|---|
| 只想全网 IPv4,完全不用 IPv6 | 可以临时过滤 AAAA |
| LAN 终端禁 IPv6,但软路由要用 IPv6 节点 | 不建议过滤 AAAA |
| OpenClash/HomeProxy 接管 DNS | 不建议在 dnsmasq 先过滤 AAAA |
| 全 LAN IPv6 且 TUN/TProxy 已接管 IPv6 | 由代理核心按规则处理 AAAA |
| 排查泄漏临时止血 | 可以短时间过滤,定位完再恢复 |
一句话:过滤 AAAA 是粗暴开关,不是精细分流。真正稳定的做法是让 mihomo / sing-box 接管 DNS,再用规则决定哪些域名返回 A、哪些返回 AAAA、哪些走代理解析。
十三、完整排错命令
1. 软路由检查 IPv6
1 | ip -6 addr |
如果这两条 ping6 能通,说明软路由 IPv6 出站基础是通的。公共 IPv6 有丢包不一定代表配置错,还要看到 VPS IPv6 是否稳定。
2. 软路由测试 VPS IPv6
1 | ping6 2001:db8:52c0:41d5::1697 |
这里的地址是脱敏示例,实际请换成你的 VPS IPv6。理想结果是:
1 | 4 packets transmitted, 4 packets received, 0% packet loss |
BusyBox nc 很多时候不支持 -6 -vz。可以直接:
1 | nc 2001:db8:52c0:41d5::1697 443 |
如果光标卡住,通常说明 TCP 连上了,按 Ctrl+C 退出。
也可以:
1 | curl -6 -vk --connect-timeout 5 https://[2001:db8:52c0:41d5::1697]:443 |
只要看到 Connected,就说明端口可达。Reality 后续 TLS 报错不一定代表端口不通。
3. Fake-IP 环境下,curl -6 域名失败不一定是故障
如果你运行 OpenClash / mihomo,并且 DNS 使用 Fake-IP,执行:
1 | curl -6 -v --connect-timeout 10 https://ifconfig.co |
可能会看到类似:
1 | Host ifconfig.co:443 was resolved. |
198.18.x.x 是 Fake-IP 地址段,不是网站真实 IPv4。这个现象说明 DNS 请求被代理核心接管了,并不能说明 IPv6 坏了。
这时不要用 curl -6 域名 判断 IPv6,而应该用:
1 | ping6 2001:db8:52c0:41d5::1697 |
如果你确实想测试真实 IPv6 出口,可以临时暂停 OpenClash / HomeProxy,再运行:
1 | curl -6 https://icanhazip.com |
4. VPS 检查 sing-box 双栈监听
1 | sing-box version |
5. 终端检查是否有公网 IPv6
Mac / Linux:
1 | ifconfig | grep inet6 |
Windows:
1 | ipconfig |
如果只有 fe80:: 和 ::1,没有公网 IPv6,说明终端没有拿到公网 IPv6。
6. 浏览器泄漏测试
1 | https://ip.sb |
重点看:
- 有没有家宽公网 IPv6
- DNS 服务器是不是运营商
- WebRTC 有没有暴露本地公网 IPv6
- 出口 IP 是不是代理节点
7. DNS 污染和代理接管测试
在电脑上测试:
1 | nslookup youtube.com |
如果你使用 Fake-IP,看到 198.18.0.x 这类地址通常是正常的,说明请求被代理核心接管了。
如果看到运营商 DNS 返回的一堆异常公网 IP,或者返回了真实 AAAA 后浏览器走 IPv6 直连,大概率是 DNS 劫持或 DNS 分流没有生效。
在软路由上看代理核心日志:
1 | logread -f |
或者在 OpenClash / HomeProxy 面板里看实时连接。访问海外网站时,如果连接列表里完全没有对应域名,说明流量没有进代理核心,要回去检查 DNS 劫持、TUN/TProxy、IPv6 接管和防火墙转发。
十四、三种推荐工作流
工作流 A:最省心防泄漏
1 | LAN RA/DHCPv6/NDP 全禁 |
适合:普通用户、怕泄漏、只求稳定。
工作流 B:推荐双栈代理
1 | LAN RA/DHCPv6/NDP 全禁 |
适合:你现在这种情况。
这是速度、稳定和防泄漏之间最好的平衡点。
工作流 C:全 LAN IPv6
1 | LAN 开 RA |
适合:懂 IPv6、防火墙和透明代理的人。
配置复杂,但最完整。
十五、最终建议
如果你用 OpenWrt / iStoreOS + OpenClash 或 HomeProxy,我建议采用:
1 | LAN 不下发 IPv6 |
最终检查清单:
1 | wan6 有公网 IPv6 地址 |
如果 curl -6 域名 解析到 198.18.x.x 并失败,不要立刻怀疑 IPv6 配置。那通常只是 Fake-IP 正在工作。真正要看的,是软路由能不能 ping6 通 VPS IPv6,以及 VPS 的 443 端口是否能连上。
十六、配置模板下载
下面这两份是已经脱敏的模板文件,只保留结构和关键写法。里面的 203.0.113.x、2001:db8::、00000000-0000-0000-0000-000000000000、YOUR_REALITY_PUBLIC_KEY、YOUR_REALITY_SHORT_ID 都是占位符,不能直接使用。
替换时重点改这些字段:
1 | server:你的 VPS IPv4 / IPv6 |
如果是 OpenClash YAML,IPv6 地址建议加引号:
1 | server: "2001:db8:52c0:41d5::1697" |
你的目标不是“全网都开 IPv6”,而是“该用 IPv6 的地方用 IPv6,不该泄漏的地方不泄漏”。
一句话总结:
IPv6 代理不冲突的关键,是把终端 IPv6、软路由 IPv6、节点连接 IPv6、目标网站 IPv6 分开管理。只要这四层不混在一起,OpenWrt、HomeProxy、OpenClash、sing-box、mihomo 就可以稳定共存。