Mihomo DNS 配置:从最小 YAML 到 Fake-IP 排查
简答:Mihomo DNS 配置先确认真正生效的 YAML,再按 enable、enhanced-mode、nameserver 和 nameserver-policy 逐项设置。普通桌面可先使用 redir-host;启用 TUN 并需要统一接管 DNS 时,再根据应用兼容性切换 Fake-IP。修改后必须重载配置,并用本地 DNS 监听测试和实际访问结果交叉确认。
定义:Mihomo DNS 配置是通过 dns 区块定义本地 DNS 监听、上游解析器、域名分流、Fake-IP 或 redir-host 模式,以及节点域名和直连域名解析方式的一组配置。
先试这一步:确认配置位置、模式与监听端口
本文是面向 Mihomo 使用者的第三方使用指南,不代表任何客户端或服务商官方。配置前先备份当前 YAML,并确认你修改的是 Mihomo 实际加载的配置文件,而不是订阅生成文件、客户端覆写文件或 Merge 片段。
| 现象 | 先查层级 | 判断标准 | 下一步 |
|---|---|---|---|
| 改完 DNS 没变化 | 配置来源 | 当前运行配置中的 dns 字段仍未改变 | 检查 Profile、订阅覆写、Merge 和 Script |
| 域名能解析但节点连不上 | 节点域名解析 | nameserver 正常,但代理节点域名解析失败 | 补充 proxy-server-nameserver |
| 局域网设备打不开 | Fake-IP 过滤与 TUN | 局域网域名被映射为 Fake-IP 或 DNS 未被正确接管 | 加入局域网过滤项并检查 dns-hijack |
| 改端口后无法查询 | 监听地址和端口 | 端口被其他进程占用,或测试仍使用旧端口 | 更换端口并重新测试 |
Mihomo 官方文档说明,enable: false 时会使用系统 DNS;listen 可提供 UDP 和 TCP DNS 服务;enhanced-mode 支持 fake-ip 与 redir-host。字段的默认值和支持范围应以当前文档为准,可查看 Mihomo DNS 配置文档。
建议首次测试使用本机回环地址和不常用端口,例如 127.0.0.1:1053。如果客户端只允许填写端口而不允许填写监听地址,应根据客户端页面的实际字段调整;不要直接把 DNS 监听暴露到公网。
最小可用 Mihomo DNS YAML
下面是可作为起点的结构片段,适合先验证 DNS 模块是否工作。它不是所有客户端都能直接覆盖的完整配置,必须合并到已有 YAML 的顶层 dns: 区块中,避免重复写多个同级 dns 字段。
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
fake-ip-filter:
- '*.lan'
- '*.local'
- localhostdefault-nameserver 用于解析 DNS 服务器自身的域名,官方文档要求其使用 IP 地址,也可以使用加密 DNS;nameserver 是普通域名查询使用的主要上游。DoH、DoT、DoQ、UDP 和 TCP 的写法可参考 Mihomo DNS 类型说明。
这份最小配置选择 redir-host,原因是它通常更容易与局域网、部分应用和需要真实目标地址的场景兼容。若你的应用依赖 TUN 接管、规则按域名分流,或需要统一处理大量应用 DNS,再评估 Fake-IP,而不是一开始同时修改多个高级字段。
修改后依次执行:保存备份、在客户端执行配置检查、重载或重新启用 Profile、确认日志没有 YAML 错误,再测试 127.0.0.1:1053。如果客户端没有独立的配置检查按钮,应先通过 API 或客户端日志确认重载是否成功;不要仅凭界面显示“已连接”判断 DNS 已生效。
核心字段怎么组合:enable、nameserver 与分流
enable:决定是否启用 Mihomo 内置 DNS。关闭后,解析通常回到系统 DNS,TUN 或系统代理是否仍能接管流量取决于客户端和 TUN 配置。
listen:指定 Mihomo DNS 服务监听地址和端口。绑定 127.0.0.1 只允许本机访问;绑定局域网地址可供其他设备使用,但需要同时考虑防火墙、访问控制和 DNS 暴露风险。
ipv6:设为 false 时,AAAA 查询会返回空结果。只有在确认当前网络、节点和应用不需要 IPv6 时才建议关闭;关闭后可能改变部分应用的连接路径。
default-nameserver:用于解析 DoH 或其他基于域名的上游地址。它不是普通网页域名的主要解析列表,不能简单替代 nameserver。
nameserver:普通域名查询的主要上游。可填写 UDP、TCP、DoT、DoH 或 DoQ 地址,但不同上游的连通性、返回结果和网络路径可能不同,应在实际环境中验证。
fallback 与 fallback-filter:用于备用解析和结果筛选。官方文档指出,配置 fallback 后会启用相应过滤逻辑;其中 geosite 过滤方向已标记为弃用,应优先考虑 nameserver-policy 做域名分流。
nameserver-policy:按域名或 geosite 等条件指定解析器,并优先于普通的 nameserver 和 fallback 查询。可先用明确的域名后缀测试,确认规则命中后,再扩大范围。
dns:
nameserver-policy:
'+.lan':
- system
'geosite:cn':
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
'+.example.com':
- https://1.1.1.1/dns-query上面是结构示例,不代表每个环境都应使用同一组上游。对于企业内网域名、家庭路由器域名或本地服务,应优先使用实际网络提供的内部 DNS;不要把内部域名交给公网解析器。
Fake-IP、redir-host 和 normal:按故障选择
| 模式 | 主要特点 | 适合场景 | 常见问题 |
|---|---|---|---|
fake-ip | 为域名返回 Fake-IP,并由 Mihomo 映射回原域名 | TUN 接管、按域名规则分流、需要减少重复解析的场景 | 局域网、游戏、部分登录和内置网络检测可能不兼容 |
redir-host | 保留解析得到的真实地址 | 先求兼容性、普通桌面代理、局域网设备较多的场景 | 部分分流依赖域名时,可能需要更仔细的规则配置 |
normal | 不是当前 DNS 文档中与 fake-ip、redir-host并列的增强模式值 | 需核对当前客户端或衍生版本是否自定义支持 | 不要把其他软件的字段直接套入 Mihomo |
官方 DNS 文档列出的增强模式是 fake-ip 和 redir-host。如果某个客户端界面出现“normal”,应先查看该客户端对应的配置说明和最终生成 YAML,不能仅凭界面名称推断 Mihomo 内核会接受该值。
Fake-IP 的地址池由 fake-ip-range 指定,过滤项由 fake-ip-filter 控制。官方示例支持域名通配符;可先加入 *.lan、*.local 和已确认的内网域名。过滤项过宽可能让更多请求回到真实解析,过滤项过窄则可能导致局域网或特殊应用异常。
切换模式时只改一个变量:先从 Fake-IP 切换到 redir-host,清理 DNS 缓存和 Fake-IP 缓存,再重复同一个访问测试。若问题消失,可以初步判断兼容性与 Fake-IP 映射有关,但仍不能据此断定是某个具体应用的唯一原因。
节点域名、直连域名与规则 DNS
proxy-server-nameserver 只用于解析代理节点域名。节点订阅已经成功导入,但节点域名解析失败时,补充这一项比盲目增加普通 nameserver 更有针对性。
dns:
proxy-server-nameserver:
- https://doh.pub/dns-query
direct-nameserver:
- system
respect-rules: false如果启用 respect-rules,DNS 连接会遵守路由规则,官方说明同时要求配置 proxy-server-nameserver,并不建议将它与 prefer-h3 一起使用。启用前应准备回滚:保留原配置,将 respect-rules 改回 false,重载后重新测试节点和网页访问。
direct-nameserver 用于直连出口的域名解析;direct-nameserver-follow-policy 决定它是否遵守 nameserver-policy。如果你配置了内部 DNS、分流 DNS 或企业域名,必须明确哪些域名应走内网解析,避免使用公网 DNS 查询内部名称。
DNS 解析路径并不等于完整流量路径。一次网页访问至少可能包含客户端 DNS、代理节点域名解析、规则匹配、TCP 或 UDP 建连,以及应用自身的 DoH/DoT。Mihomo 官方给出了 DNS 处理流程图,可参考 DNS resolve process 对照排查。
TUN、dns-hijack 与 DNS 绕过排查
TUN 模式下,DNS 是否被接管取决于 TUN 的 dns-mode、dns-hijack、路由和系统行为。官方文档列出 disabled、native、hijack 三类模式;Windows 使用 hijack 时还涉及 strict-route,Linux 可能涉及 auto-redirect。
需要注意,官方文档说明 macOS 和 Windows 无法自动劫持发送到本地网络的 DNS 请求;Android 开启 Private DNS 时,也可能无法自动劫持 DNS。因此,看到 Mihomo 日志有查询记录,并不等于所有应用的 DNS 都已经经过 Mihomo。
- 先关闭应用内置的“安全 DNS”“Private DNS”或 DoH 选项进行对照测试;如果关闭后才恢复,说明应用可能绕过了系统 DNS。
- 确认 TUN 的 DNS 模式、DNS 劫持目标和路由状态,修改前记录原值,出现断网时按原值回滚。
- 检查监听端口是否真的被 Mihomo 占用,避免系统 DNS、路由器 DNS 或其他软件同时使用同一端口。
- 使用同一域名分别测试系统解析、Mihomo 本地监听和实际应用访问,不能只看其中一项。
官方 TUN 文档还指出,dns-hijack 默认按 UDP 处理,若写明协议可指定其他方式;具体可查看 Mihomo TUN 配置文档。TUN 设置会影响整台设备的网络,修改前应准备禁用 TUN、恢复系统代理或删除路由的回滚路径。
配置不生效、端口占用和节点连不上的完整流程
- 确认文件:在客户端打开当前 Profile 或配置详情,确认修改的文件就是运行文件;如果配置来自订阅,检查是否存在覆写、Merge、Script 或自动生成环节。
- 确认 YAML:检查缩进、冒号、列表短横线和重复顶层字段。不要把 Tab 与空格混用,也不要把完整
dns:区块嵌套到另一个dns:下。 - 确认重载:重载后查看日志和运行配置。若配置启用了外部控制器,可通过官方 API 的运行配置接口读取当前配置;相关接口说明见 Mihomo API 文档。
- 确认端口:Linux 或 macOS 可运行
dig @127.0.0.1 -p 1053 example.com;Windows PowerShell 可使用nslookup -port=1053 example.com 127.0.0.1。预期是收到 DNS 响应;超时则优先查监听地址、端口、防火墙和客户端是否已重载。 - 确认上游:临时只保留一个已知可达的
nameserver,避免多个上游返回结果不同导致判断混乱。验证成功后再逐项加回 DoH、DoT、fallback 或 policy。 - 确认节点:普通域名能解析但节点仍无法连接时,单独检查
proxy-server-nameserver;不要把节点域名解析问题误判为代理协议或线路问题。 - 确认缓存:切换 Fake-IP、上游或策略后,清理 DNS 缓存和 Fake-IP 缓存,再重复同一域名测试。单次成功只能证明一次查询成功,不能证明所有应用和所有规则均已生效。
如果配置恢复正常,建议一次只启用一个高级项,例如先启用 nameserver-policy,再测试 respect-rules,最后处理 TUN 劫持。这样可以把故障范围限制在一个变量内。
按场景选择的配置思路
| 场景 | 建议起点 | 暂时不要做 | 成功判据 |
|---|---|---|---|
| 普通桌面代理 | enable: true、回环监听、redir-host、单一 nameserver | 一开始同时启用 TUN、fallback 和 respect-rules | 本地 DNS 查询成功,网页和节点访问均正常 |
| TUN 全局接管 | 先验证 DNS 监听,再配置 dns-mode 和 dns-hijack | 未准备回滚就修改系统路由 | 目标应用的 DNS 和连接均经过预期链路 |
| 局域网设备 | 保留 *.lan、*.local 等已确认域名的真实解析 | 把所有局域网域名交给公网 DoH | 路由器、NAS 或内网服务可按原域名访问 |
| 节点域名失败 | 单独补充 proxy-server-nameserver | 反复更换协议或节点而不测 DNS | 节点域名能解析,随后再判断代理连接 |
如果你使用的是 OpenWrt 或其他透明代理环境,还要额外检查路由器 DNS 监听、端口转发、DNS 劫持规则和 LAN 防火墙。不要直接把桌面端的回环监听地址复制到局域网设备上;监听范围不同,所需的网络权限和风险也不同。
常见问题
Mihomo DNS 配置应该写在哪个文件?
应写入 Mihomo 当前实际加载的配置或其明确的覆写层。订阅客户端可能通过 Profile、Merge、Script 或生成器覆盖手工修改,因此不能只看本地文件;重载后应通过运行配置、日志或客户端状态确认最终结果。
Mihomo 的 Fake-IP 和 redir-host 怎么选?
需要 TUN 接管和按域名分流时可测试 Fake-IP;更重视普通桌面、局域网和应用兼容性时可先用 redir-host。切换后应清理 DNS 与 Fake-IP 缓存,并用同一组域名重复测试。
为什么 nameserver 能用,但代理节点仍然连不上?
普通域名解析和代理节点域名解析可能走不同路径。检查节点域名是否能解析,并按需配置 proxy-server-nameserver;如果节点域名已解析成功,再继续排查端口、协议、路由和节点本身。
respect-rules 要不要打开?
它会让 DNS 连接遵守路由规则,但官方文档要求同时配置 proxy-server-nameserver,并不建议与 prefer-h3 一起使用。除非你明确需要 DNS 按路由规则出站,否则先保持关闭更容易定位问题。
Mihomo DNS 配置改了却不生效怎么办?
先确认修改的是运行配置,而不是订阅源文件;再检查 YAML 缩进、重复 dns 区块、客户端覆写和重载日志。最后用本地监听端口测试,而不是只看客户端是否显示已连接。