Mihomo DNS 配置教程:从最小配置到逐层排查
简答:Mihomo DNS 配置主要写在当前配置文件的 dns 字段中。新手先启用 enable、选择 enhanced-mode、填写 default-nameserver 和 nameserver;如果使用 TUN,再按需配置 dns-hijack。保存后不要只看“已连接”,还要分别验证配置是否加载、DNS 是否被接管、域名是否按预期解析以及最终连接是否成功。
定义:Mihomo DNS 配置是由 dns 字段控制的域名解析模块,用于指定上游 DNS、Fake-IP 或 redir-host 模式、节点域名解析和按域名选择解析路径。
先试这份最小配置:只改 dns,不引入未定义规则
本文为第三方使用指南,适用于已经安装 Mihomo 或使用 Mihomo 内核前端的读者。配置字段可能随安装版本变化,复制前应以当前版本的 --help、配置校验入口和对应版本官方 DNS 文档为准。
先备份当前配置,再在配置文件顶层加入以下内容。这个示例不依赖 rule-set、geosite 或额外代理组,适合先确认 DNS 模块能否启动。
dns:
enable: true
ipv6: false
enhanced-mode: redir-host
default-nameserver:
- 1.1.1.1
- 8.8.8.8
nameserver:
- https://1.1.1.1/dns-query
- https://dns.google/dns-query- 备份:复制当前配置文件,保留原文件名和位置。
- 修改:确认
dns:与顶层配置对齐,不要把它缩进到proxy-groups或其他字段下面。 - 校验:使用当前前端提供的配置检查功能;如果直接运行 Mihomo,则先查看当前版本支持的命令参数,不要套用其他版本命令。
- 重载:重新载入配置或重启 Mihomo,观察日志中是否出现 YAML、DNS 上游或字段解析错误。
- 验证:先用浏览器访问一个普通域名,再用系统的
nslookup或 macOS/Linux 的dig查询;两者都成功,才说明基础解析路径暂时可用。
停止条件是:配置校验失败、Mihomo 未能重新载入,或日志明确提示未知字段。此时先回滚到备份,不要继续叠加 fallback、Fake-IP 和 TUN 参数。
字段怎么选:nameserver、节点解析与直连解析不是一回事
default-nameserver 用于解析 DNS 服务器自身的域名,官方文档说明这里应使用 IP 地址,也可以使用加密 DNS;nameserver 是普通域名的主要解析服务器;fallback 是备用解析路径,是否需要取决于你的网络和分流需求。具体字段定义可查看Mihomo DNS 配置说明。
| 字段 | 作用 | 新手建议 |
|---|---|---|
enable | 启用 Mihomo DNS 模块;关闭后使用系统 DNS | 先设为 true |
listen | 让 Mihomo 在指定地址和端口监听 DNS 请求 | 只有需要被其他设备或 TUN 接管时再配置 |
default-nameserver | 解析 DoH、DoT 等上游服务器地址 | 优先填可直接访问的 IP 或加密 DNS |
nameserver | 主要域名解析上游 | 先配置一到两个稳定上游 |
proxy-server-nameserver | 专门解析代理节点域名 | 节点域名解析失败时再加 |
direct-nameserver | 直连出口使用的解析服务器 | 存在直连分流且需要区分解析路径时再加 |
nameserver-policy | 按域名或规则匹配指定解析服务器 | 确认基础配置稳定后再使用 |
如果订阅中的节点地址是域名,普通网页可以解析但节点仍无法连接,可能是节点域名使用了不同解析路径。此时可尝试增加独立的 proxy-server-nameserver,并观察日志是否从“节点域名解析失败”变为能够发起连接。该字段只负责节点域名解析,不代表节点本身一定可用。
dns:
enable: true
default-nameserver:
- 1.1.1.1
nameserver:
- https://1.1.1.1/dns-query
proxy-server-nameserver:
- https://1.1.1.1/dns-query这里的验证边界是:节点域名能够解析,只能证明 DNS 解析阶段通过;端口、协议、认证、路由和远端服务仍需单独排查。
Fake-IP 和 redir-host 怎么选
Mihomo 官方文档列出的 enhanced-mode 可选值是 fake-ip 和 redir-host,默认值为 redir-host。两者都属于 DNS 处理模式,但排查方式不同。
| 模式 | 工作特点 | 适合情况 | 常见注意点 |
|---|---|---|---|
redir-host | 返回真实解析地址 | 首次配置、兼容性优先、需要观察真实 IP | 部分分流或域名识别场景可能不如 Fake-IP 直接 |
fake-ip | 为域名返回 Fake-IP,并由 Mihomo 维护映射 | TUN 或需要更完整域名接管的场景 | 局域网、NAS、打印机、本地域名和部分应用可能需要加入过滤 |
建议先用 redir-host 验证基础解析和连接,再切换到 fake-ip。如果切换后局域网设备、打印机或 NAS 无法访问,可先恢复 redir-host;若确认问题只在 Fake-IP,再按域名补充 fake-ip-filter,不要一开始把大量域名加入过滤列表。
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-filter:
- '*.lan'
- '*.local'
- 'localhost'fake-ip-filter 的匹配规则和模式说明以官方 DNS 字段文档为准。过滤后应重新测试局域网地址、普通网页和需要代理的域名,确认变化来自 Fake-IP 而不是其他配置。
桌面代理、TUN 和路由器场景的配置差异
DNS 配置是否真正接管请求,不只取决于 dns.enable。还要看流量从哪里进入 Mihomo,以及系统或应用是否绕过了它。
仅使用系统代理
适合先做基础验证。先启用 dns 模块并保持 redir-host,在前端开启系统代理,然后测试浏览器和命令行工具。浏览器能打开网页不代表所有应用都使用系统代理,也不代表 DNS 请求全部经过 Mihomo。
使用 TUN
TUN 用于捕获系统流量,通常还会配合 DNS 接管。官方 TUN 文档说明,dns-mode 可选 disabled、native 和 hijack;dns-hijack 可将匹配的 DNS 请求导入内部 DNS 模块,但 Windows、macOS 和 Android 对本地网络 DNS、系统设置及 Private DNS 存在限制。详见Mihomo TUN 官方文档。
tun:
enable: true
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53这段只适合在确认当前版本支持相应字段、且前端有权限启用 TUN 时使用。若开启后断网,立即关闭 TUN 或恢复备份配置,再单独检查路由、系统防火墙和 DNS 模式。
路由器或 OpenWrt
路由器场景需要额外确认 Mihomo 的监听地址、局域网访问权限、防火墙和端口转发。listen 只表示 DNS 服务监听,不能单独证明局域网设备已经把 DNS 请求发送到 Mihomo;还要在客户端或路由器上检查实际 DNS 地址。
DNS 不生效时,按四层结果定位
不要把“配置文件保存成功”“端口正在监听”“浏览器能打开网页”和“DNS 已被 Mihomo 接管”混为一个结论。按下面顺序排查,每层失败就停在当前层。
| 验证层级 | 怎么查 | 结果如何解释 |
|---|---|---|
| 配置加载 | 前端配置校验、重载日志、当前配置预览 | 失败说明 YAML、字段或版本兼容有问题 |
| 服务监听 | 查看前端日志或系统端口监听信息 | 监听存在不等于请求已经进入 Mihomo |
| 域名解析 | 使用 nslookup 或 dig 查询,并对照 Mihomo 日志 | 能返回地址不等于使用了预期上游 |
| 最终连接 | 分别测试直连域名、代理域名和节点域名 | 连接失败可能来自路由、端口、协议或节点本身 |
- 配置报错:删除最近新增的字段,保留最小配置,再逐项恢复。
- 节点域名失败:检查
proxy-server-nameserver,同时查看节点地址是否为域名、端口是否可达。 - 局域网异常:先切回
redir-host,再检查fake-ip-filter和 TUN 的 DNS 接管方式。 - 浏览器正常但其他应用失败:检查应用是否使用自带 DNS、DoH 或独立代理设置;系统代理不一定覆盖所有应用。
- DNS 请求绕过 Mihomo:检查 TUN 是否启用、
dns-hijack是否适用于当前系统,以及浏览器内置安全 DNS 是否另行启用。
如果需要抓包或提交日志,先删除订阅地址、节点密码、访问令牌和个人 IP 等敏感信息。无法确认请求是否经过 Mihomo 时,应写成“尚未核实”,不要仅凭一次网页访问下结论。
回滚与维护:先保证能恢复,再做高级分流
DNS 配置适合按变量逐项修改。每次只改变一个因素,例如先切换 enhanced-mode,再增加 proxy-server-nameserver,最后才考虑 fallback 或 nameserver-policy。
- 保留最近一次可用配置和当前测试配置。
- 记录 Mihomo 版本、前端名称、系统、是否启用 TUN 和修改过的字段。
- 出现断网时先关闭 TUN 或恢复备份,不要同时更改 DNS、规则和节点。
- 恢复后重新验证配置加载、DNS 请求路径和最终连接。
DoH、DoT、DoQ 和普通 UDP 都是 Mihomo 文档支持的 DNS 类型,具体写法可参考官方 DNS 类型说明。选择上游时应优先考虑当前网络能否稳定访问、是否需要加密传输、是否需要 IPv6,以及是否与直连和代理分流目标一致;不要把某个上游地址的单次成功解析当作长期可用性结论。
结论:新手的最短路径
先备份配置,使用 enable: true、default-nameserver、nameserver 和 enhanced-mode: redir-host 完成基础验证;普通解析成功后,再根据节点域名、TUN、局域网或分流需求增加 proxy-server-nameserver、fake-ip-filter 和 nameserver-policy。每次修改后都要分别确认配置已加载、请求已被接管、域名解析符合预期,以及最终连接没有其他故障。
常见问题
Mihomo DNS 配置应该写在哪里?
通常写在当前生效配置文件的顶层 dns 字段中,而不是代理组、规则或节点字段内部。使用前端时,应先确认当前 Profile 或配置覆写位置,因为不同前端的入口名称可能不同。
Mihomo 的 Fake-IP 和 redir-host 哪个更好?
没有对所有环境都更好的固定答案。首次配置和兼容性排查建议先用 redir-host;需要更完整的域名接管或使用 TUN 时,再测试 fake-ip,并为局域网、本地域名和异常应用逐项设置过滤。
为什么开启 DNS 后,节点还是连接失败?
DNS 模块只负责解析,不负责保证节点端口、协议、认证和线路可用。若普通域名正常而节点域名失败,可检查 proxy-server-nameserver;若节点域名已解析仍连接失败,应继续查看端口、协议和路由日志。
开启 TUN 后 DNS 反而不稳定怎么办?
先关闭 TUN或恢复备份,确认基础 DNS 配置可以工作,再检查 dns-mode、dns-hijack、auto-route、系统防火墙以及浏览器或 Android Private DNS 是否绕过 Mihomo。