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 是怎么工作的:

  1. 运营商的 BRAS 给软路由 WAN 口下发 IPv6 地址。
  2. 同时通过 DHCPv6-PD 下发一个前缀,常见是 /60/56,也可能是 /64
  3. OpenWrt 收到 PD 前缀后,把其中一段 /64 分配给 LAN。
  4. LAN 侧的 odhcpd 发送 RA,也就是 Router Advertisement,告诉内网设备这里有 IPv6 路由。
  5. 手机、电脑收到 RA 后,通过 SLAAC 自动生成自己的公网 IPv6 地址。
  6. 设备之间和网关之间通过 NDP 做邻居发现。

这和 IPv4 最大的不同是:IPv6 通常不是靠 NAT 把内网地址“藏”起来,而是终端直接拿公网地址。也正因为如此,一旦 LAN 终端拿到了公网 IPv6,而代理插件又没有接管 IPv6 流量,就可能绕过代理直连。

这也是最推荐的折中方案:

1
2
3
电脑/手机不拿公网 IPv6
软路由自己保留 IPv6 出口
代理核心用 IPv6 去连接 VPS 节点

链路是:

1
2
3
4
5
6
7
手机/电脑
↓ IPv4 / LAN
OpenWrt / iStoreOS 软路由
↓ IPv6 出站
VPS IPv6 Reality 节点

互联网

这样既能利用 VPS 的 IPv6 节点,又能降低终端 IPv6 直连泄漏风险。

OpenWrt 软路由 IPv6 安全工作流

二、最终设置总览图

如果你只是想先照着配置,直接按这张图来:

OpenWrt IPv6 设置总览

这一套配置的目标不是“全局关闭 IPv6”,而是:

1
2
3
4
WAN6:保留 IPv6,让软路由自己能访问 IPv6
LAN:不下发 IPv6,电脑手机不拿公网 IPv6
DNS:不在 dnsmasq 底层过滤 AAAA
代理核心:OpenClash / HomeProxy 使用 VPS IPv6 节点

最终链路是:

1
2
3
4
5
电脑/手机
-> IPv4 到软路由
-> OpenClash / HomeProxy / sing-box / mihomo
-> 软路由用 WAN6 的 IPv6 连接 VPS
-> VPS IPv6 节点出站

这样不会影响 VPS 的 IPv6,也不会影响软路由自己使用 IPv6。它只是不让 LAN 里的电脑、手机直接拿家宽公网 IPv6,从而降低 IPv6 直出和 WebRTC 暴露风险。

三、IPv6 地址先分清:公网、ULA、链路本地

ip -6 addr 时,最重要的是区分三类地址。

1. 公网 IPv6:常见 2xxx:3xxx: 开头

例如,下面使用 2001:db8::/32 文档专用前缀做脱敏示例:

1
2
2001:db8:2409:b120::18/64
2001:db8:52c0:41d5::1697/64

真实运营商或机房分配的公网 IPv6 可以在公网路由;2001:db8::/32 只用于文档演示,不能实际路由。
如果电脑、手机拿到了这类地址,就存在 IPv6 直连和 WebRTC 暴露的可能。

2. ULA 本地地址:fdxx: 开头

例如:

1
2
fd12:3456:789a::1/60
fd12:3456:789a::/48

这是 IPv6 的本地地址段,类似 IPv4 的:

1
2
3
192.168.0.0/16
10.0.0.0/8
172.16.0.0/12

它不能直接在公网路由。
所以 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
2
3
LAN 终端没有公网 IPv6
软路由 WAN 有 IPv6
HomeProxy / OpenClash 可以用 IPv6 连接 VPS

1. WAN 侧保持 IPv6 正常

LuCI / iStoreOS 界面建议先看:

1
网络 -> 接口 -> WAN6

常见配置:

1
2
3
4
协议:DHCPv6 客户端
请求 IPv6 地址:try 或 auto
请求 IPv6 前缀长度:automatic
使用内置的 IPv6 管理:按系统默认,一般保持启用

如果你点进 wanwan6 的“DHCP 服务器 -> IPv6 设置”,这里不要给 WAN 口开 RA / DHCPv6:

