先分清兩個開關:流量接管與代理模式
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 流量與部分命令列程式也能被接管。連接埠是設定值,不同客戶端產生的實際數字可能不同,應以「設定」→「連接埠設定」或目前的設定檔為準。
三種模式處理的是同一批已接管的連線
- 規則模式 rule:逐條比對設定中的 rules,根據符合的規則選擇策略群組、DIRECT 或 REJECT。
- 全域模式 global:略過一般分流規則,將連線交給名為 GLOBAL 的全域策略入口,再使用其中選定的節點或策略群組。
- 直連模式 direct:讓已接管的連線直接存取目標位址,通常不再經過遠端代理節點。
這裡所說的「略過規則」有其界線。核心仍須完成接收連線、辨識目標與 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 就永遠沒有執行機會。
規則模式適用的具體情境
- 日常瀏覽:中國大陸服務維持直連,境外服務依規則使用代理,減少不必要的遠端繞路。
- 影音與下載分流:為串流影音、遊戲平台或大型檔案下載個別設定策略群組,依服務選擇節點。
- 區域網路裝置存取:讓 192.168.0.0/16、10.0.0.0/8 等私有位址維持直連,避免存取路由器或 NAS 時被送往代理。
- 長時間 TUN 接管:系統流量種類繁多時,透過規則精確決定 TCP、UDP、網域與 IP 請求的出口。
使用訂閱設定時,規則模式的效果取決於訂閱提供的規則集與策略群組。名稱相近的兩份設定,可能分別使用 GEOIP、GEOSITE、rule-providers 或大量 DOMAIN-SUFFIX,最終分流結果並不相同。遇到某個網站走錯出口,應先在連線詳細資訊中查看符合的規則與策略,而不是直接認定 rule 模式失效。
規則符合異常時的檢查順序
- 在「連線」頁面搜尋目標網域,確認實際符合的規則名稱與輸出策略。
- 檢查策略群組目前的選擇,確認規則指向 Proxy 後,Proxy 內部沒有選成 DIRECT。
- 檢查網域是否已提前解析成 IP;啟用 fake-ip 與 redir-host 時,核心可見的目標資訊可能不同。
- 檢查規則順序,尤其是 MATCH、FINAL、廣泛的 DOMAIN-KEYWORD 與大範圍 IP-CIDR。
- 更新遠端規則集後重新載入設定,確認記錄中沒有 rule-provider 下載或解析錯誤。
全域模式:全流量驗證與臨時繞過規則
全域模式適合測試,不一定適合長期維持。切換到 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 伺服器。
適合切換至直連的三個時機
- 本機服務突然無法使用:用於判斷代理路由是否影響公司內網、校園網路、NAS 或路由器後台。
- 下載速度比較:分別在 rule 與 direct 下測試同一個中國大陸鏡像站,觀察遠端繞路是否造成頻寬下降。
- 節點故障排查:當多個節點都出現相同錯誤時,使用 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
可選值通常為 rule、global 與 direct。部分客戶端會將執行時的選擇儲存在自己的設定資料庫中,並在下次啟動時覆寫設定檔中的 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 金鑰內容。控制介面不應直接暴露於公用網路;需要進行區域網路管理時,也應同時限制監聽位址、防火牆來源與驗證金鑰。
一套可重複的模式排錯流程
模式切換最有價值的用法是進行受控比較,而不是隨意反覆點選。維持相同網路、相同目標與相同節點,依照以下順序檢查,可以更快定位問題所在。
- 確認系統代理或 TUN 已啟用,並在連線清單中看見目標請求。
- 使用 rule 發起新連線,記錄符合的規則、策略群組與具體節點。
- 切換至 global,在 GLOBAL 中選取剛才的同一個節點,關閉舊連線後重試。
- 切換至 direct,再次關閉舊連線,測試本機網路直接連線的結果。
- 比較三次記錄中的 DNS 結果、連線協定、握手錯誤與耗時。
- 測試結束後恢復 rule,確認策略群組選擇與 TUN 狀態符合日常設定。
| Rule 結果 | Global 結果 | Direct 結果 | 優先檢查 |
|---|---|---|---|
| 失敗 | 成功 | 失敗 | 規則符合與策略群組指向 |
| 失敗 | 失敗 | 成功 | 代理節點、協定與遠端鏈路 |
| 成功 | 成功 | 失敗 | 屬於正常的代理可達情境 |
| 全部失敗 | 全部失敗 | 全部失敗 | 流量接管、DNS、本機網路或目標服務 |
最終選擇可以保持簡單:日常使用 rule;需要驗證某個節點或繞過複雜規則時,暫時使用 global;需要確認本機網路與代理鏈路誰在影響連線時,使用 direct。切換後務必檢查 GLOBAL 的具體選擇、關閉舊連線,並將系統代理與 TUN 視為獨立開關處理,三種模式的判斷就不會混在一起。