Mihomo 连接失败怎么办?完整排查步骤
简答:Mihomo 连接失败,建议按“看日志→确认节点→检查端口→排查 DNS→检查 TUN 与防火墙→逐项恢复配置”的顺序处理。先关闭 TUN 和复杂 DNS,只保留一个可用节点与基础代理端口,确认能连接后再逐项开启功能。
定义:Mihomo 连接失败,是指内核无法启动、节点无法建立连接、域名无法解析,或系统流量没有正确进入 Mihomo 代理入口。
先判断是哪一类连接失败
“连接失败”不一定都是节点问题。Mihomo 可能已经启动,但客户端没有接入正确的代理端口;也可能是配置文件解析失败、节点域名无法解析、DNS 配置异常,或者 TUN 虚拟网卡没有创建成功。排查前先记录三个现象:内核是否能保持运行、日志中是否出现明确错误、浏览器或应用是否完全没有网络。
如果内核一启动就退出,优先检查配置语法、字段名称和端口占用;如果内核正常运行但所有节点都失败,优先检查节点信息、节点域名解析和系统时间;如果只有开启 TUN 后失败,则重点检查 TUN 权限、系统防火墙、DNS 劫持和自动路由。
Mihomo 的流量入口包括普通代理端口、TUN 和其他监听器,官方文档也说明不同入口是否可访问还取决于监听地址、系统路由和防火墙配置。可先查看 Mihomo 入站配置说明。
第一步:查看日志并确认内核是否启动
- 先完全退出客户端,避免旧进程继续占用端口。
- 重新启动 Mihomo,观察日志中是否出现配置解析失败、端口监听失败、DNS 解析失败或 TUN 创建失败等信息。
- 暂时把日志级别调高。官方配置示例支持
silent、error、warning、info和debug等日志等级;排查时可临时使用info或debug,问题解决后再调回较低级别。相关字段可参考 Mihomo 官方配置示例。 - 确认配置加载的是当前文件。很多“改了配置却没有变化”的情况,是客户端仍在使用旧配置、旧订阅或另一个配置文件。
不要只看客户端界面上的“已启动”状态。真正有用的是日志里是否完成配置加载、代理端口是否开始监听,以及测试请求是否出现代理决策。
第二步:只保留一个节点和最简单的代理入口测试
为了排除规则组、TUN 和 DNS 的干扰,可以先进行最小化测试:
- 在客户端中选择一个确定存在的节点,不要先使用自动选择、负载均衡或复杂策略组。
- 暂时关闭 TUN,改用普通代理模式。
- 确认客户端使用的代理类型与端口一致,例如 HTTP、SOCKS5 或
mixed-port,不要把控制器端口误填成代理端口。 - 用浏览器或系统代理设置指向当前 Mihomo 的代理端口,再访问一个普通网页测试。
- 如果普通代理可以工作,再重新开启规则模式、TUN 和 DNS 功能。
官方配置说明中,port、socks-port、mixed-port、redir-port 和 tproxy-port 分别对应不同类型的流量入口;因此,客户端的代理类型和端口必须与配置中的入口匹配。可参考 官方入站配置文档。
第三步:排查端口被占用或监听地址不正确
如果日志提示端口无法绑定,或者客户端显示启动但浏览器连接不上,先检查端口是否被其他程序占用。可以关闭其他代理软件、旧的 Mihomo 进程和重复启动的客户端,然后重新启动。
还要检查配置中的监听地址。仅在本机使用时,优先使用本机回环地址;如果需要让局域网其他设备连接,才考虑使用允许局域网访问的设置,并同步检查系统防火墙。不要为了排查方便长期把控制器暴露到所有网卡,也不要使用没有访问控制的外部控制器。
官方文档将 external-controller 定义为 REST API 监听地址,并提醒对外监听时应配合访问控制;它是控制接口,不是普通网页代理端口。配置时应把控制器端口和代理入口分开。相关字段见 Mihomo 通用配置说明。
第四步:DNS 解析失败时怎么处理
如果日志中出现域名无法解析、节点域名找不到,或者只有域名节点连接失败而 IP 节点可以连接,重点检查 DNS。Mihomo 的 DNS 配置包含 enable、listen、nameserver、fallback、proxy-server-nameserver 和 enhanced-mode 等字段。
- 先确认
dns.enable是否符合当前需求。关闭时,Mihomo 会使用系统 DNS。 - 确认
nameserver中填写的地址格式正确,DoH、DoT、UDP 等写法不要混用错误。 - 如果节点本身使用域名,检查是否配置了用于解析节点域名的
proxy-server-nameserver,避免出现“解析节点需要代理、建立代理又需要先解析节点”的循环。 - 如果使用
fake-ip后部分局域网设备或本地服务无法访问,检查fake-ip-filter,不要盲目扩大或清空过滤规则。 - 排查期间可以先使用更简单的 DNS 配置,并暂时关闭复杂的分流策略;确认连接恢复后再逐项加回。
这些字段及其作用以 Mihomo 官方 DNS 文档为准。不要直接复制来源不明的整段配置,因为不同版本、客户端封装方式和系统环境可能存在差异。
第五步:开启 TUN 后无法连接怎么办
如果关闭 TUN 时可以连接,开启 TUN 后所有应用都无法联网,通常应从虚拟网卡、自动路由、DNS 劫持、系统权限和防火墙几个方面检查。
- 确认客户端有权限创建 TUN。Windows、macOS 和 Linux 的权限方式不同,必要时用系统管理员权限启动客户端,但不要长期授予不必要的权限。
- 检查
tun.enable是否为true,并确认客户端实际加载了包含 TUN 配置的配置文件。 - 检查
auto-route与auto-detect-interface。多网卡、虚拟机、容器或同时连接有线和无线网络时,自动识别可能选错出口网卡,可根据官方字段说明检查当前出口。 - 检查
dns-hijack。DNS 劫持配置不匹配时,可能出现网页打不开、域名解析异常或只有部分应用失败。 - 检查防火墙放行情况。官方 TUN 文档指出,防火墙可能影响
system和mixed协议栈;Windows 需要检查应用是否被防火墙允许,macOS 可检查防火墙选项中的应用放行,Linux 则要确认 TUN 网卡流量没有被防火墙拦截。详情参考 Mihomo 官方 TUN 文档。
如果无法判断是 TUN 还是 DNS 引发的问题,先关闭 TUN,仅使用普通代理端口确认节点可用,再一次只开启一个功能。这样比一次修改多个字段更容易定位原因。
第六步:按症状快速对照处理
| 现象 | 优先检查 | 处理方向 |
|---|---|---|
| 内核启动后立即退出 | 配置字段、缩进、端口占用 | 查看启动日志,恢复到最小配置后逐项添加 |
| 节点全部超时 | 节点信息、节点域名解析、系统时间 | 更换一个已知可用节点测试,检查 DNS 和系统网络 |
| 普通代理可用,TUN 不可用 | TUN 权限、自动路由、防火墙 | 关闭 TUN 后确认节点,再检查 tun 字段 |
| 只有部分网站打不开 | DNS、规则组、IPv6、fake-ip 过滤 | 查看日志中的规则匹配和解析结果,逐项简化配置 |
| 客户端显示已连接但应用无网络 | 系统代理类型和端口 | 确认应用使用的是代理入口,不是控制器端口 |
| 局域网设备无法访问 | strict-route、防火墙、局域网路由 | 检查严格路由和局域网网段是否被排除 |
推荐的最短排查顺序
- 退出其他代理软件和旧的 Mihomo 进程。
- 查看日志,确认配置是否加载完成。
- 只选择一个节点,关闭 TUN 和复杂 DNS。
- 确认代理类型与
port、socks-port或mixed-port对应。 - 普通代理可用后,再开启 DNS 分流。
- 最后开启 TUN,并检查权限、自动路由和防火墙。
- 每次只改一个配置项,并保留修改前的备份。
如果仍然失败,整理以下信息再寻求帮助:操作系统、Mihomo 版本、使用的客户端、完整错误日志、是否开启 TUN、是否所有节点都失败,以及关闭 TUN 后是否恢复。不要公开订阅链接、访问密钥或控制器密码。
参考资料
本文步骤依据 Mihomo 项目的公开配置与官方文档整理:入站配置、TUN 配置、DNS 配置和通用配置。不同客户端的按钮名称可能不同,具体操作以客户端界面和官方说明为准。
常见问题
为什么 Mihomo 显示已启动,但浏览器仍然无法联网?
常见原因是浏览器没有使用 Mihomo 的代理入口,或者把控制器端口误当成代理端口。请确认系统代理类型和端口与配置中的 port、socks-port 或 mixed-port 一致;如果使用 TUN,再检查 TUN 是否真正创建成功。
Mihomo 只有节点域名无法连接,IP 节点可以连接,怎么办?
这通常需要优先排查 DNS。确认 nameserver 是否可用,并检查节点域名解析所需的 proxy-server-nameserver。不要先修改大量规则,建议先用最简单的 DNS 配置验证解析是否恢复。
为什么关闭 TUN 后可以连接,开启 TUN 后就断网?
优先检查 TUN 权限、auto-route、auto-detect-interface、dns-hijack 和系统防火墙。多网卡、虚拟机或容器环境可能导致自动识别出口网卡不符合预期,可以先恢复普通代理,再逐项开启 TUN 功能。
Mihomo 连接失败是否一定是节点失效?
不一定。配置加载失败、端口占用、DNS 解析失败、代理类型设置错误、TUN 权限不足和防火墙拦截都可能造成连接失败。应先根据日志判断失败发生在启动、解析、建立连接还是系统接管流量阶段。