8. Provider 与策略组#


Provider 负责“批量得到节点或规则”,策略组负责“从多个节点里选一个或多个出口”。

出站节点来源#

来源配置适合场景
静态节点proxies少量固定节点、手工配置
代理 providerproxy-providers订阅、文件、内联节点、WARP 动态节点
内置节点DIRECTREJECT直连和拒绝

proxy-providers#

HTTP 订阅#

proxy-providers:
  airport:
    type: http
    format: auto
    url: https://example.com/sub.yaml
    path: ./providers/airport.yaml
    interval: 3600
    proxy: DIRECT
    header:
      User-Agent:
        - Link1
    filter: '香港|日本|新加坡'
    exclude-filter: '倍率:10|过期'
    exclude-type: direct
    size-limit: 10485760
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 300
      timeout: 5000
      expected-status: 204

本地文件#

proxy-providers:
  local:
    type: file
    path: ./providers/local.yaml
    format: mihomo

内联 payload#

proxy-providers:
  inline-nodes:
    type: inline
    payload:
      - name: local-socks
        type: socks5
        server: 127.0.0.1
        port: 1080

WARP provider#

proxy-providers:
  warp:
    type: warp
    mode: auto
    transports:
      - wireguard
      - masque

warp provider 会物化 WARP 出口节点;不要在 proxies 里写 type: warp

为什么 WARP 是 provider:同一份 WARP 状态可能生成 wireguardmasque 两种出站节点,而且 auto 模式需要持久化账号、密钥、endpoint 和 transport 状态。把它放在 provider 中,策略组就能像使用订阅节点一样使用这些物化结果,例如 use: [warp]。详细字段和机制见 出站协议配置:WARP provider

proxy-provider 字段#

字段含义实际影响
typehttpfileinlinewarp决定 provider 行为
formatautomihomouribase64sip008surgequanxsing-box决定订阅内容解析方式
path本地路径HTTP 缓存或 file 读取
url订阅 URLtype=http 使用
interval刷新间隔,秒控制自动刷新
dialer-proxy / proxy拉取订阅使用的出口订阅被墙或内网订阅时使用
filter保留节点名匹配正则筛选节点
exclude-filter排除节点名匹配正则去掉无效/高倍率/过期节点
exclude-type排除协议类型例如排除 ssrdirect
headerHTTP 请求头订阅认证或 UA
size-limit响应大小限制防止异常大订阅
health-checkProvider 级健康检查给 provider 节点建立探测状态
override批量覆写节点字段统一设置 UDP、证书校验、前缀等
payload内联节点列表type=inline 使用

provider override#

proxy-providers:
  airport:
    type: http
    url: https://example.com/sub.yaml
    path: ./providers/airport.yaml
    override:
      skip-cert-verify: true
      udp: true
      down: 200 Mbps
      up: 50 Mbps
      dialer-proxy: DIRECT
      interface-name: eth0
      routing-mark: 100
      ip-version: ipv4-prefer
      additional-prefix: '机场 - '
      additional-suffix: ' - 自动'
      proxy-name:
        - pattern: 'United States'
          target: 'US'

实际影响:

策略组类型#

策略组不是新的出站协议。它只回答两个问题:

  1. 这一条流量最终选哪个成员? 例如 selecturl-testsmartfallbackload-balance
  1. 这一条流量是否要按顺序穿过多个成员? 例如 relay

策略组成员可以来自三类来源:

Link1 在加载配置时会先解析成员,再做去重、过滤和循环引用检查。一个组可以引用另一个组,但不能形成 A -> B -> A 这种环。健康检查类策略组会把嵌套组展开到叶子节点做探测,避免只探测到“组”这个壳。

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - AUTO
      - DIRECT

  - name: AUTO
    type: url-test
    use:
      - airport
    url: http://www.gstatic.com/generate_204
    interval: 300
    timeout: 5000
类型行为适合场景核心注意点
select用户手动选择一个成员需要可控切换的主出口选择的是成员名,成员可以是节点也可以是组。
url-test根据探测延迟选择较优成员同地区多个节点自动择优主要相信健康检查结果。
smart结合健康探测和真实拨号反馈动态排序自动化主出口、路由器长期运行不只看测速,还会学习失败率、抖动和真实连接表现。
fallback按顺序选择第一个可用成员主备链路成员顺序就是优先级。
load-balance多成员分摊连接多节点均衡使用strategy 决定轮询、哈希或粘性会话。
relay按顺序组成多跳链路前置代理、跳板链、出口串联成员顺序就是链路顺序,兼容性比普通组更严格。

