502云最新网址

Mihomo 连接失败:从日志、DNS 到 TUN 的排查步骤

更新于 2026-10-26 · 502jsq.online

简答:Mihomo 连接失败,先关闭 TUN 和自定义 DNS,用普通代理端口测试;再根据日志区分配置、端口、节点或解析问题,最后逐项恢复设置。

定义:Mihomo 连接失败,是指客户端已启动但无法加载配置、连接节点、解析域名,或流量没有被正确转发到代理端口。

先按现象分流:不要一开始就换节点

本文是第三方使用指南,不代表任何 Mihomo 客户端、订阅服务或节点服务的官方立场。先打开 Mihomo 客户端的日志面板,保持页面可见,然后访问一个普通网页或执行一次连接测试。官方文档说明,log-level 控制内核日志输出,debug 会输出尽可能多的运行信息;排查完成后可改回 info。参见Mihomo 全局配置中的日志级别说明。 github.com

现象或日志优先怀疑先做什么
客户端没有新日志系统代理未生效、应用没有走 Mihomo、内核未启动确认当前模式和系统代理,先关闭 TUN,再用浏览器手动设置代理端口
所有节点都 timeout订阅失效、节点域名解析失败、本地网络或协议参数问题先确认订阅能否更新,再测试节点域名解析和单个节点
只有一个节点失败该节点地址、端口、证书或服务端状态换同一订阅中的另一个节点,其他设置不要同时改
dns resolve failed 或 no such hostDNS 上游、节点域名或目标域名解析失败暂时恢复简单 DNS 配置,区分是节点域名还是目标网站域名
开启 TUN 后断网权限、路由接管、DNS 劫持、防火墙或其他 VPN 冲突关闭 TUN 做对照测试,再逐项恢复 TUN 选项
配置加载失败或 YAML 报错缩进、字段拼写、客户端内核版本不支持备份配置,恢复最近一次能启动的配置,再一次只改一个字段

最快判断标准:关闭 TUN 后普通代理端口能用,问题通常在 TUN、路由或 DNS 接管;关闭 TUN 后仍然所有节点超时,优先查订阅、节点解析、本地网络和协议配置。

第一步:确认客户端、内核、配置和运行模式

  1. 确认你使用的到底是哪个客户端。“Mihomo”是内核名称,Mihomo Party、桌面客户端或移动端应用的菜单和日志位置可能不同。先在客户端的关于、内核或版本页面记录客户端版本、Mihomo 内核版本、操作系统和当前模式。
  2. 确认配置已成功加载。如果客户端启动后马上提示 YAML 解析错误、字段不存在或配置无效,不要继续测试节点。先复制配置文件作为备份,再检查缩进、冒号、列表层级和字段名称。尤其不要把其他内核的字段直接复制到 Mihomo 配置中。
  3. 确认模式和代理组。官方文档列出的运行模式包括 rule、global 和 direct;其中 global 仍需要在全局策略组中选择代理,direct 会绕过代理。排查时可先用全局模式选择一个明确节点,测试成功后再恢复规则模式。参见Mihomo 全局配置文档。 github.com
  4. 确认内核是否真的在运行。如果客户端有控制页面,检查运行状态、当前配置和日志是否随访问请求增加。官方 API 文档提供了 /version 和 /configs 的 GET 接口,可用于确认内核版本和当前运行配置。不要把带有订阅地址、令牌或认证信息的配置内容公开。参见Mihomo API 文档。 github.com

在本机控制端口仍为 9090 时,可在终端中执行以下 GET 请求;命令中的 User-Agent 只是为了让请求行为更接近普通客户端,不会替代认证:

curl -A "mihomo-diagnostic" "http://127.0.0.1:9090/version"

curl -A "mihomo-diagnostic" "http://127.0.0.1:9090/configs"

如果使用 PowerShell,请在 PowerShell 中执行:Invoke-WebRequest -Method GET -Headers @{"User-Agent"="mihomo-diagnostic"} -Uri "http://127.0.0.1:9090/version"。若控制端口不是 9090,替换为客户端显示的控制端口。不要在命令、截图或文章中打印 Cookie、token 或 secret。

第二步:检查 mixed-port、控制端口和系统代理