1
2
3
4
指定的主接口:不勾选
RA 服务:已禁用
DHCPv6 服务:已禁用
NDP 代理:已禁用

WAN 口是上联口,不是给内网设备发 IPv6 的接口。这里保持禁用是正常的。

WAN 口 DHCP 服务器 IPv6 设置保持禁用

图中是在 接口 -> wan -> DHCP 服务器 -> IPv6 设置,RA / DHCPv6 / NDP 都保持已禁用。

wan6 -> 高级设置 建议这样看:

1
2
3
4
5
6
7
8
使用该接口的网关作为默认网关:勾选
自动获取 DNS 服务器:可以勾选
覆盖 IPv4 路由表:未指定
覆盖 IPv6 路由表:未指定
IPv6 源路由:勾选
委派 IPv6 前缀:勾选
IPv6 前缀分配长度:已禁用
IPv6 前缀过滤器:不选

wan6 高级设置:默认网关、DNS、IPv6 源路由与前缀委派

wan6 高级设置:IPv6 前缀分配长度保持已禁用

保存应用后,先确认 WAN6 能拿到运营商分配的公网 IPv6 和前缀委派。中国大陆家宽常见公网 IPv6 前缀可能是 2408:2409:240e: 等开头。不要把真实地址截图直接发到公开文章里,演示时建议改成 2001:db8::/32 这类文档地址。

在软路由 SSH 中检查:

1
2
3
4
5
ip -6 addr
ip -6 route
ping6 2606:4700:4700::1111
ping6 2001:4860:4860::8888
ping6 2001:db8:52c0:41d5::1697

上面最后一条是脱敏示例,请换成你自己的 VPS IPv6。只要软路由能 ping6 通公共 IPv6 和 VPS IPv6,就说明 WAN6 基础链路已经成立。

如果你正在运行 OpenClash / mihomo 的 Fake-IP 模式,curl -6 域名 可能会失败,这不一定代表 IPv6 坏了。后面排错部分会单独解释。

2. LAN 侧不下发 IPv6

LuCI / iStoreOS 界面:

1
网络 -> 接口 -> LAN -> DHCP 服务器 -> IPv6 设置

建议:

1
2
3
RA 服务:已禁用
DHCPv6 服务:已禁用
NDP 代理:已禁用

LAN 口 IPv6 设置:RA、DHCPv6、NDP 全部禁用

如果你想更彻底,不让 br-lan 拿公网 IPv6 前缀:

1
2
3
网络 -> 接口 -> LAN -> 高级设置
IPv6 分配长度:已禁用
委派 IPv6 前缀:可以取消勾选

LAN 高级设置:如果 IPv6 前缀分配长度还是 60,需要改成已禁用

上面这张图是一个容易踩坑的位置:如果这里还显示 60,说明 LAN 仍然在拿一段 IPv6 前缀。按照本文的防泄漏方案,应该把它改成“已禁用”。

SSH 对应命令:

1
2
3
4
5
6
7
8
uci set dhcp.lan.ra='disabled'
uci set dhcp.lan.dhcpv6='disabled'
uci set dhcp.lan.ndp='disabled'
uci delete network.lan.ip6assign
uci commit dhcp
uci commit network
/etc/init.d/odhcpd restart
/etc/init.d/network reload

注意:删除 ip6assign 不是必须。只要 RA / DHCPv6 已禁用,终端通常就拿不到公网 IPv6。

如果你刚刚从“LAN 开 IPv6”改成“LAN 禁 IPv6”,ip -6 addr 里可能还能看到 br-lan 残留一条公网 IPv6,并显示:

1
2
3
scope global deprecated
preferred_lft 0sec
valid_lft xxxxsec

这通常是旧前缀残留,等 valid_lft 到期会消失。想立刻清掉,可以重启网络或重启软路由。

3. DHCP/DNS 里不要乱过滤 AAAA

很多教程会让你去:

1
网络 -> DHCP/DNS -> 高级设置

然后勾选“过滤 IPv6 AAAA 记录”。这在“全网只用 IPv4”的极简场景里可以临时止血,但不适合你这种想让软路由自己使用 IPv6 节点的配置。

