先分清主設定檔與規則提供者
Clash 設定中的 rules 通常直接列出網域、IP 位址及策略群組等比對項目。規則不多時,放在主設定檔裡較容易檢視;但當自訂清單逐漸增加,或需要多人協作、追蹤修改來源時,直接編輯同一份 YAML 會讓主設定檔變得冗長,也不容易判斷哪些規則已過時。
rule-providers 可以將規則清單拆成獨立檔案,再由主設定檔透過 RULE-SET 引用。規則清單可以由遠端 HTTP 位址取得,也可以放在本機檔案,或直接寫成內嵌內容。GitHub 等程式碼代管服務可用來協作、審查和保存規則版本;實際下載規則的工作則由 mihomo 核心依設定執行,不是由 GitHub 自動替用戶端更新。
規則提供者不是一份完整的 Clash 設定。提供者檔案只放規則項目,主設定檔仍須建立策略群組、宣告提供者並寫入引用規則。若把規則提供者 YAML 當成完整設定匯入,或在主設定檔只有提供者宣告卻沒有 RULE-SET,都不會得到預期的分流結果。
設定 rule-providers 與規則檔格式
以下範例展示遠端 YAML 規則清單的基本結構。示例網址使用保留用途的 example.net,無法直接下載;實際使用時,請換成能由用戶端所在網路存取的原始檔網址。路徑是核心存放下載檔案的位置,更新間隔以秒計算。
rule-providers:
work-sites:
type: http
behavior: domain
url: "https://rules.example.net/work-sites.yaml"
path: ./ruleset/work-sites.yaml
interval: 86400
format: yaml
rules:
- RULE-SET,work-sites,Proxy
- MATCH,DIRECT
主設定檔中的 Proxy 必須是已定義的策略群組名稱,並非固定關鍵字。若策略群組實際名稱是「手動選擇」,便應在 RULE-SET 第三個欄位使用完全相同的名稱。引用名稱 work-sites 也必須與 rule-providers 底下的鍵名一致。
type:http表示從網址取得規則,file表示讀取本機檔案,inline則用於在設定中直接提供規則內容。選擇遠端方式時,網址必須可存取,且回傳內容要符合指定格式。behavior:描述提供者內規則的比對類型。常見值包括domain、ipcidr及classical。它不是出站策略名稱,也不能用來代替Proxy或DIRECT。url與path:url是遠端來源;path是核心在本機使用的檔案路徑。請使用適合目前用戶端與系統的路徑寫法,並確認執行環境能建立或寫入該檔案。interval:以秒為單位指定遠端更新週期。範例中的86400約為一天;調低間隔不會讓規則比對更快,只會增加檢查更新的頻率。format:指定規則檔的表示格式,例如yaml或text。部分核心版本及規則類型也支援其他格式;使用前應確認目前執行的 mihomo 版本是否接受該組合。
domain 類清單通常放網域項目,ipcidr 類清單放 IP 或網段項目;classical 則用於完整規則項目,內容可依規則語法包含類型、匹配值及附加參數。檔案格式與 behavior 必須彼此相符:不能只把副檔名改成 YAML,就讓純文字清單自動變成另一種規則行為。
以 YAML 形式提供網域清單時,檔案常見結構如下;此內容是規則提供者資料,不是主設定檔:
payload:
- "example.org"
- "+.service.example"
- "shop.example.net"
不同 behavior 所接受的項目寫法並不相同。建立正式清單前,應以目前 mihomo 核心支援的規則語法為準,先用少量項目測試載入,再擴大清單。若來源採用純文字格式,也要確認每行是該類型所需的內容,而不是帶有額外標頭、註解格式或網頁錯誤訊息。
用 GitHub 建立可審查的規則維護流程
將規則放進 Git 儲存庫的價值,在於每次變更都能留下差異、提交時間和審查紀錄。建議將規則檔與說明文件分開整理,並以清楚的檔名區分用途,例如工作網域、廣告網域或特定地區網段。名稱應說明清單內容,避免使用「新規則」「測試版」等難以長期辨認的名稱。
- 先確認內容來源。為每組規則記錄維護者、上游來源、用途與授權條件。第三方清單可能包含過期項目,也可能有不同的收錄標準,不宜不經檢查就合併。
- 小批次修改。每次提交盡量只處理一類變更,並在說明中交代新增、刪除或修正的原因。如此較容易在連線受影響時找出造成差異的提交。
- 先檢查格式,再檢查效果。確認 YAML 縮排、欄位及清單項目符合目標格式;再使用正在執行的 mihomo 核心載入測試,避免只依文字編輯器沒有標紅就判定設定有效。
- 發布穩定版本或固定分支。提供者網址應指向可預期的原始檔內容,不要使用會隨意改名或刪除的臨時檔案。若追求變更可控,可使用經審查的固定分支或版本標籤;要讓最新提交自動生效,則需接受上游更新會改變用戶端所取得的內容。
- 將網址放入主設定檔。把遠端原始檔網址、相對應的本機
path與更新週期寫入rule-providers,再在rules中引用。公開清單不需要帳戶憑證;若下載必須帶秘密權杖,應重新評估是否適合交給用戶端持續存取。 - 更新後保留回退方式。記錄上次可用的規則版本或提交識別資訊。若新清單導致服務誤分流,可以回到前一版,並確認核心已重新取得或載入該版本。
遠端更新依賴用戶端可連線至規則網址。核心通常會在載入設定時取得提供者內容,之後依 interval 檢查更新;實際刷新時機、快取位置與錯誤處理方式,可能受核心版本和圖形用戶端管理方式影響。若本機使用的用戶端會產生或合併設定,請把自訂內容放在該用戶端支援的覆寫位置,避免直接修改更新後會被重新生成的檔案。
規則優先順序:提供者內與主設定檔各有順序
規則通常依主設定檔中的順序由上而下比對,命中較前面的規則後,就會採用該規則指定的策略。RULE-SET 是一條引用規則;它會依序檢查所引用的提供者內容。這表示維護分流時,不能只檢查規則檔本身,也要確認引用規則在整份 rules 中的位置。
rules:
- DOMAIN-SUFFIX,internal.example,DIRECT
- RULE-SET,work-sites,Proxy
- GEOIP,LAN,DIRECT
- MATCH,手動選擇
上述排列會先處理明確的內部網域,再檢查工作網域清單,之後才套用區域網路 IP 規則,最後由 MATCH 接收其餘流量。若把廣泛的網域清單放在特定例外之前,例外可能永遠沒有機會命中;若把 MATCH 放在中段,後面的規則通常就失去作用。
- 具體例外放前面:需要直連的內部服務或需要固定策略的特定網域,通常應放在較寬泛的規則集之前,並先確認例外的網域範圍是否過大。
- 避免清單互相遮蔽:同一網域若同時存在於兩份提供者,先命中的引用規則會決定出口。可刪除重複項目,或調整主設定檔中的引用順序。
- 保留收尾規則:
MATCH通常作為未命中前面規則時的最後處理方式,且其策略應符合預期。不要因為規則檔下載成功,就忽略最後一條規則會如何處理其他流量。 - 注意不解析選項:部分 IP 規則可使用
no-resolve等參數控制是否為網域進行解析。是否需要此選項取決於規則類型和 DNS 設計,不應為了消除錯誤訊息而隨意加到所有引用上。
規則提供者只負責提供匹配內容,不會自行決定所有流量的最終出口。真正的出站策略仍由主設定檔的規則和策略群組控制;即使規則集命中,若第三個欄位填入不存在或拼寫不同的群組名稱,核心仍可能報錯,或無法按預期建立設定。
更新與排錯:從下載、解析到命中逐層確認
出現規則沒有更新、規則數量為零,或流量走錯策略時,應一次只檢查一個環節。先看核心記錄和用戶端目前載入的設定,再分辨問題發生在遠端取得、檔案解析、規則引用還是實際連線判斷。單看介面顯示「已更新」不一定足以證明某一條目已被命中。
- 確認核心與設定版本。記下用戶端版本及實際執行的 mihomo 版本。若設定欄位在目前核心中不受支援,應先處理解析錯誤,不要直接改動整份規則清單。
- 檢查遠端取得結果。確認網址可從目前網路存取,並檢查回應是否為規則檔,而不是登入頁、拒絕存取頁或服務錯誤頁。HTTP 請求成功不代表回傳內容一定是有效規則。
- 確認快取路徑與寫入權限。檢查
path是否可用、目錄是否存在或可建立,以及執行核心的帳戶是否有權寫入。相對路徑的實際基準位置可能由用戶端的工作目錄決定,不能假設一定相對於 YAML 檔所在資料夾。 - 檢查格式與行為是否一致。核對
behavior、format和檔案內容。縮排錯誤、錯誤的payload結構、純文字中混入網頁標記,都可能讓提供者無法解析。 - 核對引用名稱和策略名稱。比較
RULE-SET中的提供者名稱與鍵名,並確認出站策略或策略群組存在。名稱大小寫、空格及標點都應保持一致。 - 確認規則排序與實際命中。在用戶端連線頁面或核心記錄中查看目標連線的命中規則和出站策略。若有更早的規則先匹配,應調整順序或縮小前置規則的範圍,而不是不斷重複下載同一份清單。
若遠端檔案已修正,但用戶端仍顯示舊結果,可先在應用程式中手動更新規則提供者,再依用戶端的設定重新載入或重啟核心。手動操作完成後,查看核心記錄是否顯示更新成功及解析錯誤。不要在尚未備份的情況下直接刪除所有快取;若核心離線期間規則檔不存在,設定可能暫時無法取得所需內容。
維護規則集的重點不是追求最短更新間隔,而是確保來源可信、內容可審查、格式可解析,且引用順序符合分流意圖。把主設定檔與可重用規則清單分開管理後,更新範圍更清楚,也更容易比較變更及回退。每次修改都應以實際命中結果驗證,尤其要確認重要網域、直連例外和最終兜底策略。