机场 DNS 污染、解析失败与 DNS 泄漏怎么解决?fake-ip 配置完全指南

代理环境下的 DNS 问题几乎都源于「谁来解析这个域名」没配清楚。搞懂 fake-ip,配一份带 DoH 的分流解析,三类问题一起解决。

发布: 更新: 审阅: 约 8 分钟阅读

代理环境下的 DNS 问题几乎都可以归结为一句话:「这个域名该由谁来解析」没有配清楚。

最快的解决方案:在客户端里启用 fake-ip 模式,并配置一份「国内域名走国内解析器、境外域名走境外 DoH」的分流解析。这一份配置同时解决污染、解析失败和泄漏三类问题,本文后面给出可以直接复制的片段。

三类 DNS 问题的症状对照

先确认你遇到的是哪一类:

症状问题类型根因
某些网站一直打不开,换节点也没用污染解析结果被替换成无效 IP
提示「无法访问此网站」「DNS_PROBE_FINISHED」解析失败解析器不可达或超时
国内网站能开但很慢解析走错国内域名被解析到境外 CDN
检测页面显示本地运营商的解析服务器泄漏查询没经过代理
网页首屏很慢,加载后流畅解析慢解析器响应慢或重复查询
代理开着时打不开,关掉反而能开配置冲突fake-ip 与某些应用不兼容

代理环境下,域名是谁解析的?

理解这个流程,后面的配置就不用死记。当你访问一个网站:

  1. 应用(浏览器)需要知道域名对应的 IP。
  2. 如果开了系统代理,浏览器通常把域名原样交给代理客户端,由客户端负责解析——这种情况不容易泄漏。
  3. 如果开了 TUN 模式,DNS 查询会以 UDP 53 端口的形式被虚拟网卡截获,交给客户端内置的 DNS 服务器处理。
  4. 如果某些程序绕过了代理(写死了 DNS 服务器地址、用了 DoH 内置解析),它们的查询直接发到本地网络——这就是泄漏的来源。

客户端拿到查询后,按自己的 dns 配置决定发给哪个上游解析器,以及是否返回假 IP。所有 DNS 问题都发生在这两个决策上。

常见误区在系统网络设置里把 DNS 改成 8.8.8.8,并不能解决代理环境下的 DNS 问题。开启 TUN 或系统代理后,真正生效的是客户端配置里的 dns 段,系统设置基本被旁路了。要改就改客户端配置。

fake-ip 和 redir-host 该用哪个?

这是 Clash/Mihomo 的两种 DNS 工作模式,理解它们的差别是配好 DNS 的前提。

redir-host:客户端真的去解析域名,拿到真实 IP 后再按规则决定走代理还是直连。

fake-ip:客户端不做真实解析,直接返回一个保留段里的假 IP(默认 198.18.0.1/16),同时在内部记下「这个假 IP 对应哪个域名」。当流量真正发起时,客户端用这个映射还原出域名,按域名规则分流,再把域名交给节点去解析。

对比项fake-ipredir-host
是否本地解析域名否是
首次连接延迟极低(无需等待解析)受解析速度影响
抗污染能力强(根本不解析)依赖解析器质量
泄漏风险低较高
分流准确度高(按域名判断)受解析结果影响
兼容性少数应用不兼容好
推荐程度默认选它有兼容问题时用

结论:默认用 fake-ip。 它几乎消灭了污染问题——你本地压根不做解析,污染无从下手。只有当某些特定应用(部分游戏的 UDP 直连、局域网设备发现、某些内网服务)拿到假 IP 后无法工作时,才把这些域名加进 fake-ip-filter 例外列表。

一份可以直接用的 DNS 配置

放进 Clash Verge Rev 的 Merge 文件(或 Clash Meta for Android 的覆写),其他 Mihomo 系客户端同理:

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "*.localdomain"
    - "+.pool.ntp.org"
    - "+.msftconnecttest.com"
    - "+.msftncsi.com"
    - "localhost.ptlogin2.qq.com"
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - https://223.5.5.5/dns-query
    - https://1.12.12.12/dns-query
  fallback:
    - https://1.1.1.1/dns-query
    - https://dns.google/dns-query
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
  nameserver-policy:
    "+.cn": 
      - 223.5.5.5
    "geosite:cn":
      - 223.5.5.5
      - 119.29.29.29

逐字段说明:

字段作用注意事项
enable启用客户端内置 DNSTUN 模式下必须为 true
listen内置 DNS 监听地址端口不要和已有服务冲突
ipv6是否返回 AAAA 记录宽带无 IPv6 时设 false,能避免大量无效连接
enhanced-modefake-ip 或 redir-host默认 fake-ip
fake-ip-filter不使用假 IP 的域名内网、时间同步、网络检测域名必须放进来
default-nameserver解析上游 DoH 域名本身用的 DNS必须填明文 IP,否则死循环
nameserver主解析器建议用国内 DoH,速度快
fallback备用解析器用境外 DoH/DoT,抗污染
fallback-filter决定采用哪边的结果geoip 为真时,国内 IP 结果用 nameserver,否则用 fallback
nameserver-policy按域名指定解析器最精确的分流手段

