先確認適用範圍:這是 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
- 在原設定下重現現象,記錄網域、當前命中規則與策略組。
- 按文末方法備份兩份自訂檔案;檔案未建立時,記錄開關關閉與編輯區為空。
- 開啟自訂規則,將上面 YAML 貼到
Priority區。 - 確認兩個空格縮排保留,且不同時改 DNS、模式或訂閱。
- 點擊
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
- 先移除前一節的優先測試項,其他變數保持不變。
- 將 YAML 貼入
Extended區,點擊Apply Settings。 - 在執行規則中找到該條,對照原訂閱中最後一個含
DST-PORT,80的項目、首條MATCH/FINAL,或首條類似GEOIP,CN,...的兩碼國別規則。 - 發出真實請求並核對記錄。如果訂閱中更靠前的規則已命中,擴展項不會再執行,這是正常順序,不是儲存失敗。
擴展區要用最終位置判斷:光看編輯框內容不夠,還要核對執行規則順序與一次實際連線。
套用後同時核對啟動記錄、最終規則與真實請求
v0.47.156 英文原始按鈕的 Commit Settings 只儲存表單與自訂檔案,不會重啟 OpenClash;Apply Settings 會儲存、啟用並重啟。要立即測試時,只需點一次 Apply,無須事先再點 Commit。
- 等待 OpenClash 回到執行狀態,先找啟動記錄中第一個 YAML、規則或策略組錯誤。
- 在執行設定或規則清單確認
DOMAIN,app.example.net,DIRECT出現在預期位置。 - 從一台真實裝置開啟完整網域,核對連線記錄的規則類型、規則值與最終處理路徑。
- 再測試一個不匹配的網站,確認訂閱的其他分流沒有受影響。
檔案已儲存不代表規則正在執行,出現於執行設定也不代表實際請求已命中。啟動記錄、最終順序與實際連線都符合,才算完成驗證。
規則未生效時,從模式與 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 相關平台與用戶端,可使用本站下載頁面;更換用戶端不能取代規則順序與記錄驗證。
官方來源與版本邊界
- OpenClash v0.47.156 官方 Release
- OpenClash v0.47.156 覆寫介面原始碼
- OpenClash v0.47.156 官方簡體中文介面翻譯
- OpenClash v0.47.156 自訂規則合併原始碼
- OpenClash v0.47.156 優先自訂規則範本
- OpenClash v0.47.156 擴展自訂規則範本
- Mihomo 官方路由規則文件
- Mihomo 官方基礎設定文件
版本號、檔案名稱與介面文字可能隨專案更新而變動,操作前請以連結中的專案文件為準。