AgentNEO

Mihomo DNS 设置不生效怎么办?先查配置是否加载

更新于 2026-10-24 · agentneo.top

简答:改了 nameserver 却没有变化,先确认 Mihomo 当前运行配置是否真的加载了改动;再清理系统与浏览器缓存,关闭 TUN、私人 DNS 或浏览器 DoH 建立基线,最后分别检查节点域名、目标域名、fake-ip 和 DNS 劫持。

定义:Mihomo DNS 设置不生效,是指配置文件虽然修改了,但当前内核未加载,或查询被缓存、策略、TUN 劫持及应用自身 DNS 接管。

先做 30 秒自检:按症状定位第一层

改了 nameserver 却完全没有变化,最先不要更换公共 DNS,而要确认客户端当前运行的最终配置是否包含这次改动。Mihomo 的 DNS 字段包括监听地址、增强模式、默认解析器、普通解析器、节点解析器和策略解析器;原始订阅文件发生变化,不代表运行中的内核已经使用了它。DNS configuration - mihomo docs

DNS 设置不生效速查卡
症状先查哪一层可执行验证
运行配置没有新字段订阅更新、覆写或内核重载搜索当前配置中的 dns:、listen:、nameserver:
节点域名无法连接节点域名解析检查 proxy-server-nameserver,再测试节点连接
节点已连接,只有部分网站打不开目标域名、策略或应用 DNS关闭浏览器 DoH,检查 nameserver-policy
关闭 TUN 后恢复DNS 劫持、路由、权限或防火墙对照 tun、dns-hijack、auto-route
改完后仍显示旧地址系统、浏览器或 fake-IP 缓存清理缓存后重新查询同一域名

如果当前配置没有新字段,先保存配置、更新订阅或重载内核;如果新字段已经出现,再继续下面的 DNS 对照。每次只修改一层,不要同时改 DNS、TUN、IPv6 和规则。

先确认运行配置:订阅、覆写和内核是否同步

在客户端中打开“当前配置”“运行配置”或类似页面,搜索刚修改的字段。重点确认 dns.enable、listen、enhanced-mode 和 nameserver 是否存在。如果 dns.enable 为 false,Mihomo 会使用系统 DNS;如果没有 listen,你也无法按本文的本地监听端口命令验证内置 DNS。DNS configuration - mihomo docs

如果使用 Clash Verge Rev,还要检查活动配置对应的 DNS Override 开关。项目界面文案显示,DNS Override 按 profile 单独保存,并可能替换订阅中的 DNS;因此,手动改原始订阅后,图形界面的覆写仍可能在加载时覆盖相关字段。Clash Verge Rev settings interface

  1. 确认当前选中的是正在运行的 profile。
  2. 查看 DNS Override 是否开启,以及其中是否有旧的 DNS 内容。
  3. 检查扩展配置、合并配置或脚本是否再次写入 dns:。
  4. 保存后执行订阅更新或内核重载,再重新查看最终配置。

判定标准很简单:运行配置里能看到你刚改的字段,且重载后字段仍保留,才算配置加载成功;只看到原始订阅文件变化,不算验证完成。

复制最小 DNS 配置,再用 dig 或 nslookup 验证

下面示例只用于建立基线,不是所有网络环境的推荐值。223.5.5.5、doh.pub、dns.alidns.com 只是示例上游;请按所在地区、运营商、办公网络或实际可用的 DNS 服务替换。Mihomo 文档列出了 listen、default-nameserver、nameserver 和 proxy-server-nameserver 的配置关系。DNS configuration - mihomo docs

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: false
  default-nameserver:
    - 223.5.5.5
  enhanced-mode: redir-host
  nameserver:
    - https://doh.pub/dns-query
  proxy-server-nameserver:
    - 223.5.5.5

macOS、Linux 或已安装 dig 的环境执行:

dig @127.0.0.1 -p 1053 example.com

example.com 是示例域名,请替换为实际目标。正常表现是返回 ANSWER SECTION,或至少出现明确的 NOERROR 状态。若显示 connection refused,检查 Mihomo 是否运行、listen 地址是否一致,以及 1053 端口是否被占用。

Windows 命令提示符可以直接指定端口:

nslookup -port=1053 example.com 127.0.0.1

如果当前 Windows 版本不接受该写法,可进入交互模式后执行:

nslookup
set port=1053
server 127.0.0.1
example.com

nslookup 支持指定查询服务器并返回超时、拒绝连接、无记录等诊断结果;Microsoft 也建议用它分别测试失败记录和公共域名。nslookup | Microsoft Learn Troubleshooting DNS clients | Microsoft Learn

清理缓存:Windows、macOS、Chrome 和 Android 分开处理

