DNS污染与DNS泄漏怎么排查?如何彻底配置防污染DNS?

[!IMPORTANT] 【快速回答】 网络访问异常中,DNS 污染DNS 泄漏是最常见的两大隐形杀手:

  • DNS 污染(Poisoning):国内防火墙在公网网关监听明文 UDP 53 端口,抢在真实服务器之前向你的电脑返回虚假的错误 IP,导致你连接到错误服务器或连接被直接丢弃;
  • DNS 泄漏(Leak):即便你的 HTTP 数据走了代理,但操作系统依然把海外域名的 DNS 查询明文发给本地宽带运营商(电信/联通/移动),导致运营商能记录你的全部浏览轨迹,并直接触发阻断。

彻底根治方案:在代理客户端(Clash Verge / Mihomo / Sing-box)中开启 Fake-IP 模式,并将海外 DNS 解析交给远端代理服务器节点执行,本地仅通过 DoH 加密协议解析国内白名单域名。


【常见原因】污染与泄漏机理对照表

故障机制 技术成因 典型后果 解决方案
标准 UDP 53 污染 防火墙监听公网 53 端口并抢答伪造 IP 网页提示证书不匹配或连接超时 使用 DoH/DoT 加密查询或远端代理解析
DNS 泄漏 (DNS Leak) 系统优先使用本地网卡指定的运营商 DNS 访问记录暴露给 ISP,流媒体识别真实地区 启用 Fake-IP 模式接管系统 DNS 请求
IPv6 DNS 泄漏 客户端只拦截了 IPv4 DNS,IPv6 查询直连 ISP 绕过代理直接被污染 禁用 IPv6 DNS 或开启纯 IPv4 解析
redir-host 模式缺陷 本地必须先解析出真实 IP 才能匹配 IP-CIDR 规则 触发本地网络污染,首包延迟激增 全面升级为 Fake-IP 增强模式

【解决方法】全流程排查与生产级配置

步骤一:在线检测是否存在 DNS 污染与 DNS 泄漏

  1. 测试 DNS 泄漏
    • 打开浏览器,访问权威测试平台:dnsleaktest.com
    • 点击 【Standard Test】【Extended Test】
    • 判定标准
      • 正常安全:列表中显示的全部 DNS 服务器 IP 和国家,必须全部为你所连代理节点所在的国家(如 Hong Kong、Japan、United States),且 ISP 绝不能出现 China Telecom/Unicom/Mobile;
      • 存在泄漏:若列表中出现了任何国内地理位置或中国运营商的服务器,说明你的 DNS 请求正在泄漏。
  2. 测试 DNS 污染
    • 打开终端执行 nslookup twitter.com 223.5.5.5(或本地运营商 DNS);
    • 如果返回的 IP 属于美国军方私有地址或随机无效地址(如 199.59.x.x0.0.0.0),说明遭受了实时污染抢答。

步骤二:理解 Fake-IP 与 redir-host 的核心差异

