Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(二):Google 污染的 DNS 最小修正
⚠️ 实验说明(重要)
本文是系列实践的第二篇,延续(一):极简原则与初版构建中的实验性技术探索。
当前配置仍处于验证阶段:
- 不保证适用于所有网络环境
- 不建议直接复制用于生产或关键业务
- 主要目的为验证“极简规则模型 + 最小 DNS 覆写”的可行性
不同地区的网络环境、DNS 行为及 VPS 线路质量,都会对最终效果产生影响。
若后续稳定运行,将在最终篇中去掉此说明,作为可参考的稳定方案发布。
一、现象:Google 超时,WireGuard 却正常
在上一篇(一)中,我基于 MetaCubeX 数据集构建了一套极简的 WireGuard 分流配置,核心原则是:不覆写 DNS,完全交给 Clash Verge Rev 内核默认值。
上线测试后,国内网站访问正常、多设备行为一致,但 google.com 始终无法打开。查看 Clash Verge Rev 日志,出现如下警告:

关键信息:
[TCP] dial Proxy (match GeoSite/geolocation-!cn) 198.18.0.1:56278
--> www.google.com:443 error: context deadline exceeded
- 分流规则正确:
google.com命中了GEOSITE,geolocation-!cn,正确走入了Proxy组。 - Fake-IP 工作正常:源地址
198.18.0.1是 Clash 返回的假 IP,说明客户端认为自己在和本地通信,连接已被 Clash 接管。 - 错误类型是
context deadline exceeded,意味着 TCP 握手始终无法完成。
但此时检查 ZgoCloud-WG 这个 WireGuard 节点本身的状态,延迟测试结果却很正常:

204ms 的延迟说明 WireGuard 握手和基础连通性完全正常。如果隧道是断的,延迟会直接显示 Timeout 或红色叉号。
二、原因定位:DNS 污染,Fallback 未走代理
表面矛盾的现象指向一个结论:代理隧道本身没问题,问题出在“代理去连接的目标 IP 是错的”。
在极简 v1 配置中,dns 部分没有显式写任何内容,全部依赖 Clash Verge Rev 内核的默认值。合并后的最终配置里,DNS 大致等价于:
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
没有指定 nameserver,也没有 fallback 和 proxy 字段。
此时 Clash 会使用系统默认 DNS(通常是运营商分配或 114.114.114.114)去解析所有域名。在大陆网络环境下,google.com 的 DNS 解析会被污染,返回一个错误的 IP。Fake-IP 模式虽然会返回 198.18.0.x 给客户端,但背后 Clash 会拿着那个 被污染的真实 IP 去建立连接。
即使这个连接后续匹配规则,通过 WireGuard 隧道出口,WireGuard 远端访问的仍然是那个错误 IP,自然无法完成 TCP 握手,最终超时。
本质原因:fallback(境外域名解析)的 DNS 查询是从本地直连发出的,没有走代理,从而被污染。
三、修正理念:只加必要覆写,不做任何冗余
旧的经验告诉我,要想防污染,必须让境外域名的 DNS 查询通过代理隧道发出,拿到正确的 IP。但本次修正严格遵循(一)中的核心目标:不引入额外规则,不变成复杂的 DNS 体系。
最终决定只在订阅文件 zgocloud-metacubex-v1.yaml 中,追加一个极短的 dns 块,只覆盖需要改变的字段,其余仍然信任内核默认值。
最终追加的 DNS 覆写(仅 6 行)
dns:
nameserver:
- https://dns.alidns.com/dns-query # 国内域名使用阿里 DoH,直连
proxy: Proxy # 让 fallback 查询走代理
fallback:
- tls://1.1.1.1:853 # 境外域名使用 Cloudflare DoT
fallback-filter:
geoip: true
geoip-code: CN # 只有非 CN 域名才触发 fallback
为什么这六行就够了?
enable: true,ipv6: false,enhanced-mode: fake-ip,fake-ip-range全部交给内核默认值,无需重写。nameserver直连阿里 DoH,负责所有 CN 域名的解析,保持国内访问速度不变,也不会被污染。fallback指向 Cloudflare 的 DoT,专门用于解析非 CN 域名(如google.com)。proxy: Proxy是唯一的关键:它强制让fallback查询通过Proxy组(也就是 ZgoCloud-WG)发出,而不是本地直连。这样就彻底绕开了本地 DNS 污染,拿到正确的 Google IP。fallback-filter用geoip: true+geoip-code: CN让 Clash 自动根据 IP 库判断域名地理位置,只有非 CN 域名才走 fallback,国内域名老老实实走 nameserver,互不干扰。
整个修改没有加任何域名列表,没有引入新规则,保持了极简结构。
四、启用新配置
修改本地订阅文件后,在 Clash Verge Rev 的 Profiles 页面,点击右上角“重新激活订阅”即可重载配置并重启内核(因为我的订阅是本地文件,效果等同于重载内核)。

重启后,清除浏览器缓存,再次访问 google.com,页面顺利打开。日志中也不再出现 deadline exceeded 的超时警告。
五、全量测试结果
使用 Clash Verge Rev 内置的连接测试,对常用 13 个目标进行检测:

