Clash Meta 下载站mihomo 客户端下载

mihomo DNS 配置详解:fake-ip 与 redir-host

配置与订阅 2026 年 7 月 11 日 4 分钟阅读
本文目录

很多「代理开着却打不开网站」的疑难杂症,最后都查到 DNS 头上。原因不难理解:浏览器要先把域名换成 IP 才能发起连接,如果这一步拿到的是被污染的错误地址,后面代理做得再好也没用。

所以 mihomo 干脆把域名解析这件事接管了过来——配置里的 dns 段就是干这个的。这篇文章讲清它为什么必要、fake-ipredir-host 两种增强模式各自的原理,以及配置写坏之后的典型症状。

代理为什么必须接管 DNS

把解析交给系统默认 DNS 会带来两个问题。一是污染:解析请求可能被中途干预,返回一个根本连不上的 IP,表现就是网站打不开、图片加载不出来,而节点延迟测试却完全正常。二是泄漏:即使流量走了代理,解析动作若发生在本地,你访问了哪些域名就以明文暴露给了本地网络的 DNS 服务器。

mihomo 接管之后,解析在内核内部完成,可以选择用加密协议向可信服务器查询,也可以按域名分流决定「这个域名找谁解析」。这与规则分流是两套并行的机制,配合关系见 分流规则入门

enhanced-mode:fake-ip 与 redir-host 的区别

enhanced-mode 决定内核如何回应应用的解析请求,两种取值代表两种完全不同的思路:

对比项fake-ipredir-host
返回什么 IP保留网段里的一个虚拟地址(常见 198.18.0.0/16)真实解析得到的 IP
何时真正解析连接建立时才由内核处理,或直接把域名交给节点响应应用请求时立刻解析
解析开销几乎为零,秒回每个域名都要等真实查询完成
污染风险基本规避取决于上游 DNS 是否可信
副作用少数依赖真实 IP 的应用会异常解析慢、有泄漏可能

fake-ip 的巧妙之处在于「拖延」:应用问域名对应哪个 IP,内核不急着查,先随手发一个保留网段里的假地址,同时记下「这个假 IP 对应那个域名」。等应用真的向这个假 IP 发起连接时,内核一查映射表就知道目标域名,再按分流规则决定走哪个节点——真正的解析可以交给节点那端完成。整个过程本地没有发生任何对外的域名查询,既快又不泄漏。

redir-host 则老老实实做真实解析,把结果给应用。它的兼容性更好,但速度和抗污染能力都不如 fake-ip。日常使用推荐 fake-ip,只有在遇到明确的兼容性问题时才考虑换回来。

fake-ip 的副作用与 fake-ip-filter

fake-ip 的代价是:有些程序拿到 IP 后要自己做点什么——局域网设备发现、部分游戏的直连匹配、依赖真实 IP 的内网服务——它们收到一个假地址就会出错。

解法是 fake-ip-filter:列在里面的域名不参与 fake-ip,走真实解析。局域网后缀、组播地址、需要直连的服务通常都要加进去:

  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "*.localdomain"
    - "+.stun.*.*"
    - "time.*.com"

遇到「装上代理后某个软件不正常,关掉就好了」,先把它用到的域名加进这个列表试试——这是排查这类问题的第一手段。

nameserver、fallback 与 default-nameserver

三个字段名字相似,职责完全不同,弄混是配置出错的常见原因:

  • default-nameserver:只用来解析 DNS 服务器自身的域名。当你把 nameserver 写成 https://doh.example.com/dns-query 这种带域名的加密地址时,内核得先知道这个域名的 IP 才能连上去——这就是先有鸡还是先有蛋的问题,所以这里只能填纯 IP 地址
  • nameserver:主力解析服务器,绝大多数域名由它负责。
  • fallback:备用解析服务器,一般填境外或加密的可信服务器,用于对结果存疑时的二次查询。

一份通用的 dns 配置段

dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.stun.*.*"
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - https://doh.pub/dns-query
    - 223.5.5.5
  fallback:
    - tls://8.8.4.4
    - https://1.1.1.1/dns-query

说明几点:listen 是内核自己的 DNS 监听地址,TUN 模式下需要它接收被重定向过来的查询;fake-ip-range 用的是不会与真实公网地址冲突的保留网段;ipv6 在没有 IPv6 需求时关掉可以少一类奇怪问题。如果订阅自带 dns 段,通常不必自己写——改之前先想清楚要解决什么问题。

注意:开启 TUN 模式时,DNS 的影响会被放大——所有流量都经由虚拟网卡,解析一旦不通就是整机断网,而不是某个网站打不开。开 TUN 前后如果连通性差别很大,先怀疑这一段。TUN 的原理与开启方法见 TUN 模式详解

常见症状对照

症状可能原因处理方向
某个应用装了代理就异常,关掉正常它需要真实 IP,被 fake-ip 影响把相关域名加入 fake-ip-filter
网页打开很慢,但节点延迟很低上游 DNS 响应慢或不可达更换 nameserver,减少无效的 fallback
局域网设备、打印机、NAS 访问不了内网域名被 fake-ip 接管*.lan*.local 等过滤项
部分网站解析到明显错误的地址解析被污染或走了不可信上游确认 enhanced-mode 生效,改用加密 DNS
开 TUN 后完全无法上网DNS 段配置有误或未监听检查 enablelisten,先关 TUN 对比

改完 DNS 段记得重启内核让配置重新加载,必要时清一次系统 DNS 缓存和浏览器缓存——旧的解析结果会让你误判修改没生效。如果调完仍然连不上,问题未必出在 DNS,按 开了代理还是上不了网 的分层顺序从头查一遍更有效率。