default-nameserver 是最容易配错的一项:如果你的 nameserver 写的是 https://dns.google/dns-query,客户端需要先解析 dns.google 这个域名本身,而这一步必须靠明文 IP 的解析器完成。这里只能填 IP,不能填域名。

提示配置改完后必须重新加载配置才生效(Clash Verge Rev 里重新点选订阅卡片,或点重载)。改完顺手清一次系统 DNS 缓存和浏览器缓存,否则你测出来的可能还是旧结果。

DoH 和 DoT 有什么区别?该选哪个?

两者都是加密 DNS,目的一样:让查询内容不被中间环节看到和篡改。

  • DoH(DNS over HTTPS):走 443 端口,流量和普通 HTTPS 混在一起,最不容易被识别和阻断。写法 https://1.1.1.1/dns-query。
  • DoT(DNS over TLS):走独立的 853 端口,实现更简单,但 853 端口本身就是特征,在限制严格的网络里可能被封。写法 tls://1.1.1.1:853。

优先用 DoH,把 DoT 作为备用列在后面。如果你的网络环境连 443 都被深度检查,加密 DNS 本身也可能受影响,这时 fake-ip 的价值就更明显——它根本不需要在本地做境外域名解析。

常见的可选上游:国内方向用 223.5.5.5、119.29.29.29、1.12.12.12 的 DoH 端点;境外方向用 1.1.1.1、dns.google、9.9.9.9 的 DoH 端点。不要把所有域名都丢给境外解析器,那会让国内网站变慢。

DNS 泄漏:怎么检测和修复

检测:打开任意一个 DNS 泄漏检测页面,看它报告的解析服务器。

  • 显示境外解析器 → 正常。
  • 显示你本地运营商的服务器 → 存在泄漏。
  • 显示多个不同归属地的服务器 → 部分泄漏,通常是某些程序绕过了代理。

修复清单:

  1. 启用 fake-ip。这是最有效的一步,本地不再做境外域名解析。
  2. 开启 TUN 模式。系统代理模式下,不遵守代理设置的程序会直接发 DNS 查询到本地网络;TUN 能在网络层截获它们。
  3. 打开 TUN 的 DNS 劫持。Clash Verge Rev 的 TUN 设置里有 dns-hijack,保持默认的 any:53,它会把所有发往 53 端口的查询都拉进客户端处理。
  4. 关闭浏览器自带的安全 DNS。Chrome 和 Firefox 有内置的 DoH 开关,开着会绕过客户端。在浏览器设置里搜索「安全 DNS」并关闭。
  5. 关闭 Android 的「私人 DNS」。系统设置 → 网络 → 私人 DNS,设为「关闭」,否则会和客户端的 DNS 配置打架。
  6. 检查 hosts 文件。手写条目优先级最高,残留的错误条目会导致解析到错误地址。

分平台清理 DNS 缓存

改完配置后务必清缓存,否则测的还是旧结果:

Windows

ipconfig /flushdns

macOS

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Linux(systemd-resolved)

sudo resolvectl flush-caches

浏览器:Chrome 系在地址栏访问内部的 DNS 设置页面清理,或者直接完全退出浏览器再打开。

客户端自身:重载配置或重启客户端。

路由器:重启。如果你在路由器上配过 DNS,它的缓存会影响全家设备。

按症状解决

某些网站一直打不开,换节点也没用

典型的污染。如果你还在用 redir-host,改成 fake-ip 基本立刻解决。已经是 fake-ip 仍然不行,检查该域名是不是被误加进了 fake-ip-filter,或者有 hosts 条目残留。

国内网站能打开但很慢

分流解析没配好,国内域名被境外解析器解析到了境外 CDN。用上面配置里的 nameserver-policy 把国内域名明确指向国内解析器,并确认 fallback-filter 的 geoip 为 true。

提示 DNS 解析失败 / DNS_PROBE_FINISHED_NXDOMAIN

先看 default-nameserver 是不是填了域名而非 IP(死循环),再看配置里的 DoH 地址能否访问。临时把 nameserver 改成明文 223.5.5.5 测试,能通就说明是 DoH 上游的问题。

开着代理时内网设备、NAS、打印机访问不了

fake-ip 把内网域名也返回了假 IP。把 *.lan、*.local 和你的内网域名后缀加进 fake-ip-filter,同时在规则里加上内网网段的直连规则(记得带 no-resolve),写法见 自定义规则教程。

某个游戏或语音软件在代理下异常

这类软件常用 UDP 直连并依赖真实 IP。把它的服务器域名加进 fake-ip-filter,并在规则里给它指定合适的策略。

