Clash DNS 设置详解:fake-ip 与 redir-host 怎么选
fake-ip 先给程序一个虚拟地址,把域名交给节点远端解析,不受本地解析结果影响,但部分程序会看到虚拟地址;redir-host 返回真实地址,兼容性更接近原样,却更依赖上游解析结果。两者差别在 TUN 下最明显。
Clash DNS 设置,本质上是在回答一个问题:把域名变成 IP 的这一步,由谁来做,什么时候做。fake-ip 和 redir-host 给出了两种不同的回答,选哪个、怎么配,决定了某些程序是否异常、解析结果是否可信。本文先对照两种模式的完整流程,再拆 dns 段里容易搞混的字段,最后给出确认没有泄露的检查办法。
先把 DNS 在代理里的位置说清楚
普通上网时,程序先问系统的 DNS“这个域名对应哪个 IP”,拿到答案再去连接。接入代理之后,多了一个选择:这一步是继续在本机完成,还是交给代理出口那一端去做。DNS 的基本概念 可以先看一眼,关键点是:解析请求本身也会暴露你想访问的域名。
Clash 内核自带一个 DNS 模块,配置里 dns 段就是它的设置。它要处理的有三类事:给程序返回什么,向谁去问,以及遇到代理节点自己的域名怎么办。后面的内容围绕这三件事展开。
fake-ip 与 redir-host:一次访问的旅程对照
以访问 example.org 为例,假设这个请求最终要走代理:
| 步骤 | fake-ip | redir-host |
|---|---|---|
| 1. 程序发起解析 | 内核收到查询 | 内核收到查询 |
| 2. 内核回答 | 立刻返回虚拟地址,不必等上游 | 向上游解析器询问,等待真实结果 |
| 3. 内核记录 | 虚拟地址对应哪个域名 | 真实地址对应哪个域名 |
| 4. 程序连接 | 连到虚拟地址,内核反查出域名 | 连到真实地址,内核按记录反查域名 |
| 5. 解析发生在哪里 | 走代理的域名交给节点,由远端解析,本机不查;只有直连的域名才在本机查 | 不论最终去向,查询都已在本机经上游解析器完成 |
两者的取舍可以概括为:
| 维度 | fake-ip | redir-host |
|---|---|---|
| 程序拿到的地址 | 虚拟地址 | 真实地址 |
| 对本地解析结果的依赖 | 低,走代理的域名不靠本地解析 | 高,上游返回错了就会跟着错 |
| 兼容性风险 | 需要真实地址的程序可能异常 | 较少 |
| 适合关注什么 | 解析可靠、减少等待 | 兼容性、程序行为接近未接入代理时 |
表里 fake-ip 一列有个前提:后面没有未加 no-resolve 的 IP 类规则逼内核先查一次,否则本机照样会发起解析,规则细节见 Clash 规则怎么写。另外在 redir-host 下,同一个真实地址可能对应多个域名,反查记录有时会指向最近一次的那个,共用地址的网站出现个别误判时,要想到这一层。具体行为以内核文档的说明为准。
DNS 模式什么时候才真正有差别
这是最容易被忽略的一点。通过系统代理(HTTP 或 SOCKS)接入时,浏览器之类的程序通常会把域名直接交给内核,内核本来就知道对方要访问谁,DNS 模式的影响相对小。
开启 TUN 之后情况不同:程序依旧先向系统 DNS 发起查询,再用得到的地址去连接,内核只能在网络层看到地址。这时 DNS 模式、以及 TUN 配置里把 53 端口查询接给内核的 dns-hijack 选项,才真正决定了结果。所以如果你从未开过 TUN,不必对两种模式纠结太久;要开 TUN,则按 Clash TUN 模式是什么 的步骤一起考虑。系统代理与 TUN 的差异见 Clash 系统代理是什么。
fake-ip 带来的现象,以及 fake-ip-filter 怎么用
| 你看到的现象 | 原因 | 处理思路 |
|---|---|---|
| ping 或 nslookup 得到 198.18 开头的地址 | 这是内核分配的虚拟地址 | 属于正常现象,不要当作网站的真实 IP |
| 局域网里的设备找不到 | 本地域名也被分配了虚拟地址 | 把本地域名加入 fake-ip-filter |
| 时间同步、联机类程序异常 | 程序需要真实地址去校验或直连 | 把相关域名加入 fake-ip-filter |
| 个别程序缓存了虚拟地址,重启后连不上 | 虚拟地址与域名的对应关系可能在内核重启后失效 | 重启这些程序,或者让它们拿真实地址 |
fake-ip-filter 里的域名会被排除在虚拟地址之外,改而返回真实地址。示例:
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "+.lan" # 本地域名不要虚拟地址
- "+.local"
default-nameserver:
- 203.0.113.53 # 占位示例,用来解析下面域名的地址
nameserver:
- https://dns.example.com/dns-query
虚拟地址段通常用不着改,只有和你局域网的网段冲突时才考虑。过滤规则的匹配写法和上限,以文档为准。
dns 段里几个最容易搞混的字段
| 字段 | 负责什么 | 搞混的后果 |
|---|---|---|
| nameserver | 主要的上游解析器,可以是普通地址,也可以是加密形式 | 填成不可达的地址,所有解析失败 |
| default-nameserver | 只用来解析 nameserver 里那些域名的地址,必须是普通 IP 形式 | 缺失时,加密解析器的域名无处可解析 |
| fallback 与 fallback-filter | 备用解析器,以及何时采用备用结果的判断条件 | 用了不合适的过滤条件,结果来回跳变 |
| nameserver-policy | 为特定域名指定专用解析器 | 范围写得过宽,会把本该走默认的域名带偏 |
| proxy-server-nameserver | 解析代理节点自己的域名 | 缺失时,节点域名可能被错误地解析,连不上节点 |
较新的 Mihomo 还有让 DNS 查询遵守分流规则的选项,具体名称和行为请翻 官方文档导航 里的 Mihomo 文档。DNS 里涉及按地区判断的部分,依赖内核里的 GeoIP 数据,数据过旧也会影响结果。
怎么确认 Clash DNS 设置没有泄露
“泄露”指你以为交给代理去查的域名,实际被本地运营商的解析器看到了。检查之前先定好预期:你配置的 nameserver 是谁,哪些域名本来就打算直连解析。
- 留一个基准:不开代理,打开 IP 与 DNS 检测导航 里的 DNS 检测页,记下它显示的解析器。
- 开启后复测:开启代理,用同一个检测页再测一次。
- 对照预期:看到的解析器如果是你配置的那个,或者是节点远端的,通常符合预期;如果仍是基准里本地运营商的解析器,说明查询绕过了内核,要检查系统 DNS 有没有被接管,TUN 下尤其要看 dns-hijack。
- 查看虚拟地址:在命令行用 nslookup 查一个域名。TUN 开启并接管了 DNS 时,通常能看到虚拟地址;只用系统代理时,这条命令走的是系统自己的 DNS,看到真实地址并不奇怪。
- 别忘了浏览器:WebRTC 泄露是什么 是另一条路径,和 DNS 无关,需要单独检查。
出现泄露的处理思路,看 DNS 泄露怎么解决;术语对照见词典里的 DNS 泄露。
下一步:先稳住默认,再逐项收紧
- 先确认自己是否用 TUN:只用系统代理,就把 Clash DNS 设置保持在客户端或订阅给的默认写法上,不必频繁改。
- 用 TUN 的话,先留意 Fake-IP 带来的现象,遇到异常程序再往 fake-ip-filter 里加域名,一次只加一类。
- 想对照 redir-host 的说法,看词典里的 redir-host。
- 再回头检查整份配置,配合 Clash 配置文件怎么看 确认没有别的字段在干扰解析。
这篇没有覆盖的
- 字段名和取值依据 Mihomo 文档,其他内核或旧版本的写法可能不同,请以所用内核文档为准。
- 本文不推荐具体的上游解析服务,也没有任何解析速度的数据。
- DNS 泄露的判定与你的分流目标有关,这里只教检查方法,结论要你自己下。
本文引用的官方来源
- Mihomo(Clash Meta)文档(wiki.metacubex.one)
- Cloudflare:What is DNS(www.cloudflare.com)
以上链接均为官方页面,梯子岛在 2026-10-09 核对过;个别网站会拦截自动化访问,用浏览器直接打开即可。平台规则可能随时调整,以官方页面当前内容为准。
Clash DNS 设置常见问题
新手应该选 fake-ip 还是 redir-host?
没有对所有人都成立的答案。主要走系统代理的日常浏览,两种模式差别不大;开启 TUN 后更值得关注。先用客户端或订阅给出的默认设置跑通,遇到个别程序异常再针对性调整,比一开始就换模式更容易定位问题。
为什么 ping 一个域名得到的是 198.18 开头的地址?
这是 fake-ip 在起作用:查询被内核接管后,返回的是它分配的虚拟地址,而不是网站的真实地址。这个地址只在你的电脑和内核之间有意义,不要把它当成网站的 IP 去记录、封禁或排错。
开了 fake-ip 之后,某个程序连不上了怎么办?
先怀疑这个程序需要真实地址,比如局域网设备发现、时间同步或联机类程序。可以把相关域名加入 fake-ip-filter,让它们拿到真实地址,改完重载配置再试。一次只加一类域名,方便确认是哪一条起了作用。
nameserver 里能只写一个域名形式的 DoH 地址吗?
可以,但需要有办法解析这个域名本身,这就是 default-nameserver 的用途:它用普通 IP 形式的服务器,负责解析 nameserver 里那些域名的地址。两项配合着写,才不会出现先有鸡还是先有蛋的死结。
改了 DNS 设置后怎么知道有没有泄露?
分三步:先在不开代理时记下检测页显示的解析器,再在开启后复测,最后对照你配置的 nameserver 判断。看到的解析器不是你预期的那一个,才需要继续排查。检测入口见梯子岛的 IP 与 DNS 检测导航。
接着读
- 排查 · DNS 泄露怎么解决?检测方法与修复思路
- 教程 · Clash TUN 模式是什么?开启方法、权限与常见问题
- 教程 · Clash 配置文件怎么看?YAML 结构与常用字段讲解
- 术语 · Fake-IP是什么意思
- 术语 · redir-host是什么意思
- 术语 · TUN 模式是什么意思