代理显示已连接却打不开网页:系统代理、DNS 与规则逐项排查清单
从系统代理是否生效、端口冲突、DNS 解析、规则命中到节点可用性,按顺序逐项检查,帮助定位已连接却无法上网的具体原因。
1. 先区分客户端状态与真实请求
Clash 类客户端显示“已连接”,可能只表示 Mihomo 内核正在运行、系统代理开关已打开,或 Android 的 VPN 接口已经建立。这个状态不能证明浏览器请求进入了内核,也不能证明当前节点能连接目标网站。排查时需要沿着“应用 → 本地入口 → 规则与策略组 → 出站节点 → 目标服务”逐段确认。
先记录三个现象:所有网站都打不开,还是只有部分网站失败;只有浏览器失败,还是其他应用也失败;停用代理后,原本可以直连的网站是否恢复。使用同一个完整 URL 重复测试,避免把不同网站的访问条件混在一起。
| 观察到的现象 | 优先检查 | 下一步证据 |
|---|---|---|
| 访问网页时没有新连接记录 | 系统代理、应用独立代理、TUN 接管 | 显式指定本地代理测试 |
| 连接本地端口立即被拒绝 | 内核启动状态、监听端口、端口占用 | 端口监听进程 |
| 日志出现域名解析超时 | DNS 上游、节点域名解析、DNS 路由 | 具体失败域名与解析器 |
| 请求命中了 DIRECT 或 REJECT | 规则顺序、规则集、策略组 | 实际匹配规则 |
| 已选中代理节点但出站超时 | 节点地址、认证、传输配置、网络限制 | 换节点与换网络的对照结果 |
2. 系统代理是否真的指向 Mihomo
系统代理只是告诉遵循系统设置的应用使用哪个代理入口,不会自动接管所有程序。部分浏览器扩展、终端工具、游戏和其他 VPN 软件可能使用自己的网络设置。先暂时关闭浏览器代理扩展及其他代理客户端,只保留一个入口。
检查系统菜单与本地地址
- Windows 11:打开「设置」→「网络和 Internet」→「代理」,检查“手动设置代理”中的地址与端口。若使用配置脚本,也要确认脚本是否仍然控制浏览器流量。
- macOS:打开「系统设置」→「网络」→ 当前网络服务 →「详细信息」→「代理」,核对网页代理、安全网页代理或 SOCKS 代理。不同系统版本的菜单名称可能略有变化。
- Android:系统 VPN 标志表示 VpnService 接口存在,还要检查客户端是否把浏览器排除在分应用代理之外。
下文以 127.0.0.1:7890 为本机混合代理入口。7890 只是示例,不是所有客户端的固定值。请从当前生效配置或客户端端口设置中读取实际数值;external-controller 是控制接口,不能当作网页代理端口使用。
用显式代理绕开系统设置
Windows 在 PowerShell 中使用 curl.exe,避免旧环境中同名命令别名带来的差异。macOS 与 Linux 可将下面的 curl.exe 改为 curl。示例目标是 https://example.com/;若它在当前网络不可用,换成自己已知可访问的 HTTPS 地址。
curl.exe -v --connect-timeout 10 --max-time 20 --noproxy "" -x http://127.0.0.1:7890 https://example.com/ -o NUL
macOS 与 Linux 将输出目标 NUL 换成 /dev/null。--noproxy "" 用于避免环境中的绕过列表影响这次显式代理测试。超时上限分别设为 10 秒和 20 秒,是排查参数,不是节点速度的实测结果。
- 若命令成功、浏览器失败,优先检查系统代理、浏览器扩展、独立代理与缓存连接。
- 若提示无法连接
127.0.0.1,先排查本地端口,不要立即更换 DNS。 - 若显示 CONNECT 成功,随后出现 TLS 或远端连接错误,说明至少已经接触到代理入口,仍需继续检查出站链路。
3. 端口冲突与内核启动失败
客户端窗口能够打开,不代表内核加载配置成功。查看内核日志中是否出现 address already in use、配置解析失败、规则集加载错误或权限错误。若本地端口被旧进程占用,浏览器甚至可能连接到了另一套代理程序。
确认监听进程
Windows PowerShell 可以查询 TCP 监听端口,再用返回的进程编号核对程序。以下命令只查询,不会结束进程。
Get-NetTCPConnection -LocalPort 7890 -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess
Get-Process -Id 1234
1234 是演示用进程编号,第二条命令执行前应改成第一条实际返回的 OwningProcess。macOS 可执行 lsof -nP -iTCP:7890 -sTCP:LISTEN;Linux 可执行 ss -lntp 'sport = :7890'。查看其他用户进程详情时可能需要相应权限。
让系统代理与有效配置保持一致
# 本地混合入口示例,仅用于说明相关字段
mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
这段不是完整订阅配置,不要用它覆盖节点与规则。若把端口改为 7891,系统代理和测试命令也要同步修改。某些客户端会通过覆写或合并配置生成最终文件,因此应核对“实际生效配置”,不能只看订阅原文。保留回环地址便于限制本机入口,也不需要为了修复本机上网问题开启局域网访问。
4. DNS 排查:区分目标域名与节点域名
“DNS 出错”至少有两个方向:目标网站域名解析失败,或者代理服务器本身的域名无法解析。后者会让多个网站同时超时,即使这些网站的 DNS 回答完全正常。查看日志时要记录发生错误的具体域名,而不是只看见 timeout 就判断节点失效。
先看系统解析,再看内核日志
nslookup example.com
nslookup 通常查询系统选定的 DNS 服务器;在 TUN 劫持或网络重定向存在时,请求也可能被接管。它的结果不能直接代表 Mihomo 的所有 DNS 查询路径。浏览器安全 DNS、系统加密 DNS和内核内置 DNS,也可能各走不同路径。
- 检查 DNS 是否启用:确认有效配置中
dns.enable的状态,以及使用的nameserver是否能够从当前网络到达。 - 检查加密 DNS 的依赖:DoH 或 DoT 上游使用域名时,需要可用的引导解析路径。
default-nameserver可用于解析 DNS 服务器域名,不能忽略它与上游地址的关系。 - 检查代理节点的解析:
proxy-server-nameserver用于代理节点域名解析。若配置了它,应确认这些解析器可用,避免节点还没建立连接就依赖同一个节点完成解析。 - 检查规则依赖:使用
respect-rules等让 DNS 连接遵循路由规则的设置时,需要一起审查相关代理与直连解析器,避免形成解析与代理的循环依赖。
从 Fake-IP 切换到其他解析模式后,应用可能仍持有旧地址。Windows 可执行 ipconfig /flushdns 清理系统缓存,再完全退出并重新打开浏览器。清理系统缓存不会保证浏览器自己的缓存、DoH 缓存或已建立的连接同时消失,因此应重新发起请求并对照日志。
不要同时把 DNS 模式、全部上游和 TUN 开关一起改掉。先确认一个已知可用的解析路径,再逐项恢复原设置。关于字段含义,可结合DNS 配置说明核对。
5. 规则命中与策略组:看实际出口,不只看模式
Mihomo 的规则模式按顺序匹配规则。通常先匹配到的规则决定请求去向,末尾的 MATCH 用来接住未被前面规则处理的请求。如果目标域名被较靠前的规则送往 DIRECT,后面的代理规则不会再替它改道。
在连接详情里核对四项
- 目标域名和端口是否就是刚刚测试的网站,HTTPS 通常使用 TCP
443。 - 匹配的规则类型与规则内容,尤其是域名规则、规则集和兜底规则。
- 命中的策略组,以及该组最终选中的节点或
DIRECT。 - 失败发生在解析、拨号、代理握手还是 TLS 阶段。
先在客户端清空连接列表或记下测试时间,再打开一次目标网页。若旧连接复用导致结果难以判断,可关闭对应连接后重试。策略组名称只是一层选择入口,组内还可能嵌套其他组,因此需要追踪到最终出口。
全局模式只用于短时对照
临时切换全局模式,并明确选择一个节点。如果同一目标在全局模式可以打开、规则模式失败,重点回到规则顺序和策略组选择;如果两种模式都失败,继续检查节点和网络。全局模式不会修复失效节点,也不会自动接管没有进入内核的应用流量。
规则集下载失败也可能影响配置加载或分流结果,应查看 rule-providers 的更新日志与本地缓存状态。不要只为了让网页暂时打开就删除整套规则;先定位具体命中项,再调整必要的顺序或策略。排查结束后恢复原本的规则模式。
6. 节点可用性:延迟数字不等于网页可访问
延迟测试反映的是指定测试 URL、指定时间和当前网络下的一次探测。显示延迟数值,不代表其他域名、视频服务或 UDP 流量都能通过。节点列表有记录,也不代表订阅中的地址、端口和凭据仍然有效。
- 同网络换节点:保持浏览器、目标 URL 和代理模式不变,只替换节点。若另一个节点立即恢复,优先检查原节点或其服务端状态。
- 同节点换网络:从 Wi-Fi 切到手机热点,重复访问相同目标。结果不同,说明接入网络的 DNS、防火墙或路由条件值得进一步检查。
- 核对订阅更新时间:确认更新确实成功,而不是仍在使用旧缓存。更新后也要检查客户端覆写是否覆盖了节点相关设置。
- 核对协议参数:手动配置应检查服务器地址、端口、认证信息、TLS 的服务器名称与传输参数。字段是否需要取决于具体协议,不能把其他协议的配置直接拼接过来。
connection refused 常见于目标端口未监听或被主动拒绝;i/o timeout 表示等待超时,不能单凭这一行判断是服务端故障还是中间网络丢包。证书错误则要检查系统时间、目标域名与 TLS 配置。不要通过长期跳过证书验证来掩盖握手错误。
若只有登录页或某个网站失败,还应检查网站返回的 HTTP 状态码。403、429 或账户限制与“本地代理端口没启动”不是同一类问题。此时先确认响应确实来自目标服务,再考虑出口地址策略或网站自身限制。
7. TUN、分应用代理与浏览器协议的补充检查
显式 HTTP 代理测试正常,而启用 TUN 后无法访问,是一条很有价值的分界线。TUN 依赖虚拟网卡、路由与权限;启用 tun.auto-route、接口检测或 DNS 劫持后,还要检查它们与其他 VPN、虚拟机网络及安全软件是否冲突。
桌面端先隔离 TUN 路径
- 记录当前 TUN 和系统代理状态,临时关闭 TUN。
- 只用前面的显式代理命令测试相同 URL,确认本地入口与节点链路。
- 若显式代理正常,再开启 TUN,检查启动日志中的权限、网卡创建及路由写入结果。
- 若关闭客户端后仍不能直连,检查遗留的系统代理、其他 VPN 和路由,不要盲目删除系统路由表。
Android 检查应用是否被接管
Android 通常只能有一个普通应用 VPN 服务处于活动状态。切换其他 VPN、广告过滤类 VPN 或工作配置中的网络工具时,原客户端可能被替换。分应用设置中,“仅代理所选应用”与“绕过所选应用”的语义相反,要确认浏览器处于预期列表。若锁屏后才失败,再检查后台限制与电池优化,而不是先重写规则。
只有浏览器失败时检查 HTTP/3
HTTP/3 使用 QUIC,通常涉及 UDP 443。显式 HTTP 代理命令成功,不能证明浏览器的 QUIC 路径也正常。若现象明确集中在浏览器,可临时禁用 HTTP/3 做对照;只有结果随之改变,才继续检查 UDP 出站、节点支持与 TUN 接管。不要把禁用协议当成所有网页故障的固定修复步骤。
8. 恢复配置与提交问题的最小清单
找到故障层后,把为测试临时改动的全局模式、DNS 上游、浏览器协议开关逐项恢复,只保留确实解决问题的修改。再次测试一个可直连网站、一个需要代理的网站,以及原本失败的目标。最后确认关闭客户端后,系统仍能按预期联网。
若仍需提交问题,提供下面的信息比只发一张“已连接”的截图更容易定位。日志只截取复现前后必要片段,避免公开订阅凭据、节点密码和控制接口令牌。
- 操作系统版本、客户端版本、实际 Mihomo 内核版本,以及是否使用客户端覆写。
- 系统代理或 TUN 的启用状态、本地监听地址与端口、分应用代理设置。
- 发生问题的时间、目标域名、所用网络,以及是否所有目标都失败。
- 显式代理命令的结果、实际匹配规则、最终策略组与节点。
- 换节点、换网络、关闭 TUN 三项对照中,哪些步骤改变了结果。