先確認適用範圍:這是 OpenClash 覆寫,不是直接改訂閱

本文只處理「在 OpenClash 加入一條自訂路由規則」。步驟以 OpenWrt LuCI、OpenClash v0.47.156 穩定版與 Mihomo 核心為準,不可直接套用到 Clash for Windows、Clash Verge Rev、FlClash 或獨立 Mihomo 設定。

開始前先將代理模式設為 rule。Mihomo 在 rule 模式才會由上到下匹配一般規則,global 或 direct 無法用來驗證這條規則是否生效。OpenClash v0.47.156 原始英文介面路徑是「Services → OpenClash → Overwrite Settings → Rules Setting」;啟用「Custom Clash Rules」後會看到 (Priority) 與 (Extended)。相鄰選單文字可能隨 LuCI 語言套件而變,但不要把兩個區域的名稱互換。

覆寫不是直改訂閱:OpenClash 啟動時會將內容注入臨時執行 YAML,不會直接把這條規則寫入原訂閱檔。因此訂閱更新後,自訂規則仍應從覆寫入口維護。

優先與擴展的差別,在於最後插入位置

兩個區域都儲存 YAML,但合併位置不同。官方範本建議保留頂層 rules:,也能在同一物件定義 rule-providers: 或 sub-rules:。v0.47.156 也接受直接以列表開頭的根 YAML 陣列,但該寫法只能放規則。rule-providers 必須使用物件結構,並同時保留陣列型態的 rules(可為空);sub-rules 也要放在物件結構中,但不要求同時存在 rules。新設定仍宜沿用官方範本。

區域儲存檔案v0.47.156 合併位置適合用途
優先(Priority)/etc/openclash/custom/openclash_custom_rules.list插入最終 rules 頂端必須早於訂閱規則匹配的精確例外
擴展(Extended)/etc/openclash/custom/openclash_custom_rules_2.list先放在原規則中最後一個含 DST-PORT,80 的項目前;否則放在首條 MATCH/FINAL 前,再否則放在首條兩碼國別的 GEOIP 規則前;都沒有才追加到末尾保留訂閱前半部細分規則的補充項

v0.47.156 的連接埠錨點是字串匹配:DST-PORT,8080 也可能因包含 DST-PORT,80 而被視為錨點;GEOIP 回退只辨識類似 GEOIP,CN,... 的兩碼國別規則。升級後要重新核對執行規則順序。

擴展規則並不是總會出現在 MATCH 後面。腳本會先記住原訂閱的錨點,再插入自訂項。由於規則從上往下、首次命中就停止,優先區只適合範圍明確的規則,不要加入寬鬆的 MATCH 或 FINAL。

先加入一條可驗證的優先規則

以下只示範一條完整網域直連規則。app.example.net 是佔位名稱,必須換成連線記錄中確認的真實主機名。DIRECT 是 Mihomo 內建出口,可先排除代理組不存在的干擾。

OpenClash 優先規則rules:
  - DOMAIN,app.example.net,DIRECT
  1. 在原設定下重現現象,記錄網域、當前命中規則與策略組。
  2. 按文末方法備份兩份自訂檔案;檔案未建立時,記錄開關關閉與編輯區為空。
  3. 開啟自訂規則,將上面 YAML 貼到 Priority 區。
  4. 確認兩個空格縮排保留,且不同時改 DNS、模式或訂閱。
  5. 點擊 Apply Settings 完成一次重啟與測試。

規則目標必須存在:最後一欄必須是 DIRECT、REJECT、GLOBAL、REJECT-DROP、PASS、COMPATIBLE 等支援的內建目標,或精確符合目前代理組、代理、子規則名稱。這些目標不全是網路出口,例如 PASS 會繼續匹配後續規則,REJECT 會拒絕請求。目標不存在時會略過該規則,並記錄 Skiped The Custom Rule Because Group & Proxy Not Found。

需要保留訂閱前半部順序時,才使用擴展規則

擴展區適合先由訂閱的細分規則匹配,再以自訂項補足缺口。以下是獨立測試,不要與前一節的優先項同時使用;updates.example.net 也要換成真實網域。