建议:

1
2
3
4
过滤本地包:可以保持勾选
过滤私有地址:可以保持勾选
过滤 IPv6 AAAA 记录:不要勾选
过滤 IPv4 A 记录:不要勾选

DHCP/DNS 过滤器:不要勾选过滤 IPv6 AAAA 记录

原因很简单:HomeProxy / OpenClash / sing-box / mihomo 后面可能需要解析 IPv6 节点域名,或者需要根据 AAAA 记录做规则判断。DNS 是否返回 AAAA,应该交给代理核心和分流规则控制,不建议在 dnsmasq 底层一刀切。

4. 判断终端是否真的没有公网 IPv6

在 Mac / Linux:

1
ifconfig | grep inet6

如果只有:

1
2
::1
fe80::

没有运营商分配的 2xxx:3xxx: 等公网 IPv6,就说明 LAN 没给终端下发公网 IPv6。

也可以打开:

1
2
3
4
https://test-ipv6.com
https://browserleaks.com/webrtc
https://ipleak.net
https://ip.sb

理想状态:

  • 终端没有本地公网 IPv6
  • WebRTC 不暴露家宽公网 IPv6
  • 访问出口显示代理 IP

六、推荐方案二:LAN 开 IPv6,但必须完整防泄漏

如果你希望电脑、手机也有原生 IPv6,那么 LAN 可以开启 RA / DHCPv6。

适合:

  • 家庭网络全栈 IPv6
  • NAS / 内网服务需要 IPv6
  • 你清楚自己在做 IPv6 防火墙和透明代理

不适合:

  • 只想省心防泄漏
  • 不确定 OpenClash/HomeProxy 是否接管 IPv6
  • 不想处理 WebRTC、DNS、AAAA 泄漏

典型 LAN 配置:

1
2
3
4
RA 服务:服务器模式
DHCPv6 服务:服务器模式或已禁用
NDP 代理:已禁用
IPv6 分配长度:64

如果只用 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-InputAllow-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
2
3
4
5
LAN 不下发公网 IPv6
HomeProxy/sing-box 跑在软路由
节点 server 填 VPS IPv6
软路由用 IPv6 连接 VPS
终端只通过 IPv4 把流量交给软路由

这时终端没有 IPv6,也不影响 HomeProxy 使用 IPv6 节点。

HomeProxy 配置重点

  1. 路由设置里优先确认这几项:
1
2
3
4
代理 IPv6 流量:按需求开启
路由任何流量 / Route Any:建议开启
嗅探 / Sniffing:建议开启
TUN 模式:推荐使用

其中 Sniffing 很关键。开启后,即使设备访问的是 IP,sing-box 也可以尝试从 TLS ClientHello 的 SNI 或 HTTP Host 中识别真实域名,再重新应用规则。它不能解决所有问题,但对透明代理和复杂分流非常有用。

  1. 节点地址可以直接填 VPS IPv6:
1
2001:db8:52c0:41d5::1697
  1. 如果使用 URI,IPv6 地址要加方括号:
1
vless://UUID@[2001:db8:52c0:41d5::1697]:443?...#VLESS-Reality-IPv6
  1. Reality 参数保持不变:
1
2
3
4
5
6
UUID 不变
flow: xtls-rprx-vision
SNI 不变
public key 不变
short id 不变
fingerprint 不变
  1. DNS 不要让终端自己乱跑。

HomeProxy/sing-box 应该统一处理 DNS,终端只把请求交给软路由。这样比较容易控制 AAAA、IPv6 出站和防泄漏。

HomeProxy DNS 建议

HomeProxy 的 DNS 可以按“国内直连、国外代理”的思路拆:

1
2
3
4
默认/直连 DNS:223.5.5.5、119.29.29.29、2400:3200::1
代理/远程 DNS:https://1.1.1.1/dns-query、https://8.8.8.8/dns-query
国内域名:走默认 DNS
非国内域名:走代理 DNS

如果你的节点本身只支持 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
2
curl -6 ip.sb
ping6 2606:4700:4700::1111

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
2
DMIT-Reality-IPv4 -> server 填 IPv4
DMIT-Reality-IPv6 -> server 填 IPv6