代理端口和控制端口不是一回事。官方示例使用 mixed-port: 7890 接收代理流量,使用 external-controller: 127.0.0.1:9090 提供控制 API;你的客户端可能使用其他端口,应以当前运行配置为准。参见官方最小运行配置示例和Mihomo 全局配置文档。 github.com

  1. 在客户端设置中找到代理端口,记录 mixed-port、HTTP 或 SOCKS 端口;不要把 9090 误填给浏览器作为代理端口。
  2. Windows 在 PowerShell 中执行 Get-NetTCPConnection -LocalPort 7890 -State Listen;如果使用其他端口,把 7890 换成实际端口号。
  3. macOS 或 Linux 在终端执行 lsof -nP -iTCP:7890 -sTCP:LISTEN,检查是否有进程监听该端口。
  4. 如果端口被其他程序占用,关闭冲突程序或在 Mihomo 中改用未占用的端口,然后同步更新系统代理设置。
  5. 先让浏览器使用 HTTP 或 mixed 代理端口进行测试。若浏览器能访问、终端或某个应用不能访问,说明应用可能没有遵循系统代理,需要在应用自身设置代理,或改用 TUN 做对照测试。

如果控制页面打不开,但内核日志正常,优先检查控制端口和监听地址;如果浏览器打不开而控制页面能打开,优先检查代理端口、代理组和系统代理,而不是继续修改控制 API。

第三步:区分订阅失败、节点失败和本地网络失败

  1. 订阅更新失败:检查客户端显示的 HTTP 状态、响应时间和响应内容。若返回的是登录页、错误页或普通 HTML,而不是客户端能识别的订阅内容,订阅地址、权限、服务状态或转换方式可能有问题;本文无法替你核实具体服务是否有效,应以服务提供方的公开说明为准。
  2. 只有一个节点失败:保留当前配置,只切换到同一订阅中的另一个节点。如果另一个节点可以连接,不要立刻修改 DNS、TUN 和规则,先把问题限定为单节点或单协议参数。
  3. 所有节点失败:先确认节点域名能解析、系统时间正确、网络没有被其他 VPN 或安全软件拦截,再检查订阅是否能正常更新。若换到另一条网络后所有节点仍失败,才继续查配置和内核版本。
  4. 日志出现 TLS 或握手失败:检查系统日期和时间、节点地址、端口、传输层参数及证书校验相关配置。不要为了“先连上”长期关闭证书校验;若必须做对照,只应短时间、在可信测试环境中进行。

升级或更换内核前先备份当前配置。Mihomo 官方发布页会列出版本、变更记录和不同系统架构的文件;下载时应根据系统和 CPU 架构选择,并核对发布页提供的 SHA-256,而不是使用来源不明的安装包。参见Mihomo 官方 Releases。 github.com

第四步:DNS 报错怎么查,什么时候暂时关闭 fake-ip

Mihomo 官方 DNS 文档将 default-nameserver、nameserver、fallback、proxy-server-nameserver 和 direct-nameserver 区分为不同用途。其中,proxy-server-nameserver 专门用于解析代理节点域名;没有单独配置时,节点域名会遵循其他 DNS 配置。参见Mihomo DNS 配置文档。 github.com

  1. 先看错误中的域名:是订阅域名、节点域名、目标网站,还是 DNS 上游域名。不同对象失败,排查位置不同。
  2. 备份配置后,暂时减少自定义 DNS 规则,只保留一个可用的 nameserver 和必要的 default-nameserver,一次只改一个变量。
  3. 如果节点域名无法解析,优先检查 proxy-server-nameserver;如果只有目标网站无法解析,再检查 nameserver-policy、规则和目标域名。
  4. 若启用了 fake-ip 后只有局域网设备、企业域名或特定应用异常,可暂时切换到另一种增强模式进行对照。确认根因前不要同时修改 fake-ip、规则和 TUN。
  5. 恢复连接后,逐项恢复 DNS 策略,并每次访问同一网址验证,避免无法判断是哪一项修改产生了效果。

如果客户端提供 DNS 缓存清理功能,可在控制页面执行清理;官方 API 文档列出 DNS 缓存清理接口为 POST,排查版本和配置时则使用 GET 的 /version、/configs。不要把 POST 清理接口误当成状态检查接口。 github.com

第五步:开启 TUN 后断网的排查顺序