OpenClash 擴展規則rules:
  - DOMAIN-SUFFIX,updates.example.net,DIRECT
  1. 先移除前一節的優先測試項,其他變數保持不變。
  2. 將 YAML 貼入 Extended 區,點擊 Apply Settings。
  3. 在執行規則中找到該條,對照原訂閱中最後一個含 DST-PORT,80 的項目、首條 MATCH/FINAL,或首條類似 GEOIP,CN,... 的兩碼國別規則。
  4. 發出真實請求並核對記錄。如果訂閱中更靠前的規則已命中,擴展項不會再執行,這是正常順序,不是儲存失敗。

擴展區要用最終位置判斷:光看編輯框內容不夠,還要核對執行規則順序與一次實際連線。

套用後同時核對啟動記錄、最終規則與真實請求

v0.47.156 英文原始按鈕的 Commit Settings 只儲存表單與自訂檔案,不會重啟 OpenClash;Apply Settings 會儲存、啟用並重啟。要立即測試時,只需點一次 Apply,無須事先再點 Commit。

  1. 等待 OpenClash 回到執行狀態,先找啟動記錄中第一個 YAML、規則或策略組錯誤。
  2. 在執行設定或規則清單確認 DOMAIN,app.example.net,DIRECT 出現在預期位置。
  3. 從一台真實裝置開啟完整網域,核對連線記錄的規則類型、規則值與最終處理路徑。
  4. 再測試一個不匹配的網站,確認訂閱的其他分流沒有受影響。

檔案已儲存不代表規則正在執行,出現於執行設定也不代表實際請求已命中。啟動記錄、最終順序與實際連線都符合,才算完成驗證。

規則未生效時,從模式與 YAML 開始排查

現象優先檢查處理方向
儲存後無變化是否只點 Commit Settings在可接受短暫斷線時點 Apply Settings
規則存在卻不命中是否為 rule 模式,上方是否已有命中項切回 rule,以完整網域進行單變數測試
YAML 剖析錯誤縮排、冒號與列表短橫線還原官方範本,只加一條 rules 項
Group & Proxy Not Found最後一欄名稱與大小寫改用當前設定已存在的規則目標
RULE-SET 失效provider 是否定義、下載成功且 behavior 相容先用 DOMAIN 證明路徑,再單獨引入 provider

兩份 YAML 雖能定義 rule-providers 與 sub-rules,但同名定義有覆蓋風險。無法對照最終 YAML 時,不要把網上整段 provider 設定同時貼入優先與擴展區。本文的單網域測試不需要 provider。

一次只改一項:優先規則不命中時,不要同時更換核心、DNS、Fake-IP、節點與訂閱。先確認模式、YAML、規則目標與網域。

備份兩份自訂檔案,保留明確還原路徑

首次修改前可用 SSH 備份兩個檔案。下列指令只在來源檔存在時複製,但會覆寫同名 .bak;如已有備份,請另用新檔名。

OpenWrt Shelltest -f /etc/openclash/custom/openclash_custom_rules.list &&   cp /etc/openclash/custom/openclash_custom_rules.list /root/openclash_custom_rules.list.bak
test -f /etc/openclash/custom/openclash_custom_rules_2.list &&   cp /etc/openclash/custom/openclash_custom_rules_2.list /root/openclash_custom_rules_2.list.bak

確認備份內容正確後,可用下列指令將存在的備份複製回原路徑:

OpenWrt Shell · 還原test -f /root/openclash_custom_rules.list.bak &&   cp /root/openclash_custom_rules.list.bak /etc/openclash/custom/openclash_custom_rules.list
test -f /root/openclash_custom_rules_2.list.bak &&   cp /root/openclash_custom_rules_2.list.bak /etc/openclash/custom/openclash_custom_rules_2.list

還原時也可在 LuCI 復原原文,或關閉「Custom Clash Rules」,再點 Apply Settings 重建執行設定。若用 SSH 復原備份,複製後先重新載入 LuCI 核對文字,再套用,避免舊表單反過來覆寫檔案。不需刪除訂閱,也不應直改啟動後產生的臨時 YAML 作為長期做法。

完成標準:YAML 語法正確,規則位置與優先/擴展選擇一致,規則目標存在,OpenClash 正常重啟,真實請求走預期處理路徑,而且兩份原文都能復原。

如需查看 OpenClash、Mihomo 相關平台與用戶端,可使用本站下載頁面;更換用戶端不能取代規則順序與記錄驗證。

官方來源與版本邊界

版本號、檔案名稱與介面文字可能隨專案更新而變動,操作前請以連結中的專案文件為準。