なぜルールベース分流が必要なのですか?
従来の VPN や「グローバルプロキシ」はすべてのトラフィックをトンネルに送るため、国内のサイトへのアクセスが遠回りになり、遅延が大きくなるだけでなく、プロキシトラフィックを無駄に消費するという結果になります。Clash シリーズクライアント ( Mihomo コアに基づく) のコアな利点は、まさにルールベース分流——ドメイン名、IP、地理的位置などの条件に基づいて、各データパケットが直結 (DIRECT)するかプロキシを経由する (PROXY)。
理想的な状態では、Taobao、Bilibili、銀行アプリは直結し、YouTube、Google、ChatGPT はプロキシを経由します。ローカルネットワークの NAS、プリンターは常に直結します。これにより、海外へのスムーズなアクセスを確保しつつ、国内での体験をネイティブのネットワーク速度に近づけることができます。この記事では、ルールの構文、一般的なタイプ、RULE-SET ルールセットから実践的な設定まで、体系的な分流の知識体系を構築するお手伝いをします。
ルールマッチングの原理:上から下へ、最初に一致したものが適用
Clash 設定ファイルの rules は順序付きリストです。各接続はリストの最初から順番に比較され、一致するとすぐに対応するアクション(直結、拒否、または特定のポリシーグループへの転送)を実行し、それ以上下へのマッチングを続けません。
したがって、ルールの順序は非常に重要です。より具体的で優先度の高いルールは前に配置する必要があります。広範なフォールバックルール(例えば GEOIP,CN,DIRECT、MATCH,PROXY)はリストの末尾に配置する必要があります。プロバイダのサブスクリプションは通常すでにソートされており、上級ユーザーは上書き (Merge)を使用してリストの先頭または末尾にカスタムエントリを追加するだけで済みます。
rules:
- DOMAIN-SUFFIX,local,DIRECT # ローカルネットワーク直結
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- RULE-SET,cn,DIRECT # ルールセット:国内直結
- RULE-SET,gfw,PROXY # ルールセット:壁越えプロキシ経由
- GEOIP,CN,DIRECT # 中国本土 IP フォールバック直結
- MATCH,PROXY # フォールバック:その他すべてプロキシ経由
よく使用されるルールタイプの詳細
Mihomo は複数のルールタイプをサポートしています。これらのマッチング範囲を理解することは、優れた分流ロジックを記述するための基礎です。
| ルールタイプ | 構文例 | マッチングの説明 |
|---|---|---|
DOMAIN |
DOMAIN,google.com,PROXY |
完全なドメイン名を正確に一致させる |
DOMAIN-SUFFIX |
DOMAIN-SUFFIX,google.com,PROXY |
ドメイン名とそのすべてのサブドメインに一致(最もよく使われる) |
DOMAIN-KEYWORD |
DOMAIN-KEYWORD,google,PROXY |
ドメイン名にキーワードが含まれていれば一致(誤検知しやすいため注意して使用) |
IP-CIDR |
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve |
ターゲット IP の範囲で一致;no-resolve は DNS 解析を行わないことを示す |
GEOIP |
GEOIP,CN,DIRECT |
GeoIP データベースに基づいて IP の所属国/地域を判断する |
RULE-SET |
RULE-SET,cn,DIRECT |
外部ルールセット(ドメイン名/IP の一括リスト)を引用する |
MATCH |
MATCH,PROXY |
フォールバックルール、必ず最後に配置する必要がある |
DOMAIN と DOMAIN-SUFFIX の選択
日常的に単一サイトのルールを追加する場合、優先的に DOMAIN-SUFFIXを使用します。例えば、 DOMAIN-SUFFIX,github.com,PROXY は、 github.com、api.github.com、raw.githubusercontent.com などにも同時に一致します。特定のホスト名を正確に限定する必要がある場合にのみ、 DOMAIN。
IP-CIDR とローカルネットワーク直結
TUN モードを有効にした後、NAS やプリンターなどの内部ネットワークデバイスにアクセスする際は、ルールに一般的なプライベートネットワーク範囲の直結が含まれていることを必ず確認してください:
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
MATCH より前にあるかを確認してください。高品質なプロバイダのサブスクリプションには通常組み込まれていますが、ない場合は上書きで追加してください。
GEOIP と国内直結
GEOIP,CN,DIRECT は「国内直結」の古典的なフォールバックです。ターゲット IP が GeoIP データベースによって中国本土と判定された場合、トラフィックはプロキシを経由しません。前述の国内ドメイン名のルールセットと組み合わせることで、国内アクセスのシナリオの大部分をカバーできます。
注意事項:GeoIP はドメイン名ではなく IP の所属に基づいています。一部の CDN ノードは海外のドメイン名を国内の IP に解決し、意図せず直結してしまう可能性があります。逆に、海外の IP を使用する一部の国内サービスが誤判定される可能性もあります。個別のサイトで異常が発生した場合は、 DOMAIN-SUFFIX を使用してポリシーグループを明示的に指定することで、GeoIP の結果を上書きできます。
RULE-SET:ルールセットを使用して膨大なドメイン名を管理する
何千何万ものドメイン名を手動で管理するのは現実的ではありません。Mihomo の RULE-SET は外部ルールファイル(通常は GitHub またはプロバイダの CDN でホストされている)の参照を許可し、ドメイン名/IP リストを一括で読み込みます。設定ファイルではまず rule-providersを宣言し、その後 rules で参照する必要があります。
rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
gfw:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt"
path: ./ruleset/gfw.yaml
interval: 86400
cn:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cn.txt"
path: ./ruleset/cn.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,gfw,PROXY
- RULE-SET,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
コミュニティで一般的に使用される Loyalsoldier/clash-rules ルールセットはドメイン名を cn(国内)、gfw(壁越え)、reject(広告ブロック) などのカテゴリに分類しており、Mihomo との互換性も良好です。プロバイダのサブスクリプションには、多くの場合、同様のルールが組み込まれているため、ユーザーが再度設定する必要はありません。自作のサブスクリプションや軽量化されたサブスクリプションを作成する場合は、上記の構造を参考にすることができます。
interval はルールセットの自動更新周期 (秒) を制御します。 86400 に設定すると1日1回取得し、GFW リストと新しく追加されたドメイン名の同期を保証します。初回読み込み時はインターネット接続が必要です。オフライン環境では代わりに type: file ローカルルールファイルを使用してください。
ポリシーグループ:ルールとノードの架け橋
ルールリストの3列目(例えば PROXY、DIRECT、REJECT)は組み込みアクションでもよく、ポリシーグループ名でもかまいません。ポリシーグループ (proxy-groups) は、「プロキシを経由する際に、具体的にどのノードまたはどのノードグループを使用するか」を決定します。
- select:ノードを手動で選択します。「ノード選択」メイングループに適しています。
- url-test:遅延に基づいて最も速いノードを自動選択します。「自動選択」に適しています。
- fallback:順番に試行し、メインノードが失敗した場合はバックアップに切り替えます。
- load-balance:ロードバランシング、接続の負荷を分散させます。
ルール RULE-SET,gfw,PROXY の PROXY は、多くの場合、単一のノードではなく「PROXY」または「ノード選択」という名前のポリシーグループを指します。ルールファイルを変更することなく、クライアントの「プロキシ」ページでそのグループ内の特定のノードを切り替えることができます。
DNS と分流の連携
ルールのマッチングは DNS 解析後(または IP ルールの場合は IP に直接マッチング)に行われます。Mihomo でよく使われる fake-ip モード:ドメイン名に偽の IP を割り当て、接続時に実際のターゲットを復元することで、ルールの判定を高速化し、DNS リークを減らします。個別のサイトで解析異常が発生した場合は、 dns.enhanced-mode を redir-hostに変更するか、上書きで特定のドメイン名に nameserver。
分流ロジックと DNS は互いに影響を与えます。例えば GEOIP,CN,DIRECT は正しい IP がないと機能しません。DNS が汚染されて間違った IP が返された場合、国内のサイトが誤ってプロキシを経由する可能性があります。 dns.fake-ip-filter を使用してローカルネットワークのドメイン名を除外したり、 nameserver-policy を有効にして特定のサフィックスに DoH/DoT を指定したりすることは、高度なチューニングの一般的な手段です。
上書き設定:サブスクリプションを変更せずにルールを微調整する
プロバイダのサブスクリプションでは、通常リモートの YAML を直接編集することは許可されていませんが、Clash Verge Rev などのクライアントは上書き (Merge)をサポートしています。サブスクリプションの上にローカルフラグメントを重ね、サブスクリプションの更新で上書きされることなくルールを追加できます。
単一ドメイン名をプロキシグループに追加する
prepend-rules:
- DOMAIN-SUFFIX,example.com,PROXY
- DOMAIN-SUFFIX,blocked-site.org,PROXY
prepend-rules ルールをリストの先頭に挿入し、サブスクリプション内のルールよりも優先して照合させます。特定の国内ドメイン名を強制的に直結させたい場合 (gfw ルールセットを上書き) にも、同様に prepend-rules を使用して追加できます DOMAIN-SUFFIX,xxx.com,DIRECT。
ローカルネットワークとカスタム直結を追加する
prepend-rules:
- DOMAIN-SUFFIX,nas.home,DIRECT
- IP-CIDR,192.168.1.0/24,DIRECT,no-resolve
推奨される分流構造(ベストプラクティス)
コミュニティの経験を総合すると、速度とメンテナンス性のバランスが取れたルールの順序は、おおよそ以下のようになります:
- ローカルネットワークとローカルドメイン名 →
DIRECT - 広告/トラッキングドメイン名 →
REJECT(オプション) - ストリーミング、ゲームなどの専用ポリシーグループ (サブスクリプションで提供されている場合)
- 壁越えサイトのルールセット → メインプロキシポリシーグループ
- 国内ドメイン名のルールセット →
DIRECT GEOIP,CN,DIRECTMATCH,PROXYまたはMATCH,自動選択
MATCH,DIRECT をデフォルトのフォールバックにすることはお勧めしません。一致しない海外サイトが直結になり、プロキシが必要なネットワーク環境ではアクセスできないことが多いためです。多くの「帰国」または「出国」テンプレートでは MATCH,PROXY を採用する方が安全です。
デバッグとトラブルシューティング:ルールが有効かどうかを確認する方法
- クライアントで「接続」または「ログ」ページを開き、ターゲットウェブサイトにアクセスして、リアルタイムの接続と一致したルール名を観察します。
-
DIRECTと表示されているが、プロキシを経由させたい場合は、そのドメイン名がcnルールセットまたはGEOIP,CNによって事前に照合されていないか確認します。 - 一時的にグローバルモードに切り替える:グローバルでアクセスでき、ルールモードでアクセスできない場合は、ルールでカバーされていないことを意味するため、上書きで
DOMAIN-SUFFIXを追加すれば解決します。 -
nslookupまたはオンラインの DNS クエリを使用して、ドメイン名から解決された IP が GeoIP の想定と一致しているか確認します。
よくある質問
ルールモードとグローバルモードの違いは何ですか?
ルールモードは rules リストに基づいてルーティングし、国内は直結、海外はプロキシを経由するため、日常的に推奨されます。グローバルモードは、ローカルネットワークなどの特別なルールを除き、すべてプロキシを経由するため、一時的なトラブルシューティングやルールでカバーされていないサイトへのアクセスに適しています。
なぜ Bilibili/Taobao が遅いのですか?プロキシを経由しているように見えます。
送信モードが「ルール」であるか確認してください。接続ページで国内サイトにアクセスした際のルールが DIRECTになっているか確認します。もし誤って PROXYになっている場合は、 cn ルールセットが読み込まれていないか、DNS が海外の IP に解決されている可能性があります。 DOMAIN-SUFFIX,bilibili.com,DIRECT などの明示的なルールで上書きできます。
RULE-SET の更新に失敗した場合はどうすればいいですか?
ルールセットの URL にアクセス可能である必要があります(一部の CDN は特定のネットワーク下で不安定になります)。ミラーアドレスに変更するか、 type: file ローカルコピーを使用するか、サブスクリプション変換時にルールセットを設定に組み込むことができます。詳細は、当サイトの今後の「サブスクリプション変換」関連チュートリアルをご覧ください。
GEOIP だけを使用し、RULE-SET を使用しないことは可能ですか?
可能ですが、体験は悪くなります。GeoIP は「ドメイン名は海外だが、国内の CDN に解決される」といった複雑な状況を認識できず、初回接続時は IP 解決が完了するまで待つ必要があります。RULE-SET + GEOIP の組み合わせはより正確であり、プロバイダのサブスクリプションの主流な方法です。
ルールベース分流を習得して初めて、Clash は真の「オンデマンドルーティング」の価値を発揮します。国内での体験を損なうことなく、海外へのアクセスを保証し、トラフィックとプライバシーも制御できます。すぐに使えるルーティングテンプレートやワンクリック上書きをご希望の場合は、当サイトの クライアントダウンロードページ から Mihomo ルールシステムが統合された Clash クライアントを入手し、YAML を手書きする時間的コストを削減できます。