3. mihomo YAML 示例:保留 IPv6 能力,但避免终端泄漏

下面是核心思路,不是完整模板:

1
2
3
4
5
6
7
8
9
10
11
12
ipv6: true

dns:
enable: true
enhanced-mode: fake-ip
listen: 0.0.0.0:7874
nameserver:
- https://223.5.5.5/dns-query
- https://1.1.1.1/dns-query
proxy-server-nameserver:
- https://223.5.5.5/dns-query
- https://1.1.1.1/dns-query

这里的重点不是盲目开 ipv6: true,而是:

  • LAN 终端没有公网 IPv6。
  • DNS 由 OpenClash/mihomo 接管。
  • 代理节点 IPv6 是软路由自己去连接。
  • 终端不能绕过软路由直连 IPv6。

如果 LAN 开了公网 IPv6,就必须配合 TUN / 防火墙接管 IPv6,否则不建议开启终端 IPv6。

4. OpenClash 推荐组合:Fake-IP + TUN/TProxy + DNS 接管

如果你追求比较完整的国内外分流,OpenClash/mihomo 更推荐:

1
2
3
4
DNS 模式:Fake-IP
运行模式:TUN 或 TProxy
IPv6 支持:按需求开启
AAAA 处理:交给 mihomo DNS,不在 dnsmasq 底层过滤

Fake-IP 的作用是让终端拿到一个假的地址,例如 198.18.0.x,从而把连接强行吸进 mihomo。mihomo 再根据域名、规则集、策略组和节点状态决定真实连接怎么走。

全 LAN IPv6 时尤其要注意:

1
2
3
只开 Fake-IP 不够
只接管 IPv4 不够
只让 DNS 返回 AAAA 也不够

你需要确认 OpenClash 底层确实接管 IPv6 连接。不同版本界面名称可能不同,常见会出现在:

1
2
3
全局设置 -> 模式设置 / TUN 设置 / 实验性设置
全局设置 -> DNS 设置
绕过大陆 IP / IPv6 类型 AAAA 相关选项

另外,局域网和本地 IPv6 前缀要放行,不要代理:

1
2
3
4
5
::1/128
fe80::/10
fc00::/7
fd00::/8
ff00::/8

如果你自己有 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
2
- "listen": "0.0.0.0",
+ "listen": "::",

其它配置不要乱动,尤其是:

1
2
3
4
5
6
7
uuid
private_key
short_id
server_name / SNI
handshake server
flow
listen_port

这些参数必须和客户端保持一致。下面是一份完整脱敏示例,重点看 listen 已经从 0.0.0.0 改成了 ::

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "vless",
"tag": "vless-reality-in",
"listen": "::",
"listen_port": 443,
"users": [
{
"name": "user1",
"uuid": "替换成你的UUID",
"flow": "xtls-rprx-vision"
}
],
"tls": {
"enabled": true,
"server_name": "www.microsoft.com",
"reality": {
"enabled": true,
"handshake": {
"server": "www.microsoft.com",
"server_port": 443
},
"private_key": "替换成你的Reality私钥",
"short_id": [
"替换成你的ShortID"
],
"max_time_difference": "1m"
}
}
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"final": "direct"
}
}

这里的 www.microsoft.com 只是示例。如果你原来的 Reality 伪装域名不是它,就继续用你自己的原配置,不要为了照抄示例而更换 SNI。

检查:

1
2
3
sing-box check -c /etc/sing-box/config.json
systemctl restart sing-box
ss -tlpn | grep 443

看到:

1
[::]:443

就说明 IPv6 已监听。

再检查 Linux 是否允许 IPv4 映射到 IPv6 socket:

1
sysctl net.ipv6.bindv6only

如果是:

1
net.ipv6.bindv6only = 0

那么 listen: "::" 通常就是双栈监听。

如果是 1,则只监听 IPv6,需要改:

1
2
3
echo 'net.ipv6.bindv6only = 0' > /etc/sysctl.d/99-ipv6-dualstack.conf
sysctl --system
systemctl restart sing-box

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
2
3
4
同一个 VLESS + Reality + Vision 入站
监听地址改成 IPv6 全地址
IPv4 / IPv6 防火墙都放行 443
客户端复制成 IPv4 节点和 IPv6 节点

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
2
IPv4 入站:0.0.0.0:443
IPv6 入站::::443

这样做通常会端口冲突。正确做法是:同一个入站监听 ::,让系统提供双栈监听能力。

如果你已经有一个 VLESS + Reality + Vision 入站,不建议重建节点。直接编辑原入站,把监听 IP 改成 ::,其它参数保持不变:

1
2
3
4
5
6
7
8
UUID:不变
Reality 私钥:不变
Reality 公钥:不变
Short ID:不变
SNI:不变
Dest:不变
Flow:仍然是 xtls-rprx-vision
端口:仍然是 443

这样客户端只需要新增一个 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
2
3
echo 'net.ipv6.bindv6only = 0' > /etc/sysctl.d/99-ipv6-dualstack.conf
sysctl --system
systemctl restart x-ui

如果你改完仍然只看到 0.0.0.0:443,说明这个入站没有监听 IPv6;如果只看到 [::]:443,还要结合 bindv6only = 0 判断是否同时接 IPv4。

5. VPS 防火墙和云平台安全组

3x-ui/Xray 已经监听,不代表公网一定能连进来。还要放行两层:

1
2
VPS 系统防火墙
云厂商安全组 / 防火墙规则

Debian / Ubuntu 上如果用 ufw

1
2
ufw allow 443/tcp
ufw status

如果用 nftables 或云厂商防火墙,确认 TCP 443 同时允许:

1
2
IPv4 来源:0.0.0.0/0
IPv6 来源:::/0

如果你的面板管理端口也暴露在公网,建议至少做到:

  • 面板端口不要用默认值
  • 面板路径和用户名密码不要太弱
  • 面板只允许自己的固定 IP 访问
  • 3x-ui 面板和代理入站不要共用同一个易猜路径
  • 定期备份 3x-ui 数据库和配置

6. 客户端怎么写 IPv4 / IPv6 两个节点

3x-ui 生成的分享链接通常会把服务器地址写成当前域名或 IP。双栈最稳的做法仍然是复制两个节点:

1
2
3x-ui-Reality-IPv4
3x-ui-Reality-IPv6

IPv4 节点:

1
2
server = 203.0.113.10
port = 443

IPv6 节点:

1
2
server = 2001:db8:52c0:41d5::1697
port = 443

如果是 VLESS URI,IPv6 地址必须加中括号:

1
vless://UUID@[2001:db8:52c0:41d5::1697]:443?...#3x-ui-Reality-IPv6

其它参数保持一致:

1
2
3
4
5
6
7
uuid / id
flow = xtls-rprx-vision
security = reality
sni / servername
pbk / public_key
sid / short_id
fp / fingerprint

如果你是在 OpenClash / mihomo 里写 YAML,IPv6 地址建议加引号:

1
2
server: "2001:db8:52c0:41d5::1697"
port: 443

不加引号有时也能解析,但加引号更稳。

7. 3x-ui 双栈排错顺序

如果 IPv4 节点能用,IPv6 节点不能用,按这个顺序查:

1
2
3
4
5
6
ip -6 addr
ip -6 route
ping6 -c 4 2606:4700:4700::1111
ping6 -c 4 你的_VPS_IPv6
ss -tlpn | grep ':443'
sysctl net.ipv6.bindv6only

判断逻辑:

1
2
3
4
5
VPS 自己 ping6 外网不通:VPS IPv6 路由没好
VPS 能 ping6 外网,但 ss 没有 IPv6 监听:3x-ui/Xray 入站没监听 IPv6
ss 已双栈监听,但外面连不进:安全组或防火墙没放 IPv6 443
外面能连 443,但客户端握手失败:Reality 参数不一致
OpenClash 里 IPv6 节点失败,路由器 ping6 VPS 成功:客户端配置或 DNS/Fake-IP 规则问题

8. 3x-ui 和本文推荐方案怎么配合