如果你只是想“让 Link1 自动选一个好节点”,优先从 smarturl-test 开始;如果你明确要“先走 A,再从 A 连接 B,最后由 B 出口”,才使用 relay

select:手动选择#

select 是最容易理解的策略组:它把多个成员展示给用户,由用户或 App 选择当前成员。它不主动测速,也不会自动切换,适合做顶层入口。

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - SMART
      - JP
      - US
      - DIRECT

实际影响:规则里写 PROXY 时,流量会走 PROXY 当前选中的成员。如果选中的是另一个组,例如 SMART,则继续执行 SMART 的选择逻辑。

url-test:按探测延迟自动选择#

url-test 会定期让每个候选节点访问 url,记录延迟和可用性,然后选延迟最低的一项。

proxy-groups:
  - name: JP-AUTO
    type: url-test
    use: [airport]
    filter: '日本`JP`Tokyo'
    url: http://www.gstatic.com/generate_204
    interval: 300
    timeout: 5000
    tolerance: 50

字段影响:

smart:健康探测 + 真实拨号反馈#

smart 可以理解成增强版 url-test。它也使用 urlintervaltimeouttolerance 建立基础健康排序,但不会只相信测速;真实业务连接发生后,它还会记录每个候选的成功率、真实拨号耗时和抖动,并用这些反馈微调排序。

proxy-groups:
  - name: SMART
    type: smart
    use: [airport]
    filter: '香港`日本`新加坡'
    exclude-filter: '过期`倍率:10'
    url: http://www.gstatic.com/generate_204
    interval: 300
    timeout: 5000
    tolerance: 80
    lazy: true

smart 的工作过程:

  1. 先看健康状态:健康节点排在未知节点前;明确不可用的节点不会优先尝试。
  1. 再看真实反馈:真实连接成功会记录延迟;失败会记录失败信号,并可能触发这个节点的健康探测。
  1. 有限并发尝试:拨号时会按当前排序尝试候选,前一个候选迟迟没有结果时才错峰尝试后续候选,避免一次性打满所有节点。
  1. 失败门控:如果某个候选近期失败率过高,会被放到更靠后的位置。
  1. 少量探索:长期运行时会周期性给次优候选一次机会,避免因为旧数据把后来恢复的节点永远压在后面。
  1. 手动选择可覆盖:如果 App 临时固定了某个成员,smart 会优先使用它;当它被判定不健康或拨号失败时,固定选择会被清掉,回到自动排序。

smarturl-test 的区别:

对比项url-testsmart
决策依据主要是探测 URL 的延迟和状态探测结果 + 真实拨号成功率/延迟/抖动
故障感知等下一轮探测发现业务拨号失败会立即形成反馈,并可触发单节点探测
适合场景同质节点中选最低延迟长期运行、节点质量波动、路由器无人值守
可解释性简单、容易预测更智能,但短期排序会随真实连接反馈变化

调参建议:

fallback:按顺序主备#

fallback 适合“主节点优先,主节点不行再走备用”的场景。它会按成员顺序查找可用项,不追求最低延迟。

proxy-groups:
  - name: BACKUP
    type: fallback
    proxies:
      - hk-primary
      - jp-backup
      - DIRECT
    url: http://www.gstatic.com/generate_204
    interval: 300

注意:把 DIRECT 放到最后表示“代理都不可用时直连兜底”。这对普通浏览可能有用,但对需要隐私或固定出口的流量可能不合适。

load-balance:分摊连接#

load-balance 会在多个候选之间分摊连接,支持三种 strategy

strategy行为适合场景
round-robin按顺序轮询候选希望平均使用多个节点。
consistent-hashing根据目标域名/IP 做哈希,同一目标倾向同一出口减少同一网站频繁换出口。
sticky-sessions根据进程名 + 目标维持一段时间粘性登录态敏感应用、同一客户端会话需要稳定出口。
proxy-groups:
  - name: BALANCE
    type: load-balance
    use: [airport]
    filter: '香港`HK'
    strategy: consistent-hashing

relay:按顺序串成多跳链路#

relay 不是“自动选择一个节点”,而是“把多个出站按顺序串起来”。例如:先通过本地前置代理连接到中转节点,再由中转节点连接最终出口。

proxies:
  - name: front-node
    type: socks5
    server: 127.0.0.1
    port: 1080

  - name: exit-node
    type: ss
    server: exit.example.com
    port: 8388
    cipher: aes-128-gcm
    password: secret

proxy-groups:
  - name: RELAY
    type: relay
    proxies:
      - front-node
      - exit-node

这条链路可以读成:

客户端流量 -> Link1 -> front-node -> exit-node -> 目标网站

relay 的关键规则:

常见写法:

目标推荐配置说明
先通过本地代理再连远端节点relay: [local-socks, remote-node]本机已有代理或企业内网跳板。
先选一个中转,再固定出口relay: [SMART-FRONT, exit-node]SMART-FRONT 先自动选中转,出口保持固定。
两段都自动relay: [SMART-FRONT, SMART-EXIT]可以工作,但排障复杂;建议先分别验证两个组。

策略组字段#

字段含义实际影响
name组名可被规则或其他组引用,必须唯一。
type组类型决定选择逻辑或链式逻辑。
proxies静态成员列表可引用节点或其他组;顺序对 fallbackrelayround-robin 有实际影响。
use引用 provider把 provider 产出的节点加入组。
url健康检查 URLurl-test/fallback/smart/load-balance 使用。
interval探测间隔,秒默认 300 秒;越短越敏感,也越耗资源。
timeout探测超时,毫秒默认 5000 毫秒;网络慢时设太短会误判。
lazy懒探测只在需要时探测,适合大订阅。
max-failed-times兼容字段不建议依赖;实际可用性主要由健康探测和质量反馈决定。
disable-udp禁用组 UDP即使成员支持 UDP,组也会对外隐藏或拒绝 UDP 能力。
interface-name兼容字段普通组不建议依赖;出口网卡优先写在具体出站节点或全局。relay 链路会尊重根节点上的 socket 选项。
routing-mark兼容字段普通组不建议依赖;Linux mark 优先写在具体出站节点或全局。
include-all包含所有静态和 provider 节点快速建组。
include-all-proxies包含所有静态节点不含 provider。
include-all-providers包含所有 provider 节点不含静态节点。
filter成员名称过滤多个模式可用反引号分隔;先保留匹配项。
exclude-filter成员名称排除在收集成员后排除匹配项。
exclude-type协议类型排除例如排除 directssr
expected-status探测期望状态码url 配合判断探测是否成功。
health-check嵌套健康检查配置可覆盖 url/interval/timeout/lazy/expected-status
hiddenApp 隐藏提示影响 App 展示,不改变转发逻辑。
iconApp 图标影响 App 展示,不改变转发逻辑。
tolerance延迟容忍度,毫秒url-test/smart 使用,减少微小延迟抖动导致的切换。
strategyload-balance 策略round-robinconsistent-hashingsticky-sessions

成员来源和过滤#

proxy-groups:
  - name: JP
    type: url-test
    include-all: true
    filter: '日本`JP`Tokyo'
    exclude-filter: '过期`倍率:10'
    exclude-type: ssr

实际影响:

健康检查#

健康检查配置可以写在组顶层,也可以写在 health-check 下:

proxy-groups:
  - name: AUTO
    type: url-test
    use: [airport]
    health-check:
      url: http://www.gstatic.com/generate_204
      interval: 300
      timeout: 5000
      lazy: false
      expected-status: 204

支持主动健康检查的组:url-testsmartfallbackload-balance

不主动健康检查的组:selectrelay

默认值:

| 项 | 默认 | | -- | ---- | | URL | http://www.gstatic.com/generate_204 | | interval | 300 秒 | | timeout | 5000 毫秒 |

典型策略组模板#

手动主出口 + 自动测速#

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - AUTO
      - DIRECT

  - name: AUTO
    type: url-test
    use: [airport]
    interval: 300

主备 fallback#

proxy-groups:
  - name: BACKUP
    type: fallback
    proxies:
      - node-primary
      - node-backup
      - DIRECT

多跳 relay#

proxy-groups:
  - name: RELAY
    type: relay
    proxies:
      - front-node
      - exit-node

注意:relay 增加延迟和故障点,只有明确需要链式代理时再使用。