切换 fake-ip、redir-host 或上游 DNS 后,旧的系统、浏览器和 fake-IP 映射可能让结果暂时看起来没有变化。清缓存前先记下同一个测试域名,清理后只重复这一项查询。

  • Windows:以管理员身份打开命令提示符,执行 ipconfig /flushdns,再用 nslookup 查询。Microsoft 文档说明,客户端缓存可能保留“Name does not exist”等负面结果,清理后应重新测试。Troubleshooting DNS clients | Microsoft Learn
  • macOS:可先在“系统设置 → 网络 → 当前网络 → 详细信息 → DNS”确认系统 DNS;以下命令属于社区常用做法,不同系统版本可能需要重启网络或设备:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。Apple 官方入口可用于核对当前 DNS 服务器设置。Change DNS settings on Mac
  • Chrome:打开 chrome://net-internals/#dns,点击 Clear host cache;随后完全退出并重新打开浏览器。Google 帮助页将该页面列为清理 Chrome DNS 缓存的入口。Fix hardware and system problems - Chromebook Help
  • Android:先打开飞行模式,等待片刻后关闭,再重新连接网络;如果仍异常,检查“设置 → 网络和互联网 → 私人 DNS”,临时选择“自动”后测试。Android 官方说明该菜单通常提供“关闭”“自动”和“私人 DNS 提供商主机名”三种选项,具体路径可能因厂商变化。Manage advanced network settings on your Android phone

清理后仍返回旧地址时,不要马上判定 DNS 不生效,继续检查是否启用了 fake-IP。fake-IP 模式下,返回地址可能来自 198.18.0.1/16 这一默认参考网段,不能只凭“不是公网 IP”判断失败。DNS configuration - mihomo docs

分别检查节点域名、目标域名和 DNS 策略

proxy-server-nameserver 只用于解析代理节点域名,不是所有网站都会使用的 DNS。目标网站通常还会受到 nameserver、fallback、nameserver-policy 和直连解析设置影响。DNS configuration - mihomo docs

  1. 节点域名失败:查看节点服务器地址是域名还是 IP。若是域名,优先检查 proxy-server-nameserver。
  2. 目标域名失败:节点已经连接但某些网站打不开时,检查 nameserver、fallback、规则和应用自身 DNS。
  3. 局域网域名失败:打印机、路由器和公司内网域名可能依赖本地 DNS,不要直接把所有查询改成公共 DNS。

为了验证 nameserver-policy 是否覆盖了普通 DNS,可使用不同上游做临时对照:

dns:
  nameserver-policy:
    '+.example.com':
      - https://1.1.1.1/dns-query
  nameserver:
    - https://8.8.8.8/dns-query

example.com 仅为示例,请替换为实际域名后缀。先测试策略存在时的结果,再删除 nameserver-policy 并重载后测试。若只有删除策略后恢复,问题更可能在策略匹配或上游选择。Mihomo 文档说明,nameserver-policy 的优先级高于普通 nameserver 和 fallback 查询。DNS configuration - mihomo docs

fake-ip、redir-host 和 TUN 要分开对照

Mihomo 的 enhanced-mode 可使用 fake-ip 或 redir-host。排障时先固定一种模式,再测试同一个域名,不要同时修改模式、规则、IPv6 和 TUN。DNS configuration - mihomo docs

dns:
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter-mode: blacklist
  fake-ip-filter:
    - '*.lan'
    - '*.local'

如果局域网设备或内网域名异常,可把对应后缀加入 fake-ip-filter。如果只有单个应用异常,先记录该应用访问的域名,再决定是否添加过滤项;不要把所有域名都加入过滤列表。

需要测试 TUN 时,可以先用下面的最小片段,字段含义以当前 Mihomo 文档和客户端支持情况为准:

tun:
  enable: true
  stack: mixed
  dns-hijack:
    - any:53
    - tcp://any:53
  auto-route: true

Mihomo 文档说明,TUN 可通过 auto-route 自动设置路由,dns-hijack 会把匹配的 DNS 连接导入内部 DNS 模块;Windows 使用某些协议栈时还可能需要防火墙放行,Android 开启私人 DNS 时则无法自动劫持 DNS。Tun - 虚空终端 Docs

验证顺序是:先关闭 TUN,仅保留普通代理;再测试同一域名;然后开启 TUN,检查日志、系统代理和 DNS 监听是否仍有结果。若只有 TUN 失败,优先看权限、路由、防火墙和 dns-hijack,不要先更换所有 DNS。

Firefox、Android 和系统 DNS 可能绕过 Mihomo

Firefox 可以单独使用 DNS over HTTPS。Mozilla 的设置页说明,DoH 状态可能是 Active、Not active 或 Off;排障时在“设置 → 隐私与安全 → DNS over HTTPS”中选择关闭,再完全重启 Firefox,测试同一个域名。Configure DNS over HTTPS protection levels in Firefox Firefox DNS over HTTPS

Android 的私人 DNS 也可能让系统 DNS 请求不经过 Mihomo 的自动劫持。排障时将私人 DNS 临时设为“自动”,保存后重新测试;如果恢复,再根据 TUN 文档检查 dns-mode、strict-route 和权限。Manage advanced network settings on your Android phone Tun - 虚空终端 Docs

