Mihomo DNS 设置不生效怎么办?先查配置是否加载
简答:改了 nameserver 却没有变化,先确认 Mihomo 当前运行配置是否真的加载了改动;再清理系统与浏览器缓存,关闭 TUN、私人 DNS 或浏览器 DoH 建立基线,最后分别检查节点域名、目标域名、fake-ip 和 DNS 劫持。
定义:Mihomo DNS 设置不生效,是指配置文件虽然修改了,但当前内核未加载,或查询被缓存、策略、TUN 劫持及应用自身 DNS 接管。
先做 30 秒自检:按症状定位第一层
改了 nameserver 却完全没有变化,最先不要更换公共 DNS,而要确认客户端当前运行的最终配置是否包含这次改动。Mihomo 的 DNS 字段包括监听地址、增强模式、默认解析器、普通解析器、节点解析器和策略解析器;原始订阅文件发生变化,不代表运行中的内核已经使用了它。DNS configuration - mihomo docs
| 症状 | 先查哪一层 | 可执行验证 |
|---|---|---|
| 运行配置没有新字段 | 订阅更新、覆写或内核重载 | 搜索当前配置中的 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
- 确认当前选中的是正在运行的 profile。
- 查看 DNS Override 是否开启,以及其中是否有旧的 DNS 内容。
- 检查扩展配置、合并配置或脚本是否再次写入
dns:。 - 保存后执行订阅更新或内核重载,再重新查看最终配置。
判定标准很简单:运行配置里能看到你刚改的字段,且重载后字段仍保留,才算配置加载成功;只看到原始订阅文件变化,不算验证完成。
复制最小 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.5macOS、Linux 或已安装 dig 的环境执行:
dig @127.0.0.1 -p 1053 example.comexample.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.comnslookup 支持指定查询服务器并返回超时、拒绝连接、无记录等诊断结果;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
- 节点域名失败:查看节点服务器地址是域名还是 IP。若是域名,优先检查
proxy-server-nameserver。 - 目标域名失败:节点已经连接但某些网站打不开时,检查
nameserver、fallback、规则和应用自身 DNS。 - 局域网域名失败:打印机、路由器和公司内网域名可能依赖本地 DNS,不要直接把所有查询改成公共 DNS。
为了验证 nameserver-policy 是否覆盖了普通 DNS,可使用不同上游做临时对照:
dns:
nameserver-policy:
'+.example.com':
- https://1.1.1.1/dns-query
nameserver:
- https://8.8.8.8/dns-queryexample.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: trueMihomo 文档说明,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。
相关阅读
参考资料
- DNS configuration - mihomo docs
- Tun - 虚空终端 Docs
- DNS resolve process - mihomo docs
- Clash Verge Rev settings interface
- nslookup | Microsoft Learn
- Troubleshooting DNS clients | Microsoft Learn
- Manage advanced network settings on your Android phone
- Configure DNS over HTTPS protection levels in Firefox
- Firefox DNS over HTTPS
- Fix hardware and system problems - Chromebook Help
- Change DNS settings on Mac