Clash 規則、全域、直連三種代理模式怎麼選:情境比較與切換要點

說明 rule、global、direct 三種模式的流量轉送差異,整理日常上網、臨時排錯與全流量測試的選擇建議,並提醒切換後的連線狀態變化。

先分清兩個開關:流量接管與代理模式

Clash 客戶端中的「系統代理」、「TUN 模式」與「規則、全域、直連」並非同一層設定。系統代理或 TUN 負責將流量送入 Clash 核心,代理模式則決定這些已進入核心的連線接下來使用代理節點、DIRECT 直連,或 REJECT 拒絕。只切換代理模式,不會自動啟用系統代理;只啟用 TUN,也不代表所有連線一定會經過遠端節點。

以常見設定為例,HTTP 與 SOCKS 共用的 mixed-port 可能設為 7890,控制介面 external-controller 可能設為 127.0.0.1:9090。瀏覽器明確使用 127.0.0.1:7890,或將作業系統代理指向該連接埠後,請求才會進入核心。啟用 TUN 後,更多未讀取系統代理的應用程式、UDP 流量與部分命令列程式也能被接管。連接埠是設定值,不同客戶端產生的實際數字可能不同,應以「設定」→「連接埠設定」或目前的設定檔為準。

三種模式處理的是同一批已接管的連線

這裡所說的「略過規則」有其界線。核心仍須完成接收連線、辨識目標與 DNS 等基礎工作,客戶端本身也可能保留區域網路繞過、程序排除或防迴圈邏輯。因此 direct 不等於退出 Clash;若要完全停止接管,應另外關閉系統代理與 TUN,必要時再停止核心。

規則模式:日常使用的預設選擇

規則模式適合長時間運作。它會由上到下檢查規則,第一條符合的規則立即生效,後續規則不再參與判斷。典型目標是讓區域網路與中國大陸網站直連,讓指定網域或境外流量進入代理策略群組,最後以 MATCH 接住未分類的連線。

mode: rule
mixed-port: 7890

rules:
  - DOMAIN-SUFFIX,example.com,Proxy
  - DOMAIN-SUFFIX,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

在這段範例中,存取 example.com 會先符合第一條規則並交給 Proxy;其他以 .cn 結尾的網域直接連線;仍未符合規則的中國大陸 IP 會由 GEOIP,CN 處理;最後剩餘請求進入 Proxy。規則順序不能任意交換。例如將 MATCH 放在最前面,下面的 DOMAIN-SUFFIX 與 GEOIP 就永遠沒有執行機會。

規則模式適用的具體情境

  1. 日常瀏覽:中國大陸服務維持直連,境外服務依規則使用代理,減少不必要的遠端繞路。
  2. 影音與下載分流:為串流影音、遊戲平台或大型檔案下載個別設定策略群組,依服務選擇節點。
  3. 區域網路裝置存取:讓 192.168.0.0/16、10.0.0.0/8 等私有位址維持直連,避免存取路由器或 NAS 時被送往代理。
  4. 長時間 TUN 接管:系統流量種類繁多時,透過規則精確決定 TCP、UDP、網域與 IP 請求的出口。

使用訂閱設定時,規則模式的效果取決於訂閱提供的規則集與策略群組。名稱相近的兩份設定,可能分別使用 GEOIP、GEOSITE、rule-providers 或大量 DOMAIN-SUFFIX,最終分流結果並不相同。遇到某個網站走錯出口,應先在連線詳細資訊中查看符合的規則與策略,而不是直接認定 rule 模式失效。

規則符合異常時的檢查順序

全域模式:全流量驗證與臨時繞過規則

全域模式適合測試,不一定適合長期維持。切換到 global 後,一般業務規則不再決定出口,連線會統一進入 GLOBAL 策略入口。使用者仍需在 GLOBAL 中明確選取可用節點;如果該入口目前選的是 DIRECT,介面雖然顯示全域模式,實際連線仍可能是直連。

使用情境 建議模式 觀察重點
判斷規則是否導致網站無法開啟 暫時切換至 global 使用同一節點是否能立即恢復存取
檢查指定節點的完整出口 global GLOBAL 是否選取目標節點
日常中國大陸與境外混合存取 rule 網域、GEOIP 與兜底規則
判斷代理節點是否造成異常 direct 直連網路能否存取目標

例如某個網站在規則模式下逾時,可以先記下目前節點,然後將模式切換至 global,並在 GLOBAL 中選取同一個節點。如果全域模式恢復正常,通常表示節點本身可用,問題更可能來自規則符合、策略群組指向或 DNS 分流。如果全域模式仍然失敗,再檢查節點連通性、握手記錄、UDP 支援與目標服務限制。

全域模式不代表所有程式都一定會使用代理

只有進入 Clash 的流量才受 global 控制。瀏覽器使用系統代理時會進入核心,但某些遊戲、虛擬機器、容器或自行建立網路堆疊的程式可能繞過系統代理。需要涵蓋這些程式時,應檢查 TUN 是否啟動、作業系統是否授予管理員權限,以及客戶端的程序排除清單。在 Android 上則要確認 VpnService 授權仍然有效,且目標應用程式沒有被「分應用程式代理」排除。

直連模式:找出代理影響,不是退出按鈕

direct 模式會讓已進入 Clash 的新連線嘗試從本機網路直接存取目標。它最適合用於對照測試:在同一台裝置、相同 DNS 環境下,切換直連後是否恢復;如果恢復,問題可能位於代理節點、策略群組或遠端鏈路;如果仍然失敗,則應繼續檢查本機網路、目標服務、DNS 與應用程式本身。