如果只有某个浏览器或应用失败,先关闭该应用自己的 DoH、Secure DNS 或自带网络代理,再与系统浏览器做同域名对照。只有在“应用 DNS 已关闭、普通代理正常、TUN 也正常”后,才继续检查规则和应用自身缓存。

端口、YAML 和常见字段错误怎么快速排除

以下错误会让配置看起来已修改,但实际没有按预期运行:

  • 缩进错误:nameserver 必须属于 dns,列表项要比字段多一级缩进。
  • 字段拼写错误:nameserver 不是 nameservers;字段不存在时,先对照 Mihomo 文档,不要凭其他客户端字段猜测。
  • DoH 地址不完整:应核对是否包含 https:// 和服务要求的 /dns-query 路径。
  • 端口被占用:Windows 执行 netstat -ano | findstr 1053;macOS 或 Linux 执行 lsof -i :1053。有输出时,先确认 PID 对应的程序,再决定是否更换监听端口。

端口命令只说明“是否有程序占用”,不代表该程序就是 Mihomo。最终仍要用 dig 或 nslookup 查询监听地址,并检查返回状态。

最终验收:用同一个域名完成四项记录

排查结束时,至少记录以下四项:运行配置是否保留改动、DNS 监听是否可查询、节点域名是否能连接、目标域名在普通代理和 TUN 下是否一致。Mihomo 的 DNS 解析流程会先考虑策略匹配,再使用普通或备用解析器;因此网页偶尔能打开,不能单独证明某个 DNS 字段已经生效。DNS resolve process - mihomo docs

验收标准
项目正常表现异常时优先检查
配置加载重载后运行配置仍有新字段订阅更新、DNS Override、扩展配置
本地监听指定端口查询返回 NOERROR 或答案listen、端口占用、防火墙
节点域名节点域名解析并完成连接proxy-server-nameserver
目标域名同一域名在普通代理和 TUN 下结果可解释nameserver-policy、规则、fake-IP、应用 DoH

如果仍未定位,保留失败时间、系统、客户端、当前生效配置片段和第一条明确日志,并先打码订阅链接、节点密码、令牌及完整日志中的敏感信息。

本文与 Mihomo 项目及其开发者无隶属关系,客户端界面和字段支持以项目公开文档及当前版本为准。

继续排查连接接管与规则命中

完成 DNS 分层验证后,如果节点域名和目标域名都能解析,但应用仍打不开,可以继续检查系统代理、TUN 路由、规则命中和防火墙状态。

若你需要进一步整理设备配置与连接故障,可先查看 连接问题排查指南,再按系统进入 设备配置指南。

常见问题

Mihomo 修改 nameserver 后为什么没有变化?

先查看客户端当前运行配置,而不是只看原始订阅文件。如果运行配置没有新字段,检查订阅更新、DNS Override、扩展配置和内核重载;如果字段已加载,再清理系统与浏览器缓存并检查策略。

proxy-server-nameserver 是所有网站都会使用的 DNS 吗?

不是。它主要用于解析代理节点域名。目标网站通常还会受到 nameserver、fallback、nameserver-policy、直连解析和应用自身 DNS 的影响。

Windows 如何测试 Mihomo 的 1053 DNS 端口?

可以执行 nslookup -port=1053 example.com 127.0.0.1,其中 example.com 要替换为实际域名。若命令不接受该参数,可进入 nslookup 交互模式后使用 set port=1053 和 server 127.0.0.1。

fake-ip 模式下返回 198.18.0.1/16 是不是 DNS 失败?

不一定。fake-ip 模式可能返回 198.18.0.1/16 这一虚拟地址范围,不能只凭地址不是公网 IP 判定失败,应结合应用是否能连接、日志和规则命中结果判断。

为什么只有 Firefox 或 Android 应用打不开?

Firefox 可能启用了独立的 DNS over HTTPS,Android 可能启用了私人 DNS。排障时暂时关闭 Firefox DoH,或将 Android 私人 DNS 改为自动,再测试同一个目标域名。

TUN 关闭后正常,开启后 DNS 又不生效怎么办?

先确认 tun.enable、auto-route 和 dns-hijack 是否出现在运行配置中,再检查系统权限、防火墙和 Android 私人 DNS。普通代理正常而 TUN 失败时,优先排查流量接管层,不要先同时更换 DNS。

相关阅读

参考资料

  1. DNS configuration - mihomo docs
  2. Tun - 虚空终端 Docs
  3. DNS resolve process - mihomo docs
  4. Clash Verge Rev settings interface
  5. nslookup | Microsoft Learn
  6. Troubleshooting DNS clients | Microsoft Learn
  7. Manage advanced network settings on your Android phone
  8. Configure DNS over HTTPS protection levels in Firefox
  9. Firefox DNS over HTTPS
  10. Fix hardware and system problems - Chromebook Help
  11. Change DNS settings on Mac