対象を確認:サブスクリプションの直接編集ではなくOpenClashの上書きです
この記事は、OpenClashでカスタムルーティングルールを1本追加する手順に限定します。対象はOpenWrt LuCI、OpenClash安定版 v0.47.156、Mihomoコアです。Clash for Windows、Clash Verge Rev、FlClash、単独Mihomoの画面にはそのまま適用できません。
検証前にプロキシモードを rule にします。Mihomoはruleモードで通常のルールを上から順に照合します。global と direct では、カスタムルールのヒットを確認できません。OpenClash v0.47.156の英語UIでは「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 直前、さらにない場合は2文字の国コードを持つ最初の GEOIP 直前、いずれもなければ末尾 | サブスクリプション前半の詳細ルールを残す追加 |
v0.47.156のポートアンカーは部分文字列で判定されます:DST-PORT,8080 も DST-PORT,80 を含むためアンカーになる場合があります。GEOIP へのフォールバックは GEOIP,CN,... のような2文字の国コードを持つルールだけが対象です。アップグレード後は統合順を再確認してください。
拡張が常に MATCH の後ろに入るという意味ではありません。スクリプトは元のサブスクリプション内のアンカーを先に記録します。最初に一致したルールが使われるため、優先領域に広範囲な MATCH や FINAL を置かないでください。
まず検証できる優先ルールを1本追加します
次の例は、特定のホスト名への通信を DIRECT にします。app.example.net はプレースホルダーなので、接続ログで確認した実際のホスト名に置き換えます。DIRECT はMihomoの組み込み処理です。
OpenClash 優先ルールrules:
- DOMAIN,app.example.net,DIRECT
- 変更前の現象を再現し、ホスト名、一致したルール、選択グループを記録します。
- 後述のコマンドで2つのカスタムファイルをバックアップします。まだない場合は、スイッチが無効で空欄だったことを記録します。
- カスタムルールを有効にし、上記YAMLを
Priority領域に貼り付けます。 - 半角スペース2個のインデントを保ち、DNS、Fake-IP、サブスクリプション、モードを同時に変更しません。
Apply Settingsを1回押し、保存と検証用の再起動を行います。
ルールの対象名は実在するものに限られます:末尾フィールドは 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,...のような2文字の国コードを持つ最初のルールと照合します。 - 実通信のログを確認します。より上のサブスクリプションルールが先に一致した場合、拡張項目は実行されません。これは正常な順序であり、保存エラーではありません。
拡張は統合後の位置で判定します:編集欄に文字があるだけでは不十分です。ルール順と実際の接続を確認します。
適用後は起動ログ、統合順、実通信を別々に確認します
v0.47.156の英語UIで Commit Settings はフォームとカスタムファイルを保存するだけで、OpenClashを再起動しません。Apply Settings は保存後にOpenClashを有効化して再起動します。すぐ検証するならApplyを1回押せばよく、先にCommitを押す必要はありません。
- OpenClashが稼働中に戻ったら、起動ログのYAML、ルール、グループに関する最初のエラーを確認します。
- 実行用設定またはルール一覧で
DOMAIN,app.example.net,DIRECTの位置を確認します。 - 実際の端末から対象のホスト名へアクセスし、接続ログのルール種別、値、最終処理経路を照合します。
- 関係のないサイトも試し、残りのサブスクリプションルールが従来どおりか確認します。
ファイルの保存成功だけでは読み込みを証明できず、実行用YAMLに存在するだけでは実通信のヒットを証明できません。3段階が一致して完了です。
ルールが効かないときはモードとYAMLから確認します
| 現象 | 最初の確認 | 対処 |
|---|---|---|
| 保存後も変化しない | Commit Settings だけを押したか | 短時間の切断が許容できるときに Apply Settings を実行 |
| ルールはあるがヒットしない | rule モードと、上にある先行ルール | ruleに戻し、完全なホスト名1つで検証 |
| YAMLエラー | インデント、コロン、リスト記号 | 付属テンプレートに戻し、rules項目を1つだけ追加 |
| Group & Proxy Not Found | 末尾名と大文字小文字 | 実在するグループまたは対応済みルール対象を使用 |
RULE-SET が効かない | providerの定義、取得結果、behavior | 先に DOMAIN で経路を証明し、providerを別途追加 |
2つのYAMLは rule-providers と sub-rules も定義できますが、同名定義は統合時に上書きされる危険があります。最終YAMLと照合せずに、ネットで見つけた大きなprovider設定を両方へ貼らないでください。この単一ホスト検証にproviderは不要です。
一度に1項目だけ変更:ルールがヒットしないときに、コア、DNS、Fake-IP、ノード、サブスクリプションを同時に変えないでください。モード、YAML、ルールの対象名、ホスト名の順に固定します。
2つのカスタムファイルをバックアップし、切り戻し手順を残します
初回編集前にSSHで2ファイルをバックアップできます。次のコマンドはソースが存在するときのみコピーしますが、同名の .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で元のテキストを戻すかカスタムルールを無効にする方法でも切り戻せます。その後 Apply Settings で実行用設定を再生成します。SSHでバックアップを戻した場合は、LuCIを再読み込みして内容を確認してから適用し、古いフォームによる再上書きを防ぎます。サブスクリプションの削除や、生成済み一時YAMLの長期的な直接編集は不要です。
完了条件:YAMLが解析でき、挿入位置が優先/拡張の意図と合い、ルールの対象名が存在し、OpenClashが正常に再起動し、実通信が予定した処理または経路を使い、元の2ファイルを復元できる状態にします。
OpenClashやMihomo関連クライアントの対応環境は、サイトのダウンロードページで確認できます。クライアントの入れ替えは、ルール順と接続ログの確認の代わりにはなりません。
公式情報源とバージョン範囲
- OpenClash v0.47.156 公式リリース
- OpenClash v0.47.156 上書き画面のソース
- OpenClash v0.47.156 公式簡体字中国語UI翻訳
- OpenClash v0.47.156 カスタムルール統合処理のソース
- OpenClash v0.47.156 優先カスタムルールのテンプレート
- OpenClash v0.47.156 拡張カスタムルールのテンプレート
- Mihomo 公式ルーティングルール文書
- Mihomo 公式の基本設定文書
バージョン番号、ファイル名、画面表示は更新で変わる場合があります。作業前にリンク先の公式資料を確認してください。