特性 Fake-IP 模式(强烈推荐) redir-host 模式(已过时)
解析发生位置 客户端直接向本地应用返回虚构保留 IP(198.18.0.0/16 必须在本地先向远程 DNS 请求真实 IP
抗污染能力 100% 免疫本地 DNS 污染(根本不在本地发起解析) 容易在本地请求阶段被旁路污染
连接速度 0 毫秒首包解析延迟(秒开网页) 需等待 100-300ms DNS 远程往返
适用场景 绝大多数网页浏览、流媒体播放、现代网络应用 仅适用于极少数无法兼容虚构 IP 的私有游戏联机

步骤三:Clash (Mihomo) 生产级防污染 DNS 配置模版

进入 Clash 的配置编辑器或 Settings → DNS 模块,将 DNS 架构调整为以下权威分流模版:

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false # 彻底关闭 IPv6 DNS,根除 IPv6 泄漏
  enhanced-mode: fake-ip # 启用 Fake-IP 模式
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter: # 必须直连解析的国内服务白名单
    - '*.lan'
    - 'localhost.ptlogin2.qq.com'
    - '+.msftconnecttest.com'
    - '+.msftncsi.com'
    - '+.stun.*.*'
    - '+.bilibili.com'

  # 基础默认 DNS(用于解析 DoH 域名本身)
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29

  # 国内主流解析(DoH 加密通道)
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query

  # 规则未命中或海外域名的代理备用解析
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
    - https://doh.opendns.com/dns-query

  # 分流映射表:严格区分国内外解析通道
  nameserver-policy:
    'geosite:cn,private':
      - https://doh.pub/dns-query
      - https://dns.alidns.com/dns-query
    'geosite:geolocation-!cn':
      - https://1.1.1.1/dns-query
      - https://8.8.8.8/dns-query

步骤四:配置系统 TUN 模式接管系统 UDP 53 端口

普通的系统代理模式(HTTP Proxy)无法接管某些不遵循代理设置的应用程序(如 CMD 命令行、某些游戏客户端)。

  1. 在 Clash Verge 或 Clash Nyanpasu 中启用 TUN 模式
  2. TUN 网卡会在系统底层创建一张虚拟网络适配器,将系统所有对外发往 UDP 53 端口的 DNS 数据包强行重定向至 Clash 内置的 DNS 处理器(198.18.0.1);
  3. 应用程序在发起任何 DNS 请求时,都会得到 Clash 立即分发的 Fake-IP,彻底杜绝明文数据包离开本机。

步骤五:关闭 Windows / macOS 的 IPv6 DNS 泄漏

  1. Windows 系统
    • 打开【网络连接】(ncpa.cpl);
    • 右键当前正在使用的物理网卡(以太网或 Wi-Fi)选择【属性】;
    • 在项目列表中取消勾选【Internet 协议版本 6 (TCP/IPv6)】
  2. 浏览器检查
    • 在 Chrome / Edge 地址栏输入 chrome://settings/security
    • 检查【使用安全 DNS】选项:如果已经开启了 Clash,建议选择“使用当前服务提供商”或关闭浏览器内置 DoH,交由 Clash 全权接管,避免二次分流冲突。

【如何判断问题来源】5维排查诊断矩阵

诊断维度 测试方法 正常安全指标 异常表现与判定
1. Fake-IP 状态 CMD 运行 ping google.com 返回 198.18.x.x 返回公网真实 IP 或超时,说明 Fake-IP 未生效
2. DNS 泄漏测试 访问 dnsleaktest.com 扩展测试 仅显示海外节点机房 DNS 出现中国电信/移动/联通,存在 DNS 泄漏
3. 国内 CDN 命中 访问国内测速网 speedtest.cn 识别为本地运营商机房 识别为海外机房,说明国内域名被错误划入海外 DNS
4. 加密 DoH 状态 抓包工具分析本地 UDP 53 流量 无明文海外域名请求 抓到大量的海外域名明文查询,说明 DNS 劫持失败
5. 流媒体区域识别 打开 Netflix / Disney+ 官网 正常显示当前节点所在区 提示“正在使用代理/解锁失败”,DNS 发生交叉污染
flowchart TD
    A[排查 DNS 污染与泄漏] --> B[访问 dnsleaktest.com 运行测试]
    B --> C{测试结果是否出现中国运营商 DNS?}
    C ----> D[存在 DNS 泄漏! 开启 Fake-IP 模式并关闭 IPv6]
    C ----> E{访问海外网页是否提示证书错误?}
    E ----> F[遭遇本地 DNS 污染! 检查 Nameserver 是否使用了明文 53 端口]
    E ----> G[DNS 架构健康! 国内走阿里DoH / 国外走代理远程解析]

【仍然无法解决】进阶方案

  1. 部署本地 MosDNS / AdGuard Home 分流中枢
    • 如果你有更高级的智能家庭或软路由网络需求,可在本地部署 MosDNS
    • 实现“国内域名无缝秒解析”、“海外域名全部走代理通道”的极致双向防污染分流;
  2. 清空系统与浏览器 DNS 缓存
    • Windows 终端执行:ipconfig /flushdns
    • Chrome 浏览器访问 chrome://net-internals/#dns,点击 Clear host cache

【FAQ 常见疑问】

Q1:什么是 Fake-IP?为什么我 Ping 任何外网域名都是 198.18.x.x?

198.18.0.0/15 是 IETF 规定的网络基准测试专用保留私有网段。当开启 Fake-IP 模式后,Clash 不会在本地向网络请求真实 IP,而是由客户端瞬间返回一个 198.18.x.x 的伪装 IP 给浏览器。当浏览器向该 IP 发送数据包时,Clash 在底层通过内置映射表直接还原域名,并连同域名一起通过加密隧道发往远端代理服务器进行真正的解析与请求。这完全跳过了本地 DNS 解析步骤,具有 0 毫秒延迟绝对免疫本地污染 的优势。

Q2:DNS 泄漏到底有哪些实际风险?

:DNS 泄漏的主要风险包括:

  1. 隐私暴露:本地运营商能够完整记录你在什么时间访问了哪些海外网站域名;
  2. 连接被重置:明文 DNS 请求途经运营商骨干网时,防火墙一旦识别到敏感域名,会立即下发 TCP RST 干扰包中断你的网络连接;
  3. 流媒体识别失败:若 DNS 泄漏至国内,流媒体平台(如 Netflix)在检测时会发现你的 IP 与 DNS 归属地不匹配,直接触发代理检测拦截。

Q3:为什么配置了海外 DoH 后,国内某些银行或政务网站打不开了?

:很多国内政务、银行网站的服务器没有在国际公网权威 DNS 注册,或者必须依赖国内本地运营商的权威解析(Split-Horizon DNS)。如果你的分流配置将这部分网站错误路由到了海外 Cloudflare/Google DNS,就会返回 NXDOMAIN(域名不存在)。因此务必按照本文步骤三中的模版,配置 geosite:cn 使用国内本地 DoH 解析。


【相关阅读】


【服务选择指南】

避免 DNS 污染与提高访问隐私的服务选型要点:

  1. 服务端远端代理解析:优质服务商提供的节点必须支持由服务端直接进行 DNS 递归解析(Remote DNS),杜绝客户端在本地发起明文 DNS 查询;
  2. 纯净原生原生 IP:选择落地机房提供双栈原生 IPv4/IPv6 且拥有独立纯净 DNS 服务器的服务商,避免因为共享公共 DNS 导致流媒体平台判定区域异常。