通过(11 项):Google、YouTube、GitHub、Netflix 等全部正常,包括 Google Play、邮件发送等之前旧版偶发问题的场景也都稳定。
失败(2 项):哔哩哔哩港澳台 和 Bahamut 动画疯。
这两个服务需要严格的 台湾 IP(巴哈姆特甚至是锁台湾地区),而我的 WireGuard 出口位于美国洛杉矶,因此被地区限制拦截。这与配置文件无关,是出口 IP 地理位置决定的。如果后续有观看需求,可以通过增加台湾节点并加入规则分流,但在当前的极简模型下,这属于可选的扩展,不影响常规使用。
六、最终配置全貌(含详细注释与修改指引)
# ==============================================
# ZgoCloud + Wstunnel + WireGuard
# MetaCubeX 极简稳定版 v2 (minimal DNS fix)
#
# 特点:
# - 最小化 DNS 覆写(仅防污染)
# - 不使用 SMTP / Google / YouTube 特殊规则
# - 基于 GEOSITE + GEOIP
# - 结构最小化,便于排错
# ==============================================
# ----- 通用设置 -----
profile:
store-selected: true # 记住用户在 Proxy 组中手动选择的节点(重启后不丢失)
# ----- DNS 最小覆写(防污染) -----
dns:
# 国内域名解析:使用阿里公共 DNS over HTTPS,直连不经过代理
nameserver:
- https://dns.alidns.com/dns-query
# 【关键】让所有 DNS 查询(特别是 fallback)都通过代理组 Proxy 发出,避免本地 DNS 污染
proxy: Proxy
# 境外域名解析:使用 Cloudflare DNS over TLS,解析结果由代理隧道保护
fallback:
- tls://1.1.1.1:853
# 只让非中国 IP 的域名使用 fallback,国内域名强制走 nameserver
fallback-filter:
geoip: true
geoip-code: CN
# ----- 代理节点定义 -----
proxies:
- name: ZgoCloud-WG # 节点名称,可自定义
type: wireguard # 类型:WireGuard
server: 127.0.0.1 # 【必须修改】WireGuard 服务器的地址(此处为本地 wstunnel 映射端口)
port: 51820 # 【必须修改】WireGuard 端口
ip: xxx # 【必须修改】分配给本机的 WireGuard 内网 IP
public-key: xxx # 【必须修改】服务器公钥
private-key: xxx # 【必须修改】本机私钥
pre-shared-key: xxx # 【必须修改】预共享密钥
udp: true # 启用 UDP 转发
mtu: 1280 # MTU,若遇部分网站卡顿可尝试调整为 1200 或 1000
# ----- 代理组 -----
proxy-groups:
- name: Proxy # 代理组名称,被分流规则引用
type: select # 类型:手动选择
proxies:
- ZgoCloud-WG # 主代理节点
- DIRECT # 直连(不走代理)
# ----- 分流规则(基于地理数据集) -----
rules:
# Wstunnel 服务器 IP 强制直连,避免隧道自身流量回环(no-resolve 表示仅匹配 IP 规则,不触发 DNS 解析)
- IP-CIDR,154.21.196.249/32,DIRECT,no-resolve # 【必须修改】替换为你的 Wstunnel 服务器公网 IP
# 本地/私有网络直连
- GEOSITE,private,DIRECT
- GEOIP,private,DIRECT,no-resolve
# 中国大陆域名和 IP 直连,保证国内访问速度
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
# 所有非中国大陆域名走代理
- GEOSITE,geolocation-!cn,Proxy
# 未匹配到任何规则的流量,默认走代理(防止泄漏)
- MATCH,Proxy
📋 使用说明
- 保存配置
将上面的完整内容保存为本地配置文件(如zgocloud-metacubex-v2.yaml)。 - 修改必填项
根据你的实际环境,修改所有 【必须修改】 标记处的值:
server/port:对应你 wstunnel 本地监听的地址和端口ip:你的 WireGuard 内网 IP- 三组密钥:
public-key、private-key、pre-shared-key IP-CIDR中的 IP:你的 Wstunnel 服务器公网 IP
- 在 Clash Verge Rev 中启用
- 进入 Profiles 页面,点击右上角添加本地文件并激活(或右键重新激活订阅)。
- 建议开启 TUN 模式(GUI 一键启用),关闭系统代理,以实现全局接管。
- 日常使用与排错
- 如需临时全部直连,可在
Proxy组手动选择DIRECT。 - 若部分网站出现卡顿或超时,可尝试将
mtu降低为1200或1000。 - 遇到问题,优先检查 WireGuard 延迟、Wstunnel 进程状态以及 Clash 日志中的 DNS 解析记录。
七、总结
从“极简不覆写 DNS”到“仅加 6 行防污染覆写”,这次修正仍然保持了整个配置体系的干净和可维护性。它没有引入新的分流逻辑,也没有增加任何特殊域名规则,只是一条 proxy: Proxy,让境外 DNS 查询走上代理,解决了大陆环境下的污染问题。
最终效果:
- 国内网站直连,速度无影响
- Google 等境外服务稳定访问
- 多设备行为一致
- 排查逻辑依然清晰:有问题只看 WireGuard、TUN 和 VPS
后续如果需要解锁台湾流媒体,可能会在(三)中扩展代理组和规则,但那将是按需的可选增强,不破坏当前的稳定基座。
系列文章:
- (一)从复杂到极简:极简原则与初版构建
- (二)本文:Google 污染的 DNS 最小修正