这篇实践解决的是链式代理的两个单点故障:入口节点不可用时整条链路中断,固定出口不可用时同样无法访问。作者把入口和出口分别抽象为策略组,再利用 Mihomo 的 dialer-proxy 把两层串起来,形成“入口自动择优、出口按顺序故障转移”的结构。它适合需要稳定固定出口、同时不想把入口绑定到单一节点的场景。
目标架构
链路可以理解为:客户端先选择一个入口策略组,再通过该入口连接某个出口代理,最终由出口访问目标服务器。入口组负责从多个订阅节点中选择当前表现较好的节点;出口组保存多个自建或可信的 SOCKS5 出口,当前出口失效时切换到下一可用项。
这里最关键的字段是 dialer-proxy。它不是让业务流量直接选择另一个出口,而是指定“当前代理节点在建立自身连接时,应先经过哪个代理或代理组”。因此,把每个出口节点的 dialer-proxy 指向入口组,就能让出口服务器的连接始终借道当前最佳入口。目标网站最终看到的是出口节点的地址,而不是入口节点。
前置条件
- 使用支持 Mihomo 配置的 Clash Verge 环境。
- 已有一个可用的入口策略组,例如订阅生成的“自动选择”组。
- 至少准备两个可连接的出口代理,并确认地址、端口和认证信息有效。
- 选定一个在当前网络中稳定可达的健康检查 URL。
- 修改前导出或备份现有配置,便于随时回退。
最小配置思路
先为每个出口声明 dialer-proxy,再把这些出口放进 fallback 策略组。下面仅保留结构所需字段,地址和凭据必须替换为自己的值:
proxies:
- name: exit-a
type: socks5
server: 203.0.113.10
port: 1080
username: USER_A
password: PASS_A
dialer-proxy: 入口自动选择
- name: exit-b
type: socks5
server: 203.0.113.20
port: 1080
username: USER_B
password: PASS_B
dialer-proxy: 入口自动选择
proxy-groups:
- name: 出口故障转移
type: fallback
proxies: [exit-a, exit-b]
url: https://www.gstatic.com/generate_204
interval: 300
fallback 会按列表顺序选择首个可用节点,并按 interval 周期检查。原帖配置中还写了 tolerance: 50;Mihomo 官方文档把 tolerance 说明为 url-test 的切换容差,并未把它列为 fallback 的有效参数,因此不要依赖它控制故障转移。
接着把“出口故障转移”加入实际使用的主策略组,或让相关规则直接指向它。这样,业务选择出口组后,Mihomo 先决定可用出口;该出口建立连接时,又会通过 dialer-proxy 调用入口组完成前一跳。
与订阅配置合并
直接编辑订阅生成的配置最简单,但订阅刷新后容易被覆盖。原帖因此使用 Clash Verge 的扩展脚本做深度合并:普通对象递归合并;对象数组用 name、id 或 tag 识别同一成员;不存在的成员追加;指定路径可以强制替换。
工程上不必一开始就搬入完整脚本。先在一份静态副本中验证最小 YAML,确认链路正确后,再把新增的 proxies、proxy-groups 和主组引用移入扩展脚本。脚本合并后应检查最终生成配置,而不是只看脚本运行没有报错。若现有配置包含同名节点或策略组,先改成唯一名称,避免合并到错误对象。
验证方法
- 在 Clash Verge 中重新加载配置,确认两个出口节点和出口策略组均出现。
- 查看入口组的延迟测试,确认至少一个入口可用。
- 选择“出口故障转移”,访问公开 IP 查询页;显示地址应当属于当前出口,而不是入口。
- 临时停止或断开当前出口,再等待一次健康检查;出口组应切换到下一项,访问恢复后公网地址随之变化。
- 查看 Mihomo 日志,确认连接路径没有循环引用、认证失败或 DNS 解析错误。
- 刷新一次订阅并重新加载,确认扩展覆盖仍然存在;如果消失,说明配置写在了会被订阅覆盖的位置。
限制与回退
该方案降低单点故障风险,但不会让出口地址永久不变:发生故障转移时,公网 IP 必然切换。健康检查 URL 若在本地网络被阻断,也可能把正常节点误判为不可用。Mihomo 官方文档还提示,订阅下载、DNS 和其他辅助流量不一定自动经过 dialer-proxy,需要按实际配置单独验证;某些基于 UDP 或特殊 TLS 伪装的协议也可能无法被上游入口正确中继。
回退时先取消主策略组对“出口故障转移”的引用,再移除新增策略组和出口节点,最后恢复备份配置。不要在公开帖子、截图或仓库中留下真实服务器地址、用户名和密码。
可复用经验
这套方法的价值不只在代理配置,而在于把一条固定链路拆成两个可独立健康检查的资源池:入口优化路径质量,出口保证业务身份和故障恢复。实施时应先验证最小闭环,再自动化配置合并,并把“节点可用”“链路可达”“最终出口正确”作为三个独立检查项。
原作者:wilsons
原帖:https://linux.do/t/topic/2771233