Mihomo DNS 设置:先复制最小配置,再排查解析与 TUN 问题
简答:如果 Mihomo 配置能载入但网页打不开、TUN 开启后断网,或节点域名无法解析,先备份配置,只添加一个缩进正确的 dns 配置块。完成“编辑配置—校验 YAML—重新载入—查看日志—验证业务”后,再逐项测试 Fake-IP、分流和 TUN,不要一次修改多个变量。
定义:Mihomo DNS 设置是通过配置文件中的 dns 区块指定 DNS 监听地址、上游解析服务器、Fake-IP 或 redir-host 模式,以及不同域名的解析策略。
先看这里:新手只需完成 3 步
如果你只是想让 Mihomo 先正常解析域名,优先完成以下三步:第一,备份当前 YAML;第二,加入下方最小配置;第三,校验、重新载入并查看日志。Fake-IP 分流、TUN 劫持、DNS 缓存和节点域名解析属于进阶项,建议确认基础配置正常后再调整。
- 在 Mihomo 客户端中找到当前生效的配置文件,菜单名称通常可搜索“配置”“Profiles”“编辑配置”或“Edit”。
- 确认配置中只有一个顶级
dns:,且所有 DNS 子项都比dns:多两个空格缩进。 - 保存后使用客户端的 YAML 校验功能重新载入;如果客户端提供 API,再查看运行配置、日志和缓存状态。
本文是独立使用指南,不代表任何客户端或服务商的官方页面。不同图形客户端可能改变菜单名称,但 Mihomo 配置字段应以官方 DNS 配置文档为准。
最小可用配置:先解决缩进、监听和上游 DNS
必改前提:下面示例中的端口不能被其他程序占用;YAML 子项必须缩进两个空格;DoH、DoT 或 UDP 上游是否可达,需要结合你的当前网络验证。示例使用本机回环地址,适合桌面端先做本机测试,不把 DNS 监听暴露给局域网。
带注释版:
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: redir-host
default-nameserver:
- 223.5.5.5
- 1.1.1.1
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
其中,enable 启用 Mihomo 内置 DNS;listen 指定 DNS 服务监听地址;default-nameserver 用于解析 DNS 服务器地址本身;nameserver 是普通域名解析的默认上游。官方文档说明,enhanced-mode 可选 fake-ip 或 redir-host,默认值为 redir-host;ipv6: false 会让 AAAA 查询返回空结果,因此依赖 IPv6 的网络不要盲目关闭它。参考Mihomo DNS 配置说明。
无注释版:
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: redir-host
default-nameserver:
- 223.5.5.5
- 1.1.1.1
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
这份配置不是所有设备都必须完整照抄。Mihomo 文档提供了默认行为和示例,某些场景可以保留默认值;如果原配置已经包含 dns:,应在原区块内修改,而不是再添加第二个顶级区块。
修改后的固定流程:编辑、校验、载入、日志、业务验证
- 编辑配置:先复制原 YAML 作为备份,确认只保留一个
dns:。 - 保存并校验:优先使用客户端内置配置校验;若提示缩进错误,检查列表项前的空格、冒号后的空格和重复顶级字段。
- 重新载入:客户端通常会提供“重载配置”“Reload”或相近按钮。若使用 API,官方文档列出了
PUT /configs?force=true重新载入运行配置。 - 查看日志:关注 DNS 超时、端口占用、
no such host、节点域名解析失败和连接拒绝,不要只看客户端是否显示“运行中”。 - 验证业务:分别测试一个直连域名、一个代理域名和一个局域网域名;每次只改一个参数。
如客户端启用了外部控制器,可用 GET /configs 查看运行配置,用 POST /cache/dns/flush 清理 DNS 缓存,用 POST /cache/fakeip/flush 清理 Fake-IP 缓存。API 是否可用取决于客户端是否配置了控制器,控制器不要监听到公网。接口方法和返回状态见Mihomo API 文档。
nameserver、default-nameserver、fallback 怎么区分
| 字段 | 主要职责 | 调整建议 |
|---|---|---|
default-nameserver | 解析 DNS 服务器地址本身,官方文档要求其可使用 IP。 | DoH 或 DoT 上游使用域名、启动阶段无法解析时优先检查。 |
nameserver | 普通域名的默认解析服务器。 | 最小配置优先确认它能正常返回结果。 |
fallback | 备用域名解析服务器。 | 不要理解成主 DNS 一失败就必然立即切换;是否采用 fallback 结果还与 fallback-filter 等配置有关。 |
proxy-server-nameserver | 专门解析代理节点域名。 | 节点地址是域名、开启 respect-rules 或日志显示节点域名失败时再配置。 |
direct-nameserver | 为直连出口指定域名解析服务器。 | 只有需要让直连流量使用独立 DNS 时再添加。 |
官方文档说明,fallback 是备用解析服务器;启用后,fallback-filter 会根据地理位置、域名或 IP 结果判断是否采用备用结果。文档还标注旧式 fallback-filter.geosite 用法已不推荐,新的分流场景优先考虑 nameserver-policy。参考Mihomo DNS 字段说明。
Fake-IP 还是 redir-host:按兼容性选择
redir-host 返回真实解析结果,适合先做基础排错,也更容易观察应用实际连接的地址。Fake-IP 会为域名分配虚拟地址,通常适合需要 TUN 接管并希望规则继续按域名处理的场景,但局域网域名、打印机、内网面板和部分应用可能需要过滤。
如果你已确认基础 DNS 正常,再尝试:
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 支持域名通配符,fake-ip-filter-mode 可选 blacklist、whitelist 或 rule。如果启用 Fake-IP 后局域网设备或某个应用异常,先改回 redir-host 做对照;若恢复正常,再只把必要域名加入过滤列表,不要同时修改 IPv6、TUN、MTU 和分流策略。相关字段见Mihomo DNS 文档。
nameserver-policy 分流:先做单条规则验证
nameserver-policy 用于为特定域名、通配域名或 geosite 指定解析服务器,官方文档说明其优先级高于普通 nameserver 和 fallback 查询。分流不应一开始写得很复杂,建议先验证一条明确规则:
dns:
nameserver-policy:
'+.example.com':
- https://doh.pub/dns-query
nameserver:
- https://doh.pub/dns-query
将 example.com 替换为你实际要测试的域名后,重新载入并查看日志是否命中预期上游。若规则没有生效,检查通配符写法、配置缩进和当前客户端使用的内核版本;不要把一条分流规则的结果推广到所有域名。
TUN 开启后断网:先排 DNS 劫持和路由接管
TUN 会改变系统流量的接管方式,DNS 设置和路由设置需要分开验证。官方 TUN 文档列出了 dns-mode、dns-hijack、strict-route、mtu 等字段;因此不能只改 DNS 就断言问题一定来自上游解析。
- 先关闭 TUN,只保留系统代理,测试同一个网页。
- 如果系统代理正常,再开启 TUN,但暂时不要改 Fake-IP、IPv6、MTU 和路由排除项。
- 检查是否启用了
dns-hijack,以及监听端口是否被其他程序占用。 - 观察日志:DNS 请求进入但上游超时,优先查上游;请求根本没有进入 Mihomo,优先查系统代理、TUN 权限或路由。
- 确认后再逐项恢复
respect-rules、proxy-server-nameserver和分流策略。
官方示例展示了 TUN 的 dns-hijack、strict-route 等字段,但具体可用值和行为可能受系统、客户端和内核版本影响,应以当前客户端所使用的 Mihomo 文档为准。参考Mihomo TUN 配置文档。
DNS 泄漏与解析异常:可执行的验证闭环
“网页能打开”不等于 DNS 路径已经符合预期。建议按下面方式做对照检查:
- 在 Mihomo 日志中记录测试域名的解析请求,确认请求是否进入 Mihomo。
- 关闭浏览器的 Secure DNS 或浏览器自定义 DNS,重新测试一次;如果结果改变,说明浏览器可能绕过了系统或 Mihomo 的 DNS 路径。
- 关闭 TUN、保留系统代理,再测试同一域名;之后恢复 TUN,比较日志和业务结果。
- 用一个普通公网域名、一个节点域名和一个局域网域名分别测试。
- 判断通过标准:配置能重新载入,日志没有持续的解析超时;节点域名能解析;局域网域名按预期访问;直连和代理域名的规则命中符合配置。
如果只有浏览器结果异常,先检查 Secure DNS;如果只有节点域名异常,检查 default-nameserver 和 proxy-server-nameserver;如果只有局域网异常,检查 Fake-IP 过滤和 hosts。不要通过单次网页访问结果断言不存在 DNS 泄漏。
Mihomo DNS 设置排错速查表
| 现象 | 先查什么 | 下一步 |
|---|---|---|
| 配置无法载入 | dns: 子项缩进、重复顶级区块、列表格式。 | 恢复备份,只保留最小配置后重新校验。 |
| 所有域名都打不开 | 监听端口、enable、系统代理和 TUN 接管状态。 | 关闭 TUN,使用系统代理做单变量测试。 |
| 只有节点域名失败 | default-nameserver 与 proxy-server-nameserver。 | 为节点域名设置独立解析上游,再看启动日志。 |
| Fake-IP 后局域网打不开 | fake-ip-filter、*.lan、*.local 和 hosts。 | 临时切换 redir-host,恢复后再添加必要过滤项。 |
| TUN 开启后断网 | dns-mode、dns-hijack、权限、路由和端口冲突。 | 先关闭 TUN,再逐项恢复,不要先改 MTU。 |
| 部分域名解析异常 | nameserver-policy、fallback-filter 和 IPv6。 | 暂时移除分流,只保留一个上游进行对照测试。 |
发布前自查清单
- 已备份原始配置,并准备好恢复方法。
- 只有一个顶级
dns:,所有子项统一缩进两个空格。 listen使用的端口没有被占用。default-nameserver能解析 DoH 或 DoT 上游地址。- 没有把
fallback理解为无条件自动切换,必要时同步检查fallback-filter。 - 开启
respect-rules时,已配置并验证proxy-server-nameserver。 - 使用 Fake-IP 时,已测试局域网域名和相关应用。
- DNS 泄漏检查同时考虑系统 DNS、浏览器 Secure DNS、TUN 和 Mihomo 日志。
- 修改后完成“编辑配置—校验—重新载入—看日志—验证业务”闭环。
常见问题
Mihomo DNS 设置在哪里修改?
通常修改当前生效 YAML 配置中的 dns 区块。图形客户端入口可能叫“配置、Profiles、编辑配置或 Edit”。修改前备份,保存后先校验 YAML,再重新载入并查看日志。
Mihomo DNS 最小配置必须写哪些字段?
没有一份配置适合所有场景。排错时通常先确认 dns.enable、listen 和 nameserver;如果上游使用域名,再检查 default-nameserver。其他字段应根据 Fake-IP、TUN、节点域名和分流需求逐项加入。
fallback 是不是 nameserver 失败后一定自动切换?
不是简单的无条件切换。fallback 是备用解析服务器,是否采用其结果还与 fallback-filter 的地理位置、域名或 IP 判断有关。具体行为应以当前 Mihomo 文档和实际日志为准。
Mihomo 应该使用 Fake-IP 还是 redir-host?
需要 TUN 接管和按域名处理规则时可以尝试 Fake-IP;局域网设备或应用兼容性异常时,先切换 redir-host 做对照。没有测试结果时,不应断言某一种模式适合所有设备。
开启 respect-rules 后为什么节点无法连接?
该选项会让 DNS 连接遵守路由规则,并要求配置 proxy-server-nameserver。若节点域名解析依赖自身代理,可能形成解析链路问题;可先关闭 respect-rules 做对照,再按日志补充节点专用解析。
DNS 配置后无法上网怎么办?
先恢复备份或只保留最小配置,关闭 TUN,确认系统代理可以访问;再查看端口占用、DNS 超时、no such host 和节点域名错误。之后一次只恢复一个变量:Fake-IP、fallback、nameserver-policy 或 TUN。
怎么判断浏览器是否绕过了 Mihomo DNS?
先在 Mihomo 日志中记录同一域名请求,再关闭浏览器 Secure DNS 重测;如果浏览器设置改变后结果或日志路径发生变化,就需要继续检查浏览器自定义 DNS、系统 DNS 与 TUN 劫持之间的差异。