如果你采用本文推荐的家庭网络结构:

1
2
3
LAN 不给手机电脑下发 IPv6
软路由自己保留 IPv6
OpenClash / HomeProxy 用 VPS IPv6 节点

那么 3x-ui 只负责服务器端入站。软路由侧仍然按前面的 OpenClash / HomeProxy 方法设置:

1
2
3
4
5
DHCP/DNS 不过滤 AAAA
LAN RA / DHCPv6 / NDP 关闭
wan6 保留 IPv6
OpenClash / HomeProxy 添加 IPv4 节点和 IPv6 节点
哪个线路稳就选哪个

这样既能利用 VPS 的 IPv6,又不会让 LAN 终端直接拿公网 IPv6 出去,逻辑最清楚,泄漏风险也最低。

参考:
3x-ui 官方 Wiki:Configuration
Xray 官方文档:Inbound Proxy

十一、sing-box 客户端:IPv4 / IPv6 两个节点并存

最稳方式不是让一个域名自动选择,而是复制两个节点:

1
2
DMIT-Reality-IPv4
DMIT-Reality-IPv6

IPv4 节点:

1
"server": "你的_VPS_IPv4"

IPv6 节点:

1
"server": "2001:db8:52c0:41d5::1697"

其它参数保持一致:

1
2
3
4
5
6
7
server_port: 443
uuid: 相同
flow: xtls-rprx-vision
server_name / SNI: 相同
public_key: 相同
short_id: 相同
fingerprint: chrome

这样你可以在 OpenClash / HomeProxy 里分别测速:

  • IPv4 节点晚高峰是否拥堵
  • IPv6 节点是否更稳
  • 哪个丢包更低
  • 哪个 YouTube/下载速度更好

十二、DNS 是防泄漏关键:不要只盯代理节点

IPv6 泄漏常见不是代理节点错了,而是 DNS 错了。

常见泄漏路径:

1
2
3
4
IPv4 走代理
AAAA DNS 直连运营商
浏览器拿到 IPv6 目标
IPv6 绕过代理直连

或者:

1
2
3
代理节点走 IPv4
目标网站 IPv6 直连
WebRTC 暴露本地公网 IPv6

防泄漏要看三件事:

  1. 终端有没有公网 IPv6。
  2. DNS 是否由代理核心接管。
  3. 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、哪些走代理解析。

IPv6 Fake-IP 排错示意

十三、完整排错命令

1. 软路由检查 IPv6

1
2
3
4
ip -6 addr
ip -6 route
ping6 2606:4700:4700::1111
ping6 2001:4860:4860::8888

如果这两条 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
2
3
4
Host ifconfig.co:443 was resolved.
IPv6: (none)
IPv4: 198.18.38.103
curl: (7) Could not connect to server

198.18.x.x 是 Fake-IP 地址段,不是网站真实 IPv4。这个现象说明 DNS 请求被代理核心接管了,并不能说明 IPv6 坏了。
这时不要用 curl -6 域名 判断 IPv6,而应该用:

1
2
ping6 2001:db8:52c0:41d5::1697
curl -6 -vk --connect-timeout 5 https://[2001:db8:52c0:41d5::1697]:443

如果你确实想测试真实 IPv6 出口,可以临时暂停 OpenClash / HomeProxy,再运行:

1
2
curl -6 https://icanhazip.com
curl -6 https://api64.ipify.org

4. VPS 检查 sing-box 双栈监听

1
2
3
4
5
sing-box version
sing-box check -c /etc/sing-box/config.json
ss -tlpn | grep 443
sysctl net.ipv6.bindv6only
journalctl -u sing-box --output cat -e

5. 终端检查是否有公网 IPv6

Mac / Linux:

1
ifconfig | grep inet6

Windows:

1
ipconfig

如果只有 fe80::::1,没有公网 IPv6,说明终端没有拿到公网 IPv6。

6. 浏览器泄漏测试

1
2
3
4
https://ip.sb
https://test-ipv6.com
https://ipleak.net
https://browserleaks.com/webrtc

重点看:

  • 有没有家宽公网 IPv6
  • DNS 服务器是不是运营商
  • WebRTC 有没有暴露本地公网 IPv6
  • 出口 IP 是不是代理节点

7. DNS 污染和代理接管测试

在电脑上测试:

1
2
nslookup youtube.com
nslookup openai.com

如果你使用 Fake-IP,看到 198.18.0.x 这类地址通常是正常的,说明请求被代理核心接管了。

如果看到运营商 DNS 返回的一堆异常公网 IP,或者返回了真实 AAAA 后浏览器走 IPv6 直连,大概率是 DNS 劫持或 DNS 分流没有生效。

在软路由上看代理核心日志:

1
logread -f

或者在 OpenClash / HomeProxy 面板里看实时连接。访问海外网站时,如果连接列表里完全没有对应域名,说明流量没有进代理核心,要回去检查 DNS 劫持、TUN/TProxy、IPv6 接管和防火墙转发。

十四、三种推荐工作流

工作流 A:最省心防泄漏

1
2
3
4
LAN RA/DHCPv6/NDP 全禁
终端没有公网 IPv6
OpenClash/HomeProxy 统一接管 DNS
只用 IPv4 节点

适合:普通用户、怕泄漏、只求稳定。

工作流 B:推荐双栈代理

1
2
3
4
LAN RA/DHCPv6/NDP 全禁
软路由本机保留 IPv6
sing-box/mihomo 用 IPv6 连接 VPS
IPv4 / IPv6 两个节点都保留

适合:你现在这种情况。
这是速度、稳定和防泄漏之间最好的平衡点。

工作流 C:全 LAN IPv6

1
2
3
4
5
LAN 开 RA
终端拿公网 IPv6
TUN/透明代理接管 IPv6
DNS 统一接管
防火墙禁止绕过代理直连 IPv6

适合:懂 IPv6、防火墙和透明代理的人。
配置复杂,但最完整。

十五、最终建议

如果你用 OpenWrt / iStoreOS + OpenClash 或 HomeProxy,我建议采用:

1
2
3
4
5
LAN 不下发 IPv6
软路由自己保留 IPv6
VPS sing-box 或 3x-ui/Xray 开双栈监听
客户端建 IPv4 / IPv6 两个 Reality 节点
晚高峰哪个稳用哪个

最终检查清单:

1
2
3
4
5
6
7
8
wan6 有公网 IPv6 地址
ip -6 route 有 default via fe80::... dev eth1
ping6 公共 IPv6 能通
ping6 VPS IPv6 能通,最好 0% 丢包
LAN 的 RA / DHCPv6 / NDP 已禁用
LAN 的 IPv6 分配长度已禁用
DHCP/DNS 没有过滤 IPv6 AAAA
OpenClash / HomeProxy 里单独建立 IPv6 节点

如果 curl -6 域名 解析到 198.18.x.x 并失败,不要立刻怀疑 IPv6 配置。那通常只是 Fake-IP 正在工作。真正要看的,是软路由能不能 ping6 通 VPS IPv6,以及 VPS 的 443 端口是否能连上。

十六、配置模板下载

下面这两份是已经脱敏的模板文件,只保留结构和关键写法。里面的 203.0.113.x2001:db8::00000000-0000-0000-0000-000000000000YOUR_REALITY_PUBLIC_KEYYOUR_REALITY_SHORT_ID 都是占位符,不能直接使用。

替换时重点改这些字段:

1
2
3
4
5
server:你的 VPS IPv4 / IPv6
uuid:你的 UUID
server_name / servername:你的 Reality SNI
public_key:你的 Reality 公钥
short_id:你的 Reality short_id

如果是 OpenClash YAML,IPv6 地址建议加引号:

1
server: "2001:db8:52c0:41d5::1697"

你的目标不是“全网都开 IPv6”,而是“该用 IPv6 的地方用 IPv6,不该泄漏的地方不泄漏”。

一句话总结:

IPv6 代理不冲突的关键,是把终端 IPv6、软路由 IPv6、节点连接 IPv6、目标网站 IPv6 分开管理。只要这四层不混在一起,OpenWrt、HomeProxy、OpenClash、sing-box、mihomo 就可以稳定共存。