订阅更新时提示无法解析主机

机场订阅域名的解析出了问题。临时把 DNS 改成明文公共解析器再试,或直接用「经过代理更新」绕开本地解析,详见 订阅更新失败怎么办。

最容易配错的五个地方

  • default-nameserver 填了域名。必须填明文 IP,否则解析上游时陷入死循环,表现为客户端启动后完全无法解析任何域名。
  • 把所有域名都交给境外 DoH。国内网站会变慢且可能解析到境外 CDN,见 延迟高、网速慢怎么办。
  • fake-ip-filter 忘了加网络检测域名。系统的网络连通性检测会失败,Windows 可能显示「无 Internet 访问」,尽管你实际能上网。
  • 开着 IPv6 但宽带没有 IPv6。大量 AAAA 解析结果不可达,连接要等超时后回退,首屏明显变慢。没有真正的 IPv6 就设 ipv6: false。
  • 改完不重载配置。DNS 配置属于内核级设置,不重载不生效,很多人以为配置没用其实是根本没生效。

配完之后,用一次泄漏检测和几个之前打不开的网站验证效果。如果开着客户端连国内网站都打不开,那不是 DNS 问题,看 Clash 开了却上不了网。

常见问题

fake-ip 是假的 IP,会不会影响正常上网?
不会影响通过代理访问的流量,但会影响两类场景。一是需要真实 IP 的本地应用,比如某些游戏的 UDP 直连、局域网设备发现、部分网络诊断工具,它们拿到 198.18 段的假地址会无法工作,解决办法是把这些域名加进 fake-ip-filter 列表走真实解析。二是不经过代理客户端的程序,它们从系统 DNS 拿到的是真实 IP,不受影响。日常浏览和绝大多数应用在 fake-ip 下都完全正常。
怎么判断自己有没有 DNS 泄漏?泄漏了会怎样?
用任意一个 DNS 泄漏检测页面,看它报告的解析服务器归属地。如果显示的是你本地运营商的 DNS 服务器,说明查询没有经过代理,存在泄漏。后果有两个:一是你访问了哪些域名对本地网络可见,隐私性下降;二是被污染的解析结果会导致部分网站打不开或被导向错误 IP。配置了 fake-ip 加代理侧 DoH 之后,检测页面通常会显示境外解析器。
配置了 DoH 之后为什么首屏反而变慢了?
DoH 建立在 HTTPS 之上,首次查询需要完成 TLS 握手,比明文 UDP 查询慢。如果你把所有域名(包括国内域名)都交给境外 DoH 解析,每次访问国内网站都要绕一圈境外,慢是必然的。正确做法是做分流解析:国内域名交给国内解析器用明文或 DoH 就近解析,境外域名才走境外 DoH,并且给解析器配置合理的缓存时间。
国内网站被解析到国外 IP,访问特别慢,怎么修?
这是分流解析没配好的典型症状:国内域名的查询被发给了境外解析器,返回了境外 CDN 节点的地址。修复方法是在 DNS 配置里使用 nameserver-policy 或 fallback 机制,把国内常见域名明确指向国内解析器,同时打开 fallback-filter 里的 geoip 判断,让返回的国内 IP 结果优先采用国内解析器的答案。配好后国内站点会重新解析到就近的 CDN 节点。
清了 DNS 缓存还是解析到旧地址,还有哪里有缓存?
至少有四层缓存需要考虑:浏览器自身的 DNS 缓存(Chrome 可以在内部页面清理,或直接重启浏览器)、操作系统的解析缓存(用对应平台的命令清理)、代理客户端内部的 DNS 缓存(重载配置或重启客户端)、以及路由器上的 DNS 缓存(重启路由器)。按这个顺序逐层清理,另外注意 hosts 文件里的手写条目优先级最高,不受任何缓存清理影响。
手机上怎么处理 DNS 问题?和电脑一样吗?
原理相同但操作不同。Android 和 iOS 在开启代理客户端后,DNS 由客户端的配置决定,改系统 DNS 通常没有效果,要改就改客户端配置里的 dns 段。需要注意的是 Android 系统设置里的「私人 DNS」(DoT)如果开着,可能与客户端的 DNS 配置冲突导致解析异常,使用代理时建议关闭它。iOS 上还要注意描述文件里可能装过 DNS 配置。
关掉代理后网页全部打不开,是 DNS 的问题吗?
有可能,但更常见的原因是系统代理设置残留。先去系统设置里确认代理开关已关闭。如果代理确实已关但仍然打不开,那可能是客户端异常退出时没有还原系统 DNS 设置,或者 TUN 网卡没有被正确移除。处理办法是重新启动客户端再正常退出,让它自己还原;仍不行就手动把网卡的 DNS 改回自动获取并清理缓存。

↑ 返回顶部