Clash 規則分流設定實戰:本地與境外流量的 YAML 寫法
針對常見區域分流需求,逐段說明策略組、規則順序、兜底規則與設定驗證方法。
先確立本地直連、境外代理的分流模型
Clash 的規則模式並不是同時執行所有規則,而是由上到下檢查連線資訊,命中第一條符合條件的規則後便立即停止比對。設定本地與境外流量時,真正決定結果的是三個部分:規則能辨識什麼、命中後交由哪個策略組處理,以及沒有命中時由哪條規則兜底。
一個容易維護的基礎模型通常分成四層。第一層處理區域網路位址、回環位址與本機服務,避免存取路由器、印表機、網路儲存裝置或開發環境時繞經代理。第二層放置需要明確指定行為的網域,例如公司內部網域、下載站或特定應用程式介面。第三層使用網域集合與 IP 地理資料處理較大範圍的區域流量。第四層使用 MATCH 接住先前未辨識的連線。
- 區域網路與私有位址:交由
DIRECT,維持本地裝置之間的正常通訊。 - 明確網域規則:依實際需求直連、代理或拒絕,優先級高於區域規則。
- 本地區域流量:可透過網域規則集、
GEOIP或 mihomo 的GEOSITE判斷。 - 未匹配流量:通常交由境外策略組處理,而不是直接寫死某個節點。
這裡的「本地」要區分兩個概念:一是區域網路內的私有位址,二是希望直連的本地區域網際網路流量。前者可透過固定網段穩定辨識;後者可能只有網域,也可能最終連線至 CDN 位址,因此需要搭配網域判斷與 IP 判斷。
策略組負責選擇路徑,規則只負責將流量送過去
規則末尾的目標欄位可以是 DIRECT、REJECT,也可以是策略組名稱。長期使用時,建議讓境外流量指向策略組,而不是直接指向某個代理節點。節點名稱可能隨訂閱更新而變更,策略組名稱則能維持穩定,規則層不必反覆修改。
以下片段展示三個常用策略組。「境外流量」作為使用者可見的入口,可手動選擇自動測試組或直連;「自動選擇」會定期測試候選節點;「漏網流量」負責承接未命中區域規則的連線。範例假設訂閱中已存在名為 airport 的代理提供器,實際使用時應改成目前設定中的 provider 名稱。
proxy-groups:
- name: 境外流量
type: select
proxies:
- 自動選擇
- DIRECT
- name: 自動選擇
type: url-test
use:
- airport
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 80
- name: 漏網流量
type: select
proxies:
- 境外流量
- DIRECT
select 組不會自動替使用者變更目前選擇,適合需要穩定控制路徑的情境。url-test 會依測試結果從候選節點中選擇回應較快的節點,但測試延遲只代表測試網址的回應情況,不等於所有網站的實際下載速度。行動網路頻繁變動時,可以適度延長 interval,減少重複測試。
如果節點直接寫在 proxies 清單中,節點名稱必須與訂閱設定完全一致,包括空格與大小寫。使用 use 時,名稱必須對應 proxy-providers 下的鍵。兩種來源可依客戶端與核心能力選擇,但不能將 provider 名稱誤寫到一般節點清單中。
規則順序:具體條件在前,區域判斷與兜底在後
Clash 採用首條命中機制,因此同一個網域可能同時符合多種規則。例如 files.example.cn 既符合完整網域規則,也符合 DOMAIN-SUFFIX,example.cn,最後採用哪一條取決於排列順序。設定時可依「例外規則、應用規則、網域區域規則、IP 區域規則、最終兜底」的順序編排。
| 順序 | 規則類型 | 用途 |
|---|---|---|
| 1 | DOMAIN |
處理單一完整網域的例外路徑 |
| 2 | DOMAIN-SUFFIX |
處理同一主網域及其子網域 |
| 3 | DOMAIN-KEYWORD |
補充關鍵字比對,使用時控制範圍 |
| 4 | GEOSITE 或網域規則集 |
依維護好的網域集合進行區域分類 |
| 5 | IP-CIDR、GEOIP |
連線目標已解析為 IP 時進行判斷 |
| 6 | MATCH |
承接所有先前未匹配的連線 |
DOMAIN-KEYWORD 的涵蓋範圍較廣。例如關鍵字過短時,可能命中名稱相似但用途完全不同的網域。能使用完整網域或後綴表達時,應優先選擇更精確的規則。程序規則也應謹慎使用:PROCESS-NAME 依賴作業系統與核心取得程序資訊,在部分平台、容器環境或僅啟用一般系統代理時,程序辨識結果可能不一致。
MATCH 必須位於規則清單末尾。若將它放在中間,後面的規則永遠沒有機會執行。對於「本地區域直連,其餘流量代理」的目標,末尾通常寫成 MATCH,漏網流量,如此一來新網域、缺少地理資料的位址,以及無法分類的連線仍有明確去向。
本地與境外流量的 YAML 規則寫法
以下是一段較保守的規則範例。它先直連回環位址與常見私有網段,再處理指定網域,接著嘗試依本地區域網域與 IP 資料直連,剩餘流量則交由策略組。此片段適用於 Clash Meta(mihomo)常見設定;若使用較早期的原版 Clash 核心,應確認客戶端是否支援 GEOSITE,必要時將其替換為相容的 rule-provider 網域規則集。
rules:
- DOMAIN,router.local,DIRECT
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR6,::1/128,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
- DOMAIN-SUFFIX,example.cn,DIRECT
- DOMAIN,api.example.net,境外流量
- GEOSITE,CN,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,漏网流量
no-resolve 為什麼常放在 IP 規則末尾
當規則比對進行到 IP 類型時,如果目前連線只有網域,部分實作可能會發起解析以取得目標 IP。加入 no-resolve 表示這條規則不會為了比對而額外觸發 DNS 解析。如此可減少規則階段產生的查詢,也能避免因解析路徑不同而增加等待時間。
不過,no-resolve 不代表 Clash 完全忽略 DNS。連線本身仍需依目前的 DNS 模式處理網域。它只限制對應 IP 規則的比對行為。在 Fake-IP 模式下,網域通常會先映射至保留位址,核心仍可保留網域資訊並執行網域規則;真正建立連線時,再依設定解析目標位址。
GEOIP,CN,DIRECT 能涵蓋所有本地區域網站嗎
不能將 GEOIP 視為唯一判斷依據。網站可能使用全球 CDN、雲端服務或跨區域調度,同一網域在不同網路下可能回傳不同位址。部分本地服務也可能使用境外位址,境外服務同樣可能在本地區域部署節點。因此,網域規則一般應排在 GEOIP 前面:已知服務優先依網域分類,其餘連線再使用 IP 地理資料補充判斷。
地理資料庫需要隨核心或客戶端更新。資料庫過舊時,新分配的位址段可能被歸入錯誤區域。遇到「同一網站在不同裝置上採用不同策略」的情況,除了比較 YAML,也應比較 GeoIP、GeoSite 資料版本及 DNS 回傳結果。
使用 rule-provider 管理大量網域
規則數量增加後,不建議將數千條網域全部堆在主設定的 rules 中。mihomo 與支援規則提供器的 Clash 客戶端可透過 rule-providers 載入獨立規則檔案,再於規則清單中使用 RULE-SET 引用。主設定只保留優先級,規則檔案負責維護具體項目。
rule-providers:
regional-direct:
type: http
behavior: domain
format: yaml
path: ./ruleset/regional-direct.yaml
url: https://rules.example.net/regional-direct.yaml
interval: 86400
rules:
- RULE-SET,regional-direct,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,漏网流量
behavior: domain 適合只包含網域類項目的規則集;包含完整規則語法時通常使用 classical;純 IP 網段則可使用 ipcidr。規則檔案內容必須與 behavior 相符,否則可能載入失敗或出現項目無法匹配。遠端規則集還要設定本地 path,讓客戶端能夠快取下載結果。
DNS、系統代理與 TUN 模式對分流結果的影響
規則寫正確後,實際連線路徑仍會受到接管方式影響。啟用系統代理時,通常只有遵循系統代理設定的應用程式會進入 Clash;部分遊戲、命令列工具、虛擬機器或自行建立連線的程式可能繞過系統代理。啟用 TUN 模式後,核心可以接管更廣泛的 IP 流量,因此同一套規則看起來會「命中更多連線」。
TUN 模式不是區域規則的替代方案。它解決的是流量如何進入核心,規則解決的是進入後採用哪條路徑。若應用程式流量根本沒有經過 Clash,調整 GEOIP、MATCH 或策略組都不會改變結果。排查時應先在連線面板確認目標連線是否出現,再查看它命中了哪條規則。
DNS 同樣會改變觀察結果。使用 redir-host 時,規則判斷可能更依賴實際解析位址;使用 Fake-IP 時,核心可較早保留網域脈絡,網域規則通常更容易生效。對於區域網路裝置名稱、印表機網域、企業內部解析及某些依賴真實 IP 的應用程式,可將對應網域加入 Fake-IP 排除項,再依實際需求補充直連規則。
如果客戶端同時啟用 IPv6,而規則只涵蓋 IPv4 私有網段,區域網路 IPv6 連線可能落入最終代理策略。應依網路環境補充 IP-CIDR6 規則,並確認所選代理節點是否具備所需的 IPv6 連線能力。完全關閉 IPv6 雖可能暫時改變現象,但更適合作為定位步驟,而不是所有環境下的固定處理方式。
設定驗證:從語法檢查到規則命中記錄
YAML 對縮排敏感。清單項目前的空格、冒號後的空格與名稱引用都可能影響載入。策略組名稱含中文或空格通常可以使用,但規則目標必須與策略組名稱逐字一致。修改完成後,先使用客戶端的設定檢查功能;以命令列執行 mihomo 時,也可以針對設定目錄執行測試。
mihomo -t -d /etc/mihomo
測試通過只代表設定能夠解析,不代表每條規則都符合預期。建議依以下順序驗證:
- 重新載入設定,確認策略組已顯示,代理提供器與規則集沒有更新錯誤。
- 存取路由器管理位址或區域網路裝置,確認連線記錄顯示
DIRECT。 - 存取明確加入網域規則的網站,檢查命中規則名稱與目標策略。
- 存取一個本地區域常用網站,分別觀察網域規則與 GEOIP 規則是否生效。
- 存取未寫入任何明確規則的境外網站,確認最終由
MATCH送入「漏網流量」。 - 切換「境外流量」中的節點,再次發起連線,確認策略組選擇能影響新連線。
測試時要建立新連線。已存在的 TCP、QUIC 或長連線可能繼續沿用舊路徑,切換策略組後不會立即遷移。關閉對應分頁或應用程式連線,再重新存取,結果會更可靠。瀏覽器也可能快取 DNS 或重複使用連線,必要時可在客戶端連線面板中關閉舊連線。
記錄中的規則名稱比「網頁能否開啟」更具診斷價值。網頁載入失敗可能來自節點、DNS、TLS、目標伺服器或網路鏈路;只有先確認命中規則與目標策略,才能判斷問題究竟位於規則層還是代理鏈路。
常見分流異常與排查順序
本地區域網站被送入代理
先查看連線記錄中的目標主機與命中規則。如果直接命中 MATCH,表示前面的網域集合與 GEOIP 都未涵蓋它。可為穩定網域新增 DOMAIN-SUFFIX 規則,或更新 GeoSite、GeoIP 資料。若連線記錄只顯示 IP,應檢查 DNS 模式、應用程式是否直接連線 IP,以及網域嗅探相關設定。
境外網站顯示直連
檢查是否存在範圍過寬的直連規則,例如過短的 DOMAIN-KEYWORD、錯誤的網域後綴,或提前出現的 MATCH,DIRECT。也要確認策略組目前是否手動選擇了 DIRECT。規則命中「境外流量」不一定代表使用代理,因為該策略組內部仍可能選中直連。
區域網路裝置無法存取
確認私有網段規則位於最終兜底之前,並檢查區域網路實際使用的位址段。常見家用網路多為 192.168.0.0/16,但辦公網路、虛擬網路與容器可能使用 10.0.0.0/8 或 172.16.0.0/12。如果透過裝置名稱存取,還需要確保本地 DNS、mDNS 或搜尋網域未受遠端解析路徑干擾。
訂閱更新後自訂規則消失
直接編輯訂閱產生的主設定時,客戶端更新訂閱通常會重新寫入檔案。應將自訂內容遷移至客戶端支援的覆寫、Merge 或腳本設定中;也可以將穩定規則放入自行維護的 rule-provider。建議維持以下更新順序:先更新訂閱節點,再載入覆寫,最後更新規則集並執行設定檢查。
規則正確但應用程式沒有連線記錄
這通常不是規則排序問題,而是流量沒有進入 Clash。檢查系統代理是否啟用、應用程式是否遵循代理設定、終端機是否設定代理環境變數,以及 TUN 模式是否成功啟動。使用 TUN 時還應檢查路由衝突、權限、其他 VPN 軟體與虛擬網卡狀態。先讓連線出現在面板中,再分析它命中的規則。
可維護設定的最終檢查清單
- 區域網路與回環位址規則位於區域規則之前。
- 具體網域規則位於寬泛關鍵字與 GEOIP 規則之前。
- 規則引用固定策略組,而不是容易變動的節點名稱。
MATCH只出現在規則清單末尾,並指向明確的兜底策略。- 網域規則集、IP 規則集的 behavior 與內容格式一致。
- IPv4、IPv6、DNS 模式與流量接管方式符合目前網路環境。
- 訂閱內容與個人覆寫分離,更新後能重新執行語法與命中測試。
區域分流沒有一套適用於所有網路的永久規則。更可靠的方法是先建立清晰的四層結構,再透過連線記錄補充少量例外。只要策略組命名穩定、規則順序清楚、兜底行為明確,即使訂閱節點與地理資料更新,設定也能維持較低的維護成本。