TUN 会接管系统流量,问题范围比普通代理端口更大。官方 TUN 文档说明,auto-route 用于自动设置路由,auto-detect-interface 用于自动识别出站网卡;DNS 模式还涉及系统 DNS 设置和 DNS 劫持,不同系统的默认行为并不完全相同。参见Mihomo TUN 官方文档。 github.com

  1. 关闭 TUN,保留普通代理端口,确认节点和 DNS 是否能工作。若普通代理正常,说明问题集中在 TUN 接管链路。
  2. 重新开启 TUN 时确认系统授权:Windows 可能需要管理员权限,macOS 可能需要允许网络扩展或防火墙放行,Linux 可能需要相应权限,Android 需要允许应用创建 VPN。具体提示以当前客户端界面为准。
  3. 多网卡设备不要盲目依赖自动识别。Wi-Fi、网线、虚拟网卡和其他 VPN 同时存在时,检查 auto-detect-interface 是否选到了正确出口。
  4. 如果使用 DNS 劫持或类似接管选项,先确认 DNS 配置存在且能独立解析;Windows 端按官方说明,相关 DNS 劫持模式可能依赖严格路由设置,Linux 端的对应行为可能依赖自动重定向设置。
  5. 暂时退出其他 VPN、虚拟网卡工具、防火墙增强模块和网络过滤软件,再测试一次。恢复时一次只启用一个组件。
  6. 如果 TUN 后只有某个应用异常,检查该应用是否使用自带 DNS、独立代理或自己的网络栈;这类应用不一定遵循系统代理。

Windows、macOS、Linux 和 Android 的 TUN 菜单名称可能由客户端界面决定,但排查顺序可以固定为:权限 → 出口网卡 → 路由 → DNS 接管 → 防火墙 → 其他 VPN。不要在 TUN 尚未稳定前继续叠加复杂规则。

恢复连接后的复测清单

  • 先用一个固定节点和一个固定网址测试,记录日志中是否出现请求。
  • 再从全局模式恢复到规则模式,确认代理组仍选择了可用节点。
  • 再恢复自定义 DNS,分别测试普通域名、节点域名和局域网域名。
  • 最后恢复 TUN,并检查浏览器、终端、办公软件等不同应用是否都能连接。
  • 如果需要长期使用,保留一份“最小可用配置”和一份完整配置;再次失败时先回到最小配置,而不是同时重装客户端、换节点和改 DNS。

若仍然无法定位,可收集脱敏后的错误文本、操作系统、客户端和内核版本、当前模式、是否启用 TUN、失败域名类型以及单节点或全节点现象。隐藏订阅地址、用户名、密码、令牌、控制 API secret 和节点密码。

常见问题

Mihomo 连接失败,应该先换节点吗?

不建议先换节点。先看日志并关闭 TUN,用普通代理端口测试;如果只有一个节点失败,再换同一订阅中的另一个节点。如果所有节点都失败,应先查订阅、节点域名解析、本地网络和配置。

Mihomo 显示 dns resolve failed 怎么办?

先看失败的是订阅域名、节点域名还是目标网站域名。节点域名优先检查 proxy-server-nameserver,目标网站再检查 nameserver、nameserver-policy 和 fake-ip。备份配置后一次只改一个 DNS 变量。

Mihomo 开启 TUN 后断网,关闭 TUN 就正常,说明什么?

这通常说明节点本身可能可用,故障集中在 TUN 的权限、路由、出口网卡、DNS 接管、防火墙或其他 VPN 冲突。先确认普通代理端口正常,再逐项恢复 TUN 设置。

mixed-port 和 external-controller 有什么区别?

mixed-port 是浏览器或应用连接代理的入口,external-controller 是客户端面板和 API 控制内核的入口。两者用途不同,不能把控制端口直接填成浏览器代理端口。

Mihomo 没有日志,是不是节点一定失效?

不一定。没有新日志也可能是应用没有走系统代理、系统代理未启用、TUN 未接管流量或内核没有正常运行。先用固定浏览器访问并观察日志,再检查当前模式和代理端口。

相关阅读

参考资料

  1. Mihomo 全局配置文档
  2. Mihomo DNS 配置文档
  3. Mihomo TUN 官方文档
  4. Mihomo API 文档
  5. Mihomo 官方 Releases
  6. Mihomo 最小运行配置示例
  7. github.com
  8. github.com