策略組解決的是「選哪個節點」的問題

規則檔案裡的 DOMAIN-SUFFIX,google.com,PROXY 這條規則,PROXY 並不是某一個具體節點,而是一個策略組的名字。規則只負責判斷「這條流量該走哪個組」,而組裡到底用哪個節點、怎麼切換,是策略組自己的排程邏輯決定的。這樣設計的好處是:即使你換了訂閱、節點全部變了,規則檔案完全不用改,因為規則引用的始終是組名,不是具體節點。

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - 香港01
      - 新加坡01
      - DIRECT

上面這個最簡單的例子裡,PROXY 組的類型是 select,意味著由你手動選擇用哪個節點,使用者端介面上點一下就能切換,不會自動變化。

四種排程類型逐個講清楚

1. select:完全手動,不自動切換

select 是最簡單的類型,使用者端只是把 proxies 列表裡的節點原樣顯示出來,用哪個由你自己點選,永遠不會自動跳動。適合你已經很清楚哪個節點線路穩定,不想讓程式幫你「自作聰明」切換的場景。

2. url-test:自動選延遲最低的節點

url-test 會按固定週期(interval)存取一個測試位址,測出組內每個節點的延遲,自動切換到目前最快的那個,你在介面上看到的是一個唯讀的「目前使用節點」,無法手動鎖定。

proxy-groups:
  - name: 自动选优
    type: url-test
    proxies: [香港01, 香港02, 新加坡01, 日本01]
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50

tolerance 是關鍵參數:只有新節點的延遲比目前節點低出這個容差值(單位毫秒)才會真正切換,作用是防止兩個延遲接近的節點來回抖動。tolerance 設得太小,就是「節點一直跳來跳去」最常見的原因。

3. fallback:主節點掛了才切換

fallback 同樣會週期性檢測節點是否可用,但邏輯不同:只要列表裡第一個能連通的節點沒有失效,就一直用它,不會因為「有更快的」而切換,只有目前使用的節點檢測失敗時才依序切換到下一個。適合你想固定用某個主力節點,只在它徹底不可用時才啟用備用線路的場景。

proxy-groups:
  - name: 主备切换
    type: fallback
    proxies: [主力节点, 备用节点A, 备用节点B]
    url: "https://www.gstatic.com/generate_204"
    interval: 300

4. load-balance:把流量分散到多個節點

load-balance 按一致性雜湊或輪詢把不同的連線分配到組內的不同節點上,同一時間可能有幾個連線分別走不同節點,適合節點頻寬都比較充足、希望把負載攤開的場景,代價是同一個網站的不同請求可能會顯示來自不同 IP,部分對 IP 一致性敏感的網站可能出現異常。

proxy-groups:
  - name: 负载均衡
    type: load-balance
    proxies: [香港01, 香港02, 香港03]
    strategy: consistent-hashing
    url: "https://www.gstatic.com/generate_204"
    interval: 300

策略組可以巢狀:組裡放組

proxies 列表裡除了寫具體節點名字,也可以寫另一個策略組的名字,這樣就能搭建出分層結構。一個常見的寫法是先按地區建立幾個 url-test 自動測速組,再用一個 select 組把這幾個地區組彙總起來,手動選「這次主要用哪個地區」:

proxy-groups:
  - name: 香港自动
    type: url-test
    proxies: [港01, 港02, 港03]
    url: "https://www.gstatic.com/generate_204"
    interval: 300

  - name: 日本自动
    type: url-test
    proxies: [日01, 日02]
    url: "https://www.gstatic.com/generate_204"
    interval: 300

  - name: PROXY
    type: select
    proxies: [香港自动, 日本自动, DIRECT]

這種寫法的好處是:規則裡只需要引用最外層的 PROXY,而具體某個地區內部怎麼自動測速切換,完全是內層組自己的事情,兩層邏輯互不干擾,配置檔案也更容易維護。

節點頻繁跳動?先查這兩個參數

如果用了 url-test 之後發現「目前節點」總是在切換,導致長連線(比如下載、視訊通話)頻繁中斷,通常是這兩個參數沒調好:interval 設得太短,測速本身太頻繁;或者 tolerance 設得太小甚至沒設,兩個延遲接近的節點會被判定為「有更優選項」而反覆切換。把 interval 調大到 300 秒以上、tolerance 調到 50ms 左右,通常能明顯改善這個問題。

寫在最後

選策略組類型其實是在回答一個問題:「這個組裡的節點,我希望程式幫我做多少決定?」——完全不幫忙就用 select,幫忙測速選最快就用 url-test,只在故障時兜底就用 fallback,想攤開負載就用 load-balance。理解這四種類型的差異之後,再配合分流規則決定「誰該用哪個組」,一份完整、好維護的配置基本就成型了。不確定某個術語具體含義,可以隨時去術語表查一下。