先画出你实际控制的网络
应用 → 浏览器代理/系统代理 → 电脑 TUN → 路由器代理 → 互联网
应用解析 → 系统/浏览器 DNS → 本机 DNS → 路由器或上游解析器先记录路由器的网关与 DNS、本机接入地址、客户端模式,以及是否有浏览器代理扩展或其他 VPN。路由器和电脑都开代理,不必然形成两跳,也不必然出错;是否发生二次代理取决于规则是否接管了电脑发出的节点连接。不要仅凭出口 IP 没变化判断没有冲突。
| 症状 | 应核对的关系 |
|---|---|
| 开电脑客户端后更慢或断开 | 节点连接是否又被路由器送进另一条代理 |
| 能按 IP 访问,域名失败 | 解析链路、fake-ip 映射和上游依赖 |
| 路由器一关代理,本机就恢复 | 路由器对本机节点连接或 DNS 的处理 |
| 电脑一关 TUN,局域网恢复 | 本机路由与私有网段排除项 |
| 只有浏览器异常 | 浏览器扩展、安全 DNS、系统代理的叠加 |
第一步:只对测试设备做单层对照
- 先备份两端相关设置,确认有另一条恢复管理连接的方式。若远程管理正依赖这些隧道,不要直接关闭它们,应在本地或有备用连接时操作。
- 在路由器允许的管理界面里,仅让测试设备暂时绕过路由器代理,保留普通联网;再单独使用电脑客户端测试目标。
- 恢复路由器原设置,在电脑上正常关闭自己的系统代理和 TUN,单独测试路由器路径。
- 最后恢复双层状态复测同一目标。每轮记录实际请求和出口,不同时改动 DNS 与节点。
这种对照尽量只影响自己的测试设备。没有设备级绕过能力时,先安排可中断窗口,不要为排查一台电脑突然断开全家网络。关闭界面窗口不等于停止内核,需检查实际运行状态。
第二步:查清 DNS 有没有指回自己
循环不只发生在数据转发中。例如本机 DNS 把请求交给路由器,路由器又把同类请求转回本机;或者解析代理节点域名要经过该节点,但建立节点连接又需要先解析它。表现可能是反复查询、超时或启动后所有节点不可用。节点域名、DNS 上游域名和普通目标域名的解析依赖应分别检查。
# Windows PowerShell
Get-DnsClientServerAddress
# macOS
scutil --dns
# Linux(使用 systemd-resolved 时)
resolvectl status命令输出可能含内部域名或地址,仅在本地查看。对照客户端最终生效配置,确认上游 DNS 实际去向与路由一致。Mihomo 提供节点域名解析和 nameserver-policy 等配置,但具体组合取决于你的规则;不要直接复制一份公共 DNS 列表替换现有内网解析。
fake-ip 要与维护映射的那一层配合
fake-ip 是某个内核维护的域名与合成地址映射。若一层返回的合成地址绕过该层,被另一层当成普通公网 IP 处理,可能无法正确还原目标。排查时查看哪个内核应当接收它、路由有没有把它送错,不把合成地址拿去做真实 IP 归属分析,也不盲目将整个合成网段设成 DIRECT。
第三步:让每一层的职责清晰
可以由路由器负责全家分流,让测试设备无需额外接管;也可以让某台电脑绕过路由器代理,由电脑客户端自己管理。确实需要链式代理时,应明确每一跳与 DNS 的依赖,并按相应软件的链式代理功能配置。两个自动路由同时打开不等于已经设计好可靠的两跳链路。
验收与恢复
- 恢复选定方案,分别测试国内目标、需要代理的目标,以及路由器管理页和 NAS 等局域网服务。
- 重启测试设备上的客户端,检查路由与 DNS 没有重新出现循环;再检查订阅刷新后的最终配置。
- 撤销临时设备绕过和测试规则中不再需要的部分。仍失败时恢复备份,提交脱敏拓扑、时间和两轮单层对照结果,无需重刷固件或清空全部设置。