Mihomo DNS怎么配置:先跑通,再分流与 TUN 排查
简答:Mihomo DNS 配置建议分三步:先在当前配置的 dns 段启用内置 DNS 并填入可达的上游,再选择 fake-ip 或 redir-host,确认基础解析正常后才加入 nameserver-policy 和 TUN 的 dns-hijack。先备份配置,只改 dns 段;启动后用 nslookup 或 dig 查询 Mihomo 的监听地址,确认返回结果和日志,再判断是否需要分流。本文只讲 Mihomo 内核 DNS 配置,不覆盖其他客户端的菜单路径。
定义:Mihomo DNS 配置是通过 YAML 文件中的 dns 字段,定义内置 DNS 服务、上游解析器、增强模式、域名分流和 TUN 劫持行为。
先试这一步:只改最小 DNS 配置并确认能解析
不同前端保存配置的位置可能不同,先在 Mihomo 前端的当前配置、配置文件或生成配置中找到 dns: 段。不要一开始同时修改代理组、规则、TUN 和 DNS;如果启动失败,很难判断是哪一处造成的。Mihomo 使用 YAML,缩进和冒号后的空格都会影响解析,制表符不应作为缩进。可先参考Mihomo YAML 语法说明。
将原文件复制一份后,再合并下面这段最小配置。示例只监听本机回环地址,适合单机排查;它不是完整的代理配置,不能单独替代你的节点、规则或端口设置。
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: redir-host
default-nameserver:
- 223.5.5.5
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
这里的 default-nameserver 用于解析 DNS 服务本身的域名,官方文档要求该类地址可使用 IP;nameserver 是普通域名查询使用的上游;listen 是 Mihomo DNS 服务的监听地址。字段职责可对照Mihomo DNS 官方配置文档。
- 停止条件:如果前端提示 YAML 错误、字段不识别或核心无法启动,立即恢复备份,不要继续加入其他字段。
- 验证边界:核心启动成功只说明配置能被加载,不等于所有网页都能访问,也不等于代理节点已经连通。
- 回滚:关闭 Mihomo,恢复备份文件或前端的原配置,再重新加载。
第二步:理解 Fake-IP、redir-host 与 DNS 分流
enhanced-mode 目前主要使用 fake-ip 或 redir-host。官方文档说明,redir-host 返回真实解析结果,fake-ip 会为域名分配 Fake-IP 地址;默认 Fake-IP 地址池通常使用 198.18.0.1/16,但应以当前文档和运行配置为准。
| 模式 | 适合场景 | 常见观察结果 | 排查建议 |
|---|---|---|---|
redir-host | 先确认基础 DNS、局域网和普通应用是否正常 | 查询结果通常是上游返回的真实地址 | 优先用于第一阶段,问题较容易分层定位 |
fake-ip | 需要配合规则或 TUN 处理域名流量的场景 | 部分域名查询可能返回 Fake-IP 地址 | 先验证基础解析,再维护 fake-ip-filter,不要盲目加入大量域名 |
Fake-IP 不是“更快”的保证,也不能单独证明代理出站正常。若使用 Fake-IP,应保留必要的局域网、内网或特殊域名过滤项。官方文档支持域名通配和域名集合,但通配写法必须符合 Mihomo 语法,建议先使用简单的 +.lan、+.local 等明确条目测试。
完成最小配置后,再按域名添加 nameserver-policy。它会按域名或规则集合选择解析器,优先级高于普通 nameserver 查询。示例:
dns:
nameserver-policy:
'+.example.internal':
- 10.0.0.1
'+.example.com':
- https://doh.pub/dns-query
上例中的域名只是结构示例,不代表你的网络一定存在这些域名或 DNS 服务;请替换为你能实际验证的内网后缀和上游。不要直接照搬地区性 DNS 地址,先用 nslookup 或 dig 检查可达性。
第三步:节点域名、respect-rules 与 TUN 的配置顺序
如果代理节点地址使用域名,Mihomo 需要先解析节点域名,才能建立代理连接。官方文档将 proxy-server-nameserver 定义为专门解析代理节点域名的 DNS;当它为空时,可能跟随普通 DNS 配置。因此,出现“DNS 查询正常但节点连不上”时,应优先检查节点域名解析,而不是马上更换全部上游。
需要让 DNS 查询遵守流量规则时,可以考虑 respect-rules: true。但官方文档明确说明,启用它需要配置 proxy-server-nameserver,否则可能出现解析依赖自身代理的循环。建议先保持关闭,完成普通 DNS 和节点域名验证后再单独开启。
dns:
respect-rules: true
proxy-server-nameserver:
- https://doh.pub/dns-query
- 停止条件:开启
respect-rules后出现节点域名超时、DNS 循环或核心日志持续报解析错误,先关闭该字段并恢复到已验证配置。 - 验证边界:能解析节点域名只证明 DNS 层取得结果,不证明节点认证、路由规则或代理出站成功。
TUN 场景应放在最后处理。Mihomo 的 TUN 配置中常见 dns-hijack,用于接管经过 TUN 的 DNS 请求;但具体字段、权限和网卡行为会随系统及前端实现变化。先确认不启用 TUN 时 DNS 正常,再加入 TUN,并只增加必要的接管项。官方配置文档和Mihomo 配置索引可用于核对当前字段。
不要把 TUN 已开启、端口已监听或系统状态显示“已连接”当作网页可用的证明。至少分别验证:DNS 查询、节点连接、代理出站和目标网页访问。
如何验证 DNS 是否真正生效
- 查看运行配置:如果前端提供当前配置或 API 查看功能,确认运行中的
dns.enable、listen、enhanced-mode和nameserver与文件一致。Mihomo API 文档说明,/configs可获取当前运行配置,/cache/dns/flush可清理 DNS 缓存;接口地址和密钥必须以你自己的配置为准,不能直接暴露到公网。参考Mihomo API 文档。 - 查询监听地址:Windows 可使用
nslookup example.com 127.0.0.1;macOS 或 Linux 可使用dig @127.0.0.1 -p 1053 example.com。将example.com换成你实际可测试的域名。若无响应,先检查监听地址、端口占用和防火墙,不要马上修改上游。 - 观察模式差异:如果使用
fake-ip,查询结果可能落在 Fake-IP 地址池;如果使用redir-host,通常会看到上游返回的真实地址。一次查询结果只能说明该次 DNS 请求,不代表长期稳定性。 - 检查节点域名:对订阅中实际使用的节点域名单独查询。节点域名无法解析时,先处理
proxy-server-nameserver或上游可达性。 - 清理缓存后复测:修改策略或 Fake-IP 过滤后,清理 Mihomo DNS 缓存,再重新查询,避免旧结果干扰判断。
现象分流:启动失败、无响应、节点失败与局域网异常
| 现象 | 优先检查 | 不要直接下结论 |
|---|---|---|
| 核心无法启动 | YAML 缩进、冒号后的空格、重复键、前端生成配置是否覆盖手写配置 | 不要先判断为 DNS 上游故障 |
| DNS 监听无响应 | listen 地址、端口是否被占用、前端是否实际加载了该配置 | 端口存在不等于 DNS 请求已被正确处理 |
| 普通域名能解析,节点仍连不上 | 节点域名、proxy-server-nameserver、规则和代理出站日志 | 不要把 DNS 正常等同于节点正常 |
| Fake-IP 开启后应用异常 | fake-ip-filter、内网后缀、局域网地址和应用是否依赖真实地址 | 不要一次性加入大量未知过滤项 |
| TUN 开启后局域网打不开 | dns-hijack、内网域名解析、路由排除和系统权限 | 不要仅凭“已连接”判断 TUN 配置正确 |
| 怀疑 DNS 泄露 | 分开检查系统 DNS、Mihomo 监听、TUN 接管和实际出站日志 | 单次网页测试不能证明长期不存在泄露 |
最小改动原则是:一次只改一个字段,记录修改前后的查询结果和日志;如果问题扩大,立即回滚到上一份能启动的配置。对于前端覆写、Merge 配置或订阅生成配置,应以“运行中的最终配置”为准,而不是只看本地手写文件。
常见问题
Mihomo 的 DNS 配置写在哪里?
写在 Mihomo 实际加载的 YAML 配置中的 dns: 段,但不同前端可能通过订阅、Merge 或覆写生成最终配置。找不到生效原因时,优先查看前端显示的当前配置或运行配置;只改本地文件而未被加载时,查询结果不会改变。
Fake-IP 和 redir-host 哪个更好?
没有脱离场景的统一答案。排查基础 DNS、局域网和节点解析时,建议先用 redir-host;需要配合规则或 TUN 处理域名流量时,再评估 fake-ip。选择模式不等于获得固定速度或稳定性。
为什么要配置 proxy-server-nameserver?
当代理节点地址是域名时,它负责为节点域名提供解析路径。尤其在开启 respect-rules 后,官方文档要求关注该字段,以避免 DNS 查询依赖尚未建立的代理连接。
配置改了但 DNS 结果不变怎么办?
按顺序检查:前端是否覆盖了手写配置、运行配置是否包含新字段、DNS 缓存是否需要清理、查询是否真的发往 Mihomo 的监听地址。浏览器可打开不代表它使用了你刚配置的 DNS。
可以直接把监听地址改成 0.0.0.0 吗?
不建议把排查配置直接暴露到所有网卡。先使用 127.0.0.1 完成本机验证;只有明确需要局域网设备使用时,才根据当前版本文档配置访问范围、认证和防火墙规则。
常见问题
Mihomo DNS 配置在哪里修改?
修改 Mihomo 实际加载的 YAML 配置中的 dns 段,但前端可能通过订阅、Merge 或覆写生成最终配置,应以运行配置为准。
Mihomo DNS 配置后启动失败怎么办?
先恢复备份,再检查 YAML 缩进、冒号后的空格、重复键和前端覆写;不要在未恢复基础配置前继续增加 Fake-IP、分流或 TUN 字段。
Fake-IP 和 redir-host 应该怎么选?
基础 DNS 和节点解析排查可先用 redir-host;确认基础解析正常后,再按规则或 TUN 需求评估 fake-ip。两者都不是速度或稳定性的保证。
为什么节点域名解析失败?
检查节点域名是否可解析、proxy-server-nameserver 是否需要单独配置,以及 respect-rules 是否造成解析依赖循环。普通域名能解析不代表节点域名一定能解析。