1. 概念解耦:物理原子与逻辑控制器的本质区别
很多初学者往往分不清节点与策略组的从属边界:
- **`proxies`(物理代理节点)**:
代表网络空间中真实存在的某一台代理服务器。它只关心连接层细节:IP、端口、协议算法、握手密钥。节点自身没有任何分流决策能力,它仅仅负责忠实地执行数据转发。
- **`proxy-groups`(策略组控制器)**:
是一个纯逻辑概念。策略组本身不产生任何网络流量,它的成员既可以是一个个物理节点,也可以是**另一个策略组**。它负责在成员之间执行算法裁决:是手动选择、按延迟最低切换,还是故障熔断。
💡 可以将 proxies 视为公司里干活的员工,而 proxy-groups 则是项目经理和部门主管。
2. 经典四种策略组类型深度应用场景
根据业务场景的不同,精准搭配策略组类型:
### 1. `select`(手动选择模式)
- **核心场景**:总代理出口、流媒体专线、以及对 IP 变动极度敏感的网银或炒币场景;
- **特点**:除非用户在前端界面手动切换,否则选定节点后绝对不会因为网络抖动而擅自跳变。
### 2. `url-test`(自动延迟探测模式)
- **核心场景**:网页浏览、社交媒体刷帖;
- **配置要点**:必须搭配 `tolerance`(容差)参数。例如设置 `tolerance: 50`,只有当新节点延迟比当前节点低 50ms 以上时才执行切换,避免因 2ms 的网络细微抖动导致 IP 疯狂漂移触发风控。
### 3. `fallback`(故障主备自动熔断)
- **核心场景**:关键数据同步、服务器 SSH 运维;
- **工作机制**:永远使用列表中的第一顺位节点。只要第一顺位存活,即便其他节点延迟更低也不切换;只有当第一顺位彻底宕机时,才无缝降级至第二顺位。
### 4. `load-balance`(负载均衡轮询)
- **核心场景**:BT 多线程下载、爬虫数据采集;
- **策略算法**:支持 `round-robin`(按请求轮询)与 `consistent-hashing`(一致性哈希,保持同一域名走同一节点)。
yaml
# 生产级高可用 fallback 熔断组范例
- name: "运维-故障主备"
type: fallback
proxies:
- "香港 01 | IPLC专线" # 首选优质专线
- "日本 02 | BGP中转" # 备用中转线路
- "新加坡 03 | 直连备份" # 最终兜底
url: "https://www.google.com/generate_204"
interval: 180 3. 生产级三层树状拓扑设计(Tree Topology)
以下展示大型企业或极客用户最推荐的分流拓扑树:
yaml
# 顶层业务分流组(第一层)
proxy-groups:
- name: "🤖 AI-Services"
type: select
proxies: ["🇺🇸 美国-优选池", "🇸🇬 新加坡-优选池", "PROXY"]
- name: "🎬 Streaming-流媒体"
type: select
proxies: ["🇭🇰 香港-优选池", "🇹🇼 台湾-优选池", "PROXY"]
- name: "PROXY"
type: select
proxies: ["🇭🇰 香港-优选池", "🇯🇵 日本-优选池", "DIRECT"]
# 区域聚合调度组(第二层)
- name: "🇭🇰 香港-优选池"
type: url-test
tolerance: 50
proxies:
- "HK-Node-01"
- "HK-Node-02"
url: "https://www.gstatic.com/generate_204"
interval: 300
- name: "🇺🇸 美国-优选池"
type: url-test
tolerance: 80
proxies:
- "US-Node-01"
- "US-Node-02"
url: "https://www.gstatic.com/generate_204"
interval: 300 4. 循环引用死锁排查与设计禁区
策略组设计中最严重的逻辑错误是 **循环引用(Circular Dependency)**:
- 例如:策略组 A 包含了 策略组 B,而 策略组 B 的成员列表中又反向包含了 策略组 A;
- **后果**:Mihomo 内核在启动遍历依赖图时将陷入死循环,引发堆栈溢出(Stack Overflow)直接崩溃崩溃退出;
- **法则**:策略组的引用关系必须是严格的 **有向无环图(DAG)**,从业务组单向指向区域组,最终单向指向物理节点。
❓ 常见疑问与排查步骤
为什么开启 url-test 自动选择后 ChatGPT 经常被封号?
因为 url-test 在节点延迟波动时会频繁切换出口 IP。ChatGPT 对短时间内 IP 频繁跨国家跳跃极其敏感,会直接触发安全风控。访问 AI 业务应使用固定区域的 select 组。
一个物理节点可以同时放入多个不同的策略组吗?
完全可以。物理节点只是声明了一个连接端点,可以在无限个策略组中重复引用,彼此之间不会冲突。
url-test 测试节点的网址选用哪个最好?
推荐选用 `https://www.gstatic.com/generate_204` 或 `https://cp.cloudflare.com/generate_204`,服务器遍布全球边缘节点,响应极快且体积为 0 字节。