OpenClash:LAN 开原生 IPv6,国内直连、国外代理,并避免 DNS 泄漏

这份教程记录的是一种家庭软路由常用方案:

1
2
3
4
5
LAN 终端拿到原生公网 IPv6
国内网站直连,保持速度
国外网站走代理
DNS 查询由路由器和 OpenClash 接管
避免国外访问时暴露家宽 IPv4 / IPv6 / 本地运营商 DNS

这不是“全局代理”方案,也不是“禁用 LAN IPv6”方案。它的目标是:IPv6 可以正常下发给 LAN 设备,但国外流量不能绕过 OpenClash 直连出去。


一、最终效果应该是什么

设置完成后,应该看到:

1
2
3
4
5
Mac / 手机:能拿到 2409、2408、240e、2xxx 这类公网 IPv6
国内网站:直连家宽 IPv4 / IPv6,速度正常
国外网站:显示 VPS IPv4 / VPS IPv6
DNS Leak:不显示本地运营商 DNS
WebRTC:不暴露家宽公网 IPv6

如果访问国外检测站时显示 VPS IPv6,说明 OpenClash 接管成功。

如果访问国内服务时显示家宽 IPv6,这是国内直连分流的正常结果,不算泄漏。


二、OpenWrt LAN 接口设置

路径:

1
网络 -> 接口 -> lan -> 高级设置

LAN 高级设置:委派 IPv6 前缀和前缀分配长度 64

关键设置:

1
2
3
4
5
6
7
8
委派 IPv6 前缀:勾选
IPv6 前缀分配长度:64
IPv6 后缀:::1 可以保留
IPv6 优先级:0 可以保留
使用自定义 DNS 服务器:留空
DNS 搜索域名:留空
覆盖 IPv4 路由表:未指定
覆盖 IPv6 路由表:未指定

重点是:

1
IPv6 前缀分配长度:64

如果这里是“已禁用”,LAN 设备通常只能拿到 fe80:: 链路本地地址,拿不到公网 IPv6。

设置为 64 后,Mac 上执行:

1
ifconfig | grep inet6

应该能看到类似:

1
2409:xxxx:xxxx:xxxx:....

三、LAN DHCP 服务器 IPv6 设置

路径:

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

LAN DHCPv6 设置:RA/DHCPv6、IPv6 DNS 和 NDP 代理

推荐:

1
2
3
4
5
6
7
8
9
10
指定的主接口:不勾选
RA 服务:服务器模式
DHCPv6 服务:服务器模式 或 无状态模式
PD 最小长度:留空
通告的 IPv6 DNS 服务器:留空
通告加密 DNS 服务器:留空
本地 IPv6 DNS 服务器:勾选
通告的 DNS 域名:留空
NTP 服务器:不选择
NDP 代理:已禁用

重点是:

1
2
通告的 IPv6 DNS 服务器:留空
本地 IPv6 DNS 服务器:勾选

这样 LAN 设备可以拿到公网 IPv6,但 DNS 仍然指向路由器,而不是直接拿到运营商 IPv6 DNS。

IPv6 RA 设置

路径:

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

LAN IPv6 RA 设置:默认路由、SLAAC 和 RA 标识

推荐保持:

1
2
3
4
5
默认路由器:自动
启用 SLAAC:勾选
RA 标识:其他配置
NAT64 前缀:留空
RA 周期、生命周期、MTU:默认即可

这里不需要额外通告 NAT64 前缀。SLAAC 开启后,macOS、iOS、Android 等终端可以自动生成公网 IPv6 地址。


四、OpenWrt DHCP/DNS 设置

1. 常规设置

路径:

1
网络 -> DHCP/DNS -> 常规

推荐:

1
2
3
4
5
6
7
DNS 重定向:不勾选
唯一授权:勾选
本地解析这些项目:/lan/
本地域名:lan
扩展 HOSTS 文件:勾选
顺序分配 IP:不勾选
所有服务器:不勾选

如果 OpenClash 已经做本地 DNS 劫持,不建议在这里再开一层 DNS 重定向,避免重复劫持导致排错困难。

2. 转发设置

路径:

1
网络 -> DHCP/DNS -> 转发

DNS 转发填 OpenClash 的本地 DNS 端口:

1
127.0.0.1#7874

有些 OpenClash 版本可能是 1053,以 OpenClash 实际本地 DNS 监听端口为准。

不要在这里填运营商 DNS 或公共 IPv6 DNS,例如:

1
2
3
4
5
2400:3200::1
2400:3200:baba::1
2001:4860:4860::8888
2606:4700:4700::1111
运营商 IPv6 DNS

