預計閱讀 8 分鐘

Clash 策略組怎麼選:url-test、fallback、load-balance 三種類型實測差異

自動測速、故障轉移、負載均衡三種策略組各適合什麼場景?本文逐項拆解 url、interval、tolerance 等參數含義,給出可直接套用的 proxy-groups 設定片段與選型建議。

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

一份 Clash / Clash Meta(mihomo)設定檔裡,proxies 列出的是所有可用節點,proxy-groups 才是真正決定流量走向的地方。規則(rules)只負責判斷一條連線該交給哪個策略組,策略組內部再決定具體挑哪個節點出站。如果只寫一個 select 類型的手動策略組,選路完全靠人工點選,節點掛了也不會自動切換。這就是為什麼絕大多數設定都會額外準備幾個自動化策略組——它們按各自的演算法,把「挑節點」這件事交給程式而不是人。

mihomo 支援的自動化策略組主要有三種類型:url-test(自動測速)、fallback(故障轉移)、load-balance(負載均衡)。三者共用一套健康檢查機制,但判斷邏輯和適用場景完全不同,混著用效果會打折。下面按參數、行為、場景逐一拆開講。

url-test:按延遲自動選最快節點

url-test 是最常見的自動化類型,核心邏輯是:定期用組內每個節點去請求一個測試位址,記錄回應耗時,然後把目前流量導向耗時最低的那個節點。它解決的是「這麼多節點,哪個此刻最快」的問題,適合大多數以延遲為核心指標的日常場景。

proxy-groups:
  - name: 自動選擇
    type: url-test
    proxies:
      - 香港01
      - 香港02
      - 新加坡01
      - 日本01
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50
    lazy: true

需要注意,tolerance 不是「延遲門檻」,而是「切換門檻」。比如目前使用的節點延遲 120ms,另一個節點測出 100ms,容差設的是 50ms,那麼 20ms 的差距不夠大,不會切換;只有差距超過 50ms 才會真正換節點。這個設計是為了避免為了幾毫秒的差異反覆跳來跳去。

fallback:第一優先順序失效才換下一個

fallback 的判斷邏輯跟 url-test 完全不同,它不比較誰最快,只關心「節點是否存活」。組內節點按設定順序排出優先順序,系統始終優先使用清單裡排在最前面且健康檢查通過的節點,一旦目前使用的節點測速失敗(逾時或連不上),才會依次往後嘗試,直到找到一個能連通的節點。

proxy-groups:
  - name: 故障轉移
    type: fallback
    proxies:
      - 主力節點-香港
      - 備用節點-新加坡
      - 備用節點-日本
    url: "https://www.gstatic.com/generate_204"
    interval: 180
    tolerance: 0

這裡的順序就是優先順序,主力節點-香港排第一,只要它健康檢查正常,流量就一直走它,即使後面的節點延遲更低也不會搶占。這跟 url-test「誰快用誰」的逐利策略正好相反,fallback 追求的是穩定與可預期,適合你已經明確知道哪個節點線路品質最好、只是想在它偶爾出狀況時有個保底方案的場景,比如給某個固定專線節點配一到兩個備援。

fallback 裡的 tolerance 參數意義不大,因為它不做「快慢比較切換」,只做「能不能連通」的二元判斷,大多數設定直接設為 0 或省略即可。真正起作用的是 urlinterval,這兩個參數決定了健康檢查多久跑一次、往哪個位址跑,間隔太長會導致主節點故障後有一段時間流量還打在失效節點上。

load-balance:把流量分散給多個節點

load-balance 解決的是另一類問題——不是「選最快的一個」,而是「把並發連線分散到多個節點上」,常見目的是分攤單一節點的頻寬壓力,或者讓多個品質相近的節點都有事做,避免某一個節點長期滿載而其他節點閒置。

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

strategy 參數是這個類型的關鍵,mihomo 提供兩種分配演算法:

需要提醒的是,load-balance 不會剔除已經失效的節點重新分配全部流量,它依然依賴健康檢查判斷節點是否存活,失效節點會被暫時跳過,但分配邏輯不做「故障轉移優先順序」那種排序處理。如果組內節點品質差異很大,負載均衡反而會讓部分連線落到慢節點上,體驗不如 url-test 穩定,所以這個類型更適合「節點品質彼此接近、想分散壓力」的場景,而不是「節點品質參差不齊、想挑好的用」的場景。

注意 三種類型的 url 測速位址必須能被節點正常存取且回傳穩定,如果測速位址本身在某些地區遭到干擾,健康檢查結果會失真,導致該切換的沒切、不該切的亂切。建議固定使用同一個測速位址,方便排查問題時對照。

三種類型怎麼選:場景對照

類型判斷依據典型場景關鍵參數
url-test延遲最低者優先日常上網,追求最佳速度interval / tolerance
fallback存活優先順序已知優選節點 + 備援保底proxies 順序 / interval
load-balance分散並發連線多節點品質接近,想分散壓力strategy

實際設定中,三種類型也可以嵌套組合。比較常見的做法是先用 url-test 建一個「自動選擇」組作為預設出口,再單獨給某些高優先站點(比如串流媒體、下載工具)配一個 load-balance 組分攤頻寬,同時給關鍵節點配一個 fallback 組當保險。策略組之間可以互相引用——一個 select 組的選項裡既可以放具體節點,也可以放另一個策略組的名稱,這樣上層規則只需要指向最外層的 select,內部的自動化邏輯由內層策略組承擔,設定結構會清晰許多。

常見迷思與排查思路

不少人反映「設了 url-test 但節點一直不切換」,大機率是 tolerance 設得過大,或者組內節點延遲本身差距不明顯,系統判斷沒必要切換。可以暫時把 tolerance 調小到個位數驗證是否恢復切換,確認邏輯正常後再調回合理數值。另一個高頻問題是 fallback 組「主節點明明連不上,卻還在用它」,這通常是 interval 設得太長,健康檢查還沒跑到下一輪,或者測速位址回傳的不是預期的 204 而被誤判為存活。

還有一類迷思是把 load-balance 當成「更快的 url-test」來用,期望它自動挑最優節點,但它的設計目標是分攤而不是擇優,如果組內混入一個明顯較差的節點,部分連線體驗會被拖累,這種情況應該把慢節點移出組,或者乾脆換成 url-test。排查這類問題時,建議在用戶端介面上留意各節點目前測速數值和策略組實際選中的節點,大多數圖形化用戶端(如 Clash Verge、Clash for Windows 系用戶端)都會在策略組介面即時顯示每個節點的延遲和目前選中項,比盯著日誌翻找更直觀。

小結 追求速度用 url-test,追求穩定用 fallback,追求分攤壓力用 load-balance;三者可以嵌套組合,但不要指望一種類型解決所有選路需求。
下載Clash