直連無法讓本機網路存取原本無法連線的目標。如果電信業者網路無法直接連線某個位址,direct 下仍會逾時。它也不等於關閉 DNS 處理:當 DNS 請求由 Clash 的 nameserver 模組接管時,即使代理模式是 direct,網域解析仍可能經過設定中的本機或加密 DNS 伺服器。

適合切換至直連的三個時機

不要把 direct 當成關閉客戶端的替代方案。系統代理仍可能指向 127.0.0.1:7890,TUN 虛擬網卡也可能繼續運作,連線記錄與 DNS 快取仍由核心管理。需要恢復原始網路路徑時,應依序關閉「設定」→「系統代理」、關閉「設定」→「TUN 模式」,再確認作業系統代理設定已還原。

切換模式後,為什麼舊連線沒有立即變化

模式切換主要影響新建立的連線。已建立的 TCP 工作階段通常會繼續使用原本的出口,直到應用程式關閉連線、伺服器中斷或核心主動終止。HTTP/2、WebSocket、QUIC 與長連線應用程式的情況尤其明顯:頁面重新整理後可能重用原有連線,看起來就像模式沒有切換。

切換後建議等待 3 至 10 秒,再重新發起請求。如果結果仍未改變,可以在客戶端的「連線」頁面關閉對應連線,或完全退出並重新開啟目標應用程式。使用瀏覽器測試時,開啟新的無痕視窗不一定足夠,因為瀏覽器程序仍可能共用連線池;完全關閉瀏覽器程序後再開啟,結果會更可靠。

DNS 快取也會干擾對照結果

應用程式、作業系統與 Clash 核心都可能保存 DNS 結果。Windows 可在終端機執行 ipconfig /flushdns 清除系統 DNS 快取;macOS 不同版本的刷新機制不同,通常先重新啟動目標應用程式與 Clash 核心較為穩妥。使用 fake-ip 時,198.18.0.0/16 範圍內的位址是核心的映射結果,不代表網站的真實伺服器位於該網段。

測試同一個網站時,應同時記錄模式、策略群組節點、符合的規則、目標網域、連線協定與耗時。例如 rule 下符合 DIRECT、耗時 42 ms,global 下經目標節點、耗時 186 ms,這樣的比較才有意義。只看網頁主觀上的開啟速度,容易受到快取、連線重用與內容傳遞網路節點變化的影響。

如何在客戶端切換,以及如何儲存設定檔

不同圖形化客戶端的入口名稱略有差異,常見路徑是側欄「代理」或「Proxies」頁面頂端的「規則/全域/直連」,也有客戶端將其放在「設定」→「執行模式」。切換後應回到連線頁面發起一次新請求,確認 mode 與實際輸出一致。如果客戶端支援系統匣選單,也可以從系統匣的「代理模式」子選單快速調整。

在 mihomo 或相容於 Clash 的設定中,可以使用 mode 欄位設定載入設定時的預設模式:

mode: rule

可選值通常為 ruleglobaldirect。部分客戶端會將執行時的選擇儲存在自己的設定資料庫中,並在下次啟動時覆寫設定檔中的 mode;因此手動編輯 YAML 後,應觀察客戶端重新載入時是否保留修改。訂閱更新也可能替換目前的設定,不宜將長期自訂內容只寫入訂閱產生的檔案。

透過控制介面切換 mihomo 模式

啟用 external-controller 的環境可以透過 REST 介面修改執行中的設定。以下範例假設控制位址只監聽本機 127.0.0.1:9090,且未設定 secret:

curl -X PATCH http://127.0.0.1:9090/configs \
  -H "Content-Type: application/json" \
  -d '{"mode":"rule"}'

將 rule 改為 global 或 direct 即可切換。如果設定了 secret,請在請求標頭中使用 Authorization: Bearer 金鑰內容。控制介面不應直接暴露於公用網路;需要進行區域網路管理時,也應同時限制監聽位址、防火牆來源與驗證金鑰。

一套可重複的模式排錯流程

模式切換最有價值的用法是進行受控比較,而不是隨意反覆點選。維持相同網路、相同目標與相同節點,依照以下順序檢查,可以更快定位問題所在。

  1. 確認系統代理或 TUN 已啟用,並在連線清單中看見目標請求。
  2. 使用 rule 發起新連線,記錄符合的規則、策略群組與具體節點。
  3. 切換至 global,在 GLOBAL 中選取剛才的同一個節點,關閉舊連線後重試。
  4. 切換至 direct,再次關閉舊連線,測試本機網路直接連線的結果。
  5. 比較三次記錄中的 DNS 結果、連線協定、握手錯誤與耗時。
  6. 測試結束後恢復 rule,確認策略群組選擇與 TUN 狀態符合日常設定。
Rule 結果 Global 結果 Direct 結果 優先檢查
失敗 成功 失敗 規則符合與策略群組指向
失敗 失敗 成功 代理節點、協定與遠端鏈路
成功 成功 失敗 屬於正常的代理可達情境
全部失敗 全部失敗 全部失敗 流量接管、DNS、本機網路或目標服務

最終選擇可以保持簡單:日常使用 rule;需要驗證某個節點或繞過複雜規則時,暫時使用 global;需要確認本機網路與代理鏈路誰在影響連線時,使用 direct。切換後務必檢查 GLOBAL 的具體選擇、關閉舊連線,並將系統代理與 TUN 視為獨立開關處理,三種模式的判斷就不會混在一起。

下載 Clash 客戶端 依平台查看可選版本