3. 转发附加信息

保持:

1
2
3
4
添加请求者 MAC 地址:关
在转发查询之前移除 MAC 地址:不勾选
在转发请求时添加子网地址:留空
在转发查询之前移除子网地址:不勾选

不要开启 EDNS Client Subnet,也不要把客户端 MAC 信息带给上游 DNS。

4. 过滤器

路径:

1
网络 -> DHCP/DNS -> 过滤器

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

推荐:

1
过滤 IPv6 AAAA 记录:不勾选

你要用 IPv6 分流,就不要在 dnsmasq 底层提前切掉 AAAA。AAAA 应该交给 OpenClash / mihomo 决定怎么走。


五、OpenClash 插件设置

1. 模式设置

OpenClash 模式设置:Fake-IP TUN 和 Rule 规则模式

推荐:

1
2
模式:Rule / 规则模式
不要使用 Global 全局模式

你的目标是国内直连、国外代理,所以不要开全局代理。

2. DNS 设置

路径:

1
服务 -> OpenClash -> 插件设置 -> DNS 设置

OpenClash DNS 设置:使用 Dnsmasq 转发,关闭第二 DNS

推荐:

1
2
本地 DNS 劫持:使用 Dnsmasq 转发
启用第二 DNS 服务器:不勾选

数据流应是:

1
LAN 设备 -> dnsmasq -> OpenClash DNS -> 按规则解析

3. IPv6 设置

路径:

1
服务 -> OpenClash -> 插件设置 -> IPv6 设置

OpenClash IPv6 设置:开启 IPv6 流量代理、AAAA 解析和 IPv6 Fake-IP

推荐:

1
2
3
4
5
IPv6 流量代理:开启
IPv6 代理模式:TUN 模式
允许 IPv6 类型 DNS 解析:开启
Fake-IP 地址范围 IPv6 Cidr:fdfe:dcba:9876::/64
实验性:绕过指定区域 IPv6:禁用

“绕过指定区域 IPv6”建议禁用。国内直连应该交给规则文件处理,不要让 OpenClash 在内核外再绕一层,否则容易出现看似分流、实际绕过代理核心的情况。

本地 IPv6 绕过地址可以保留本地、链路本地、组播、文档地址,例如:

1
2
3
4
5
6
7
8
::/128
::1/128
::ffff:0:0/96
64:ff9b::/96
100::/64
2001:db8::/32
fe80::/10
ff00::/8

不要把下面这个 Fake-IP IPv6 段加入绕过:

1
fdfe:dcba:9876::/64

六、OpenClash 配置文件关键项

配置文件建议保留这些核心字段。

1. 顶层 IPv6

1
2
3
4
ipv6: true
mode: rule
allow-lan: true
bind-address: "*"

2. TUN 接管

1
2
3
4
5
6
7
8
9
10
tun:
enable: true
stack: mixed
mtu: 1492
dns-hijack:
- any:53
- tcp://any:53
auto-route: true
auto-detect-interface: true
strict-route: true

3. DNS 与 IPv6 Fake-IP

1
2
3
4
5
6
7
8
dns:
enable: true
listen: 0.0.0.0:1053
ipv6: true
respect-rules: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-range6: fdfe:dcba:9876::/64

注意:IPv6 Fake-IP 不要写成 fake-ip-range 数组,要用:

1
fake-ip-range6: fdfe:dcba:9876::/64

4. DNS 分流思路

国内域名用国内公共 DNS,保证速度:

1
2
3
4
5
6
7
nameserver-policy:
geosite:private,cn,apple-cn,microsoft@cn,steam@cn:
- 223.5.5.5
- 119.29.29.29
"+.cn":
- 223.5.5.5
- 119.29.29.29

国外域名用代理 DoH,避免国外解析走本地:

1
2
3
geosite:geolocation-!cn:
- https://1.1.1.1/dns-query#PROXY
- https://dns.google/dns-query#PROXY

代理节点自身解析用国内 DNS 即可,尤其节点 server 直接填 IP 时影响很小:

1
2
3
proxy-server-nameserver:
- 223.5.5.5
- 119.29.29.29

5. 规则顺序

国内直连、国外代理的规则大致是:

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
rules:
- GEOSITE,private,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,169.254.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
- IP-CIDR6,::1/128,DIRECT,no-resolve
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
- IP-CIDR6,ff00::/8,DIRECT,no-resolve

- GEOSITE,google,PROXY
- GEOSITE,youtube,PROXY
- GEOSITE,telegram,PROXY
- GEOSITE,github,PROXY
- DOMAIN-SUFFIX,openai.com,PROXY
- DOMAIN-SUFFIX,chatgpt.com,PROXY
- DOMAIN-SUFFIX,anthropic.com,PROXY
- DOMAIN-SUFFIX,claude.ai,PROXY

- GEOSITE,category-games@cn,DIRECT
- GEOSITE,apple-cn,DIRECT
- GEOSITE,microsoft@cn,DIRECT
- GEOSITE,steam@cn,DIRECT
- DOMAIN-SUFFIX,cn,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT

- GEOSITE,geolocation-!cn,PROXY
- MATCH,PROXY

分流模式下,不要把 Fake-IP 段写成最前面的强制代理规则,例如不要这样写:

1
2
- IP-CIDR,198.18.0.0/16,PROXY,no-resolve
- IP-CIDR6,fdfe:dcba:9876::/64,PROXY,no-resolve

否则 fake-ip 命中的连接可能被提前打进 PROXY,国内直连规则就失去意义。

也不建议写宽泛的:

1
- IP-CIDR6,fc00::/7,DIRECT,no-resolve

因为 IPv6 Fake-IP 段常常也在 ULA 范围内,容易误伤。


七、检测方法

1. LAN 是否拿到公网 IPv6

Mac 执行:

1
ifconfig | grep inet6

看到类似下面这种就是公网 IPv6:

1
2
3
4
2409:....
2408:....
240e:....
2xxx:....

只有 fe80:: 说明只是链路本地 IPv6,LAN 没有下发公网 IPv6。

2. OpenClash 开启时测试国外

浏览器打开:

1
2
3
https://browserleaks.com/ip
https://ipleak.net
https://ip.sb

理想结果:

1
2
3
4
IPv4:VPS IPv4
IPv6:VPS IPv6
DNS:不显示本地运营商 DNS
WebRTC:不显示家宽 IPv6

3. 直连 IPv6 测试

如果要测试原生 IPv6,可以临时关闭 OpenClash,或者给测试域名单独加 DIRECT 规则,然后执行:

1
curl -6 --noproxy '*' https://v6.ident.me

直连时应该显示家宽 IPv6,例如 2409:...

OpenClash 开启并代理时,显示 VPS IPv6 是正常的。

4. 国内直连测试

访问国内网站或国内 IP 查询服务时,显示家宽 IPv4 / IPv6 是正常的。

这不是泄漏,因为你的目标就是国内直连。

真正的问题是:访问国外网站时显示家宽 IPv6。


八、常见错误

错误 1:LAN 口 IPv6 前缀分配长度是“已禁用”

结果:

1
2
终端只有 fe80::
没有 2409 / 2408 / 240e / 2xxx 公网 IPv6

解决:

1
IPv6 前缀分配长度改为 64

错误 2:通告了运营商 IPv6 DNS

结果:

1
终端可能绕过路由器,直接问运营商 DNS

解决:

1
2
3
通告的 IPv6 DNS 服务器留空
本地 IPv6 DNS 服务器勾选
DNS 转发到 127.0.0.1#7874

错误 3:过滤 AAAA

结果:

1
2
IPv6 分流判断不完整
IPv6 节点可能解析失败

解决:

1
过滤 IPv6 AAAA 记录不要勾选

错误 4:绕过指定区域 IPv6

结果:

1
2
某些 IPv6 流量可能绕过 OpenClash 核心
排错困难

解决:

1
2
绕过指定区域 IPv6 禁用
用规则决定 DIRECT / PROXY

错误 5:把分流配置改成全局代理

结果:

1
2
国内网站也走代理
国内 App、银行、视频、下载速度变差

解决:

1
2
3
保留 GEOSITE,cn,DIRECT
保留 GEOIP,CN,DIRECT
最后 MATCH,PROXY

九、最终推荐组合

1
2
3
4
5
6
7
8
LAN:下发原生 IPv6,IPv6 前缀分配长度 64
DNS:LAN 终端只拿路由器 DNS
dnsmasq:转发到 OpenClash 本地 DNS 端口
OpenClash:Rule 模式
IPv6:流量代理开启,TUN 模式
DNS:允许 AAAA,启用 IPv6 Fake-IP
规则:国内 DIRECT,国外 PROXY
检测:国外不显示家宽 IP,DNS 不显示本地运营商

一句话总结:

不要禁用 IPv6,也不要全局代理。让 LAN 正常拿原生 IPv6,让 OpenClash 接管 DNS 和国外流量,国内仍然按规则直连。