隐云 - 安全稳定的网络加速服务

Mihomo DNS 配置怎么写:最小模板、分流与 Fake-IP 排查

更新于 2026-10-26 · wkacc.top

简答:先把 dns: 放在 config.yaml 顶层,并从最小模板开始验证;nameserver 负责常规解析,proxy-server-nameserver 负责节点域名,nameserver-policy 负责按域名或规则集分流。配置后按 YAML、监听端口、日志和节点解析顺序检查,通常可以定位无法解析或连接失败的环节。

定义:Mihomo DNS 配置是 config.yaml 顶层的 dns: 配置段,用来指定 DNS 上游、解析分流方式、Fake-IP 或 redir-host 模式,以及代理节点域名和直连域名的解析路径。

先试这份最小 Mihomo DNS 配置

本文是第三方使用指南,不代表 Mihomo 或隐云官方。Mihomo 的 DNS 配置应放在配置文件顶层,与 proxies:、proxy-groups:、rules: 等字段同级。官方示例和字段说明可参考Mihomo 官方 DNS 配置文档与Mihomo 官方配置示例。

如果原配置里已经存在 dns:,请合并字段,不要再新增第二个同名段。下面这份示例先采用 Fake-IP、加密 DNS 和节点域名专用 DNS,适合用来验证基本解析链路。

dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter-mode: blacklist
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - localhost
  default-nameserver:
    - 223.5.5.5
    - 1.1.1.1
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
  proxy-server-nameserver:
    - https://doh.pub/dns-query
  direct-nameserver:
    - system

先只改两处:如果当前网络无法访问示例中的某个上游 DNS,替换 nameserver 或 proxy-server-nameserver;如果配置文件已经由订阅生成,则优先在原有 dns: 段内修改。YAML 缩进使用空格,不要混用 Tab,也不要把 dns: 缩进到代理节点或策略组下面。

字段怎么分工:不要把所有 DNS 都写进 nameserver

字段作用使用时重点检查
enable启用 Mihomo 内置 DNS;设为 false 时使用系统 DNS。启用后不代表所有应用都会自动经过该 DNS,TUN 或系统 DNS 设置仍可能影响实际流量。
default-nameserver用于解析其他 DNS 服务器的域名。官方文档说明这里应优先使用 IP,也可以使用加密 DNS;不要只依赖一个尚未解析成功的 DoH 域名。
nameserver默认域名解析上游。它负责常规查询,不是专门解析代理节点域名的字段。
fallback备用解析上游,通常配合 fallback-filter 判断是否采用备用结果。它不是简单的“主 DNS 失败后必然切换”,还会受到过滤条件影响。
nameserver-policy按域名、域名集合或规则集选择 DNS 上游。规则集名称必须真实存在;官方文档说明该策略优先于普通 nameserver 和 fallback 查询。
proxy-server-nameserver只用于解析代理节点域名。节点地址是域名时,它可以避免“连接代理前必须先解析节点”的循环依赖。
direct-nameserver直连出口使用的 DNS 上游。如果同时使用 direct-nameserver-follow-policy,还要确认是否让直连解析遵守 nameserver-policy。
enhanced-mode选择 fake-ip 或 redir-host 两种解析处理模式。切换模式后要重新观察局域网设备、域名规则和 TUN 的表现。

Mihomo 官方 DNS 类型文档列出了 UDP、TCP、DoT、DoH、DoQ、system 等写法。例如 https://doh.pub/dns-query 是 DoH,tls://1.1.1.1 是 DoT,system 或 system:// 表示使用系统 DNS。具体格式以Mihomo 官方 DNS 类型说明为准。

Fake-IP、redir-host 和 nameserver-policy 怎么写

Fake-IP 与 redir-host 的选择

fake-ip 会为域名返回 Fake-IP,并通过映射关系保留域名信息,通常适合需要 TUN 接管或依赖域名规则匹配的场景。局域网设备、路由器后台、打印机和部分内网域名可能需要加入 fake-ip-filter。

redir-host 返回上游 DNS 得到的真实地址,排查局域网兼容性问题时更直观。如果 Fake-IP 下某个应用异常,可以临时切换为 redir-host 对比;若问题消失,再针对具体域名增加过滤项,而不是把所有域名都加入过滤列表。

按域名选择 DNS 上游

需要按域名分流时使用 nameserver-policy。下面的示例使用明确的域名后缀,便于先验证语法;如果改用 rule-set: 或其他域名集合,名称必须与配置中的规则集一致。

dns:
  nameserver-policy:
    '+.lan':
      - system
    '+.internal.example':
      - 192.168.1.1
    '+.example.com':
      - https://doh.pub/dns-query
  nameserver:
    - https://dns.google/dns-query
    - https://cloudflare-dns.com/dns-query

+.lan 和 +.internal.example 只是示例写法,实际使用时应替换为你的局域网或内网域名。若没有对应的规则集,不要直接照抄 rule-set:cn;先用一个自己能控制或明确存在的域名后缀测试策略是否生效。

代理节点是域名时单独处理

订阅中的节点服务器如果填写的是域名,优先检查 proxy-server-nameserver。该字段只负责节点域名解析,不等于所有代理流量都会经由该 DNS。若它为空,官方文档说明节点域名会跟随 nameserver-policy、nameserver 和 fallback 的配置。

配置后按这个顺序排查

  1. 检查 YAML:确认只有一个顶层 dns:,字段缩进一致,列表项前有短横线,DoH 或 DoT 地址没有中文标点。启动失败时,打开客户端的“日志”或“内核日志”面板,搜索 yaml、parse、unmarshal、dns 和 listen。
  2. 检查监听端口:只有在需要让其他设备或应用访问 Mihomo DNS 时才配置 listen。如果日志出现 bind、address already in use 或 listen failed,说明监听地址或端口无法使用,应改成未占用的端口,并确认没有其他 DNS 服务同时监听。
  3. 先测试普通域名:暂时移除复杂的 nameserver-policy 和 fallback,只保留一个确认可达的 nameserver。普通域名能解析后,再逐项恢复策略,这样可以区分上游不可达和规则没有匹配。
  4. 再测试节点域名:网页解析正常但代理节点无法连接时,查看节点服务器究竟是 IP 还是域名。若是域名,重点检查 proxy-server-nameserver,并在日志中查找节点解析失败、dial failed 或 no such host 等线索。
  5. 最后检查 Fake-IP:局域网设备或内网域名无法打开时,把对应后缀加入 fake-ip-filter,或临时切换 redir-host 对比。不要同时修改 TUN、DNS 上游和规则集,否则无法判断是哪一项造成变化。
  6. 启用 TUN 后单独验证:如果普通代理模式正常而 TUN 异常,再检查 TUN 的 DNS 设置、系统权限、路由和防火墙。Mihomo 官方 TUN 文档说明,dns-mode 可选 disabled、native 和 hijack,不同平台的系统 DNS 接管行为并不完全相同,可参阅Mihomo 官方 TUN 配置说明。

如果客户端提供外部控制器,也可以使用 Mihomo API 的 GET 请求检查运行版本和 DNS 查询接口。官方 API 文档列出了 /version 与 /dns/query,实际地址和认证方式以客户端设置为准。

curl -A "mihomo-dns-check" -G "http://127.0.0.1:9090/dns/query" --data-urlencode "name=example.com" --data-urlencode "type=A"

上面的命令应在本机终端执行;如果外部控制器设置了认证,请按客户端要求增加认证信息,但不要把 token、Cookie 或完整订阅链接粘贴到公开日志。API 字段和请求方法可查看Mihomo 官方 API 文档。

常见错误与修正方法

  • 把 dns: 写进 proxy-groups:将它移到配置文件顶层,与代理、策略组和规则字段对齐。
  • 重复写两个 dns::合并成一个 DNS 段,避免后面的同名字段覆盖前面的设置。
  • DoH 或 DoT 上游无法启动:检查 default-nameserver 是否能先解析相关服务器域名;也可以暂时使用 IP 形式的默认 DNS 验证链路。
  • 把 fallback 当作固定海外解析:官方文档说明 fallback 会配合 fallback-filter 使用;如果目标是明确按域名选择上游,应优先使用 nameserver-policy。
  • nameserver-policy 没有生效:先用明确的域名后缀测试,再检查规则集名称、YAML 缩进和日志中的 DNS 查询。不要一开始同时启用多个复杂规则集。
  • Fake-IP 下局域网设备异常:把实际内网域名或后缀加入 fake-ip-filter,或临时切换 redir-host 对比,不要直接关闭全部 DNS 功能。

最后核对:2026-10-26

本文的字段名称、示例结构和行为说明以 Mihomo 官方 DNS 文档、官方配置示例、官方 DNS 类型说明及官方 API 文档为依据。字段行为可能随内核版本变化,升级客户端后若同一配置表现不同,应先查看对应版本文档和启动日志,再调整配置。

如果 DNS 段本身没有问题,但整份配置仍无法启动,可继续查看Mihomo 配置模板与 YAML 校验;如果客户端已经启动但连接仍失败,可查看客户端连接失败的排查顺序。

常见问题

Mihomo DNS 配置应该放在哪里?

放在 config.yaml 顶层的 dns: 下,与 proxies:、proxy-groups:、rules: 等字段同级。如果已有 dns:,应合并字段,不要再创建第二个同名段。

nameserver 和 default-nameserver 有什么区别?

nameserver 负责常规域名查询,default-nameserver 用于解析其他 DNS 服务器的域名,尤其适合 DoH 或 DoT 上游。两者职责不同,不能简单互换。

为什么配置了 DNS,代理节点还是无法连接?

先确认订阅中的节点服务器是 IP 还是域名。如果是域名,重点检查 proxy-server-nameserver、default-nameserver 和日志中的节点解析错误;节点域名解析正常后,再检查端口、规则和代理协议。

Fake-IP 和 redir-host 应该选哪个?

需要 TUN 接管或更依赖域名规则匹配时,可以先测试 fake-ip;局域网设备、内网域名或应用兼容性异常时,可临时切换 redir-host 对比。使用 Fake-IP 时维护 fake-ip-filter。

nameserver-policy 没有生效怎么办?

先用明确的域名后缀测试,确认 YAML 缩进正确;再检查 rule-set 名称是否真实存在,并查看内核日志中的 DNS 查询和策略匹配信息。不要一开始同时启用多个复杂规则集。

Mihomo DNS 配置启动报错去哪里看?

在客户端的“日志”或“内核日志”面板查看;命令行运行 Mihomo 时查看启动窗口输出或客户端指定的日志目录。优先搜索 yaml、parse、unmarshal、dns 和 listen 等关键词。

相关阅读

参考资料

  1. Mihomo 官方 DNS 配置文档
  2. Mihomo 官方 DNS 类型说明
  3. Mihomo 官方配置示例
  4. Mihomo 官方 TUN 配置说明
  5. Mihomo 官方 API 文档