Clash ルール分流実践:中国本土直結・海外プロキシの設定と優先順位の調べ方
実際の rules 設定を例に DOMAIN-SUFFIX、GEOIP、MATCH の照合順序を解説し、最小構成の分流ルールと、ルールが効かない時の調査手順を示します。
実際の rules 設定を例に DOMAIN-SUFFIX、GEOIP、MATCH の照合順序を解説し、最小構成の分流ルールと、ルールが効かない時の調査手順を示します。
分流を行わない設定には、全プロキシ経由と全直結という2つの極端しかありません。全プロキシ経由にすると中国本土のサイト(銀行、行政サービス、一部の動画サイトなど)へのアクセスが遅くなり、時にはリスク管理システムに引っかかることもあります。逆に全直結ではプロキシを使う意味がありません。ルール分流の役割は、Clash が接続を開始するたびに接続先のドメインや IP がどの分類に属するかを判断し、直結・プロキシ経由・拒否のいずれかを決めることです。この判断はすべて rules セクションによって駆動されるため、ルールを合理的に書くほど「通すべきものは通す、直結すべきものは直結する」という体感に近づきます。
Clash コア(および現在活発にメンテナンスされている Clash Meta / mihomo コア)はルールを処理する際、上から順に1行ずつ照合していきます。最初に一致した時点でそのルールの動作が即実行され、以降のルールは判定に関与しません。つまりルールの順序そのものがロジックであり、順序を逆にすると後ろにある細かいルールは意味を持たなくなります。
典型的な rules セクションでは複数の照合タイプが混在します。よく使われるものとその意味は次の通りです。
DOMAIN-SUFFIX,google.com は www.google.com や mail.google.com など、その末尾を持つすべてのドメインに一致します。GEOIP,CN,DIRECT は接続先 IP が中国大陸に属する場合に直結する設定です。このルールは内蔵または外部の GeoIP データベースに依存し、判定はドメイン解決の後に行われます。重要なのは、ドメイン系ルール(DOMAIN-SUFFIX/DOMAIN-KEYWORD)は DNS 解決前に判定できるため高速ですが、GEOIP 系ルールは先に IP を解決してから判定する必要があるため、通常はドメイン系ルールより後に置くという点です。GEOIP,CN,DIRECT を最前列に置けば中国本土 IP を優先的に直結できますが、その分すべてのリクエストが解決を完了するまで判定を待つことになり、速度優先の場面には向きません。ドメイン系ルールの後、MATCH の前に置くのが、よりバランスの取れた方法です。
以下は、そのまま理解して必要に応じて追加できる最小構成の分流ルールです。「中国本土直結、海外プロキシ、LAN 直結、兜底プロキシ」という4つの基本シナリオをカバーしています。
rules:
# LANおよび内部アドレスは直結
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
# よく使う中国本土ドメインは直結
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,alipay.com,DIRECT
# プロキシが必要な代表的なドメイン
- DOMAIN-SUFFIX,google.com,PROXY
- DOMAIN-SUFFIX,youtube.com,PROXY
- DOMAIN-SUFFIX,github.com,PROXY
# IPの帰属地による兜底判定
- GEOIP,CN,DIRECT
# 上記のいずれにも一致しない場合は全てプロキシへ
- MATCH,PROXY
ここでの PROXY はポリシーグループ名で、proxy-groups セクションで事前に定義しておく必要があり、通常はサブスクリプションのノードや手動選択のポリシーグループを指します。DIRECT はコアに内蔵された直結ポリシーで、追加定義は不要です。ルールの順序は上に挙げた4つのシナリオに厳密に対応し、「正確・低コスト」から「広範・高コスト」の順に並んでいます。これはルール集を書く上での一般原則でもあります。
DOMAIN-SUFFIX を数十行手書きするのは個人利用なら間に合いますが、国内外の完全なサイトリストをカバーすることはできません。実運用では、ルールセット(RULE-SET)を参照する方法がより一般的です。大量のドメイン・IP を外部ファイルにまとめて管理し、ルールセクションには参照だけを書きます。
rule-providers:
cn-domains:
type: http
behavior: domain
url: "https://example.com/rules/cn-domains.txt"
path: ./rules/cn-domains.yaml
interval: 86400
rules:
- RULE-SET,cn-domains,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
ルールセットは interval で指定した秒数ごとに自動で更新され、ドメインを1件ずつ手動で更新する必要はありません。behavior フィールドはルールセットの内容の解析方式(domain / ipcidr / classical)を決め、ルールセットファイル自体の形式と対応させる必要があります。設定を誤ると読み込みに失敗しますが、必ずしも明確なエラーが出るわけではないため、ルールが効かない原因の調査で見落とされやすいポイントです。
ルールを書き終えた後、接続の挙動が想定と異なる場合は、次の順序で一つずつ確認していくと効率的です。
ルール内で参照している PROXY、DIRECT などのポリシー名は、proxy-groups で定義した name と完全に一致していなければなりません(大文字小文字も含む)。名前が一致しない場合、クライアントによって挙動が異なり、エラーを出すものもあれば、黙ってデフォルトポリシーにフォールバックするものもあるため、「ルールが効いていない」と誤判断しやすい部分です。
DOMAIN-KEYWORD や GEOIP のルールが前に置かれていると、精密な DOMAIN-SUFFIX ルールに処理が回ってくることは永久にありません。疑わしいルールを一時的に最前列に移して試すと、順序の問題かどうかを素早く確認できます。
GEOIP 系ルールは解決された IP に依存するため、クライアントで fake-ip モードを使っていたり海外の DNS を利用していたりすると、解決結果が実際の帰属地と食い違い、GEOIP,CN の判定が効かなくなることがあります。クライアントの接続ログやルールヒット記録で、実際にどのルールに一致したかを確認できます。
RULE-SET を使う場合、外部 url へのアクセスに失敗したり形式解析にエラーが出たりすると、ルールセットは空のまま読み込まれ、その参照は実質無効化されます。以降の通信はすべて兜底の MATCH に一致することになります。クライアントの起動ログやルールセットの更新状態を見れば確認できます。
一部のクライアントは複数の設定を切り替えられるため、編集したのが控え用のプロファイルで、現在有効なのは別のものだった場合、変更内容が反映されないのは当然です。現在アクティブな設定ファイルのパスを確認することは、見落としやすいものの最も多い原因です。
ルールセットは一度書いたらそれで終わりというものではなく、長く使える習慣がいくつかあります。精密なルールを前に、広範なルールを後ろに置くことで誤判定を減らせます。LAN や内部ネットワークセグメントのルールは常に最前列に置き、ローカルサービスが誤ってプロキシ経由になるのを防ぎます。GEOIP,CN,DIRECT は通常、ドメイン系ルールの後、MATCH の前に置き、中国本土 IP に対する主判定ではなく兜底として使います。クロスボーダーの業務や決済など特殊なドメインが関わる場合は、GEOIP の分類だけに頼らず、直結かプロキシかを個別に明記することをお勧めします。サービスによっては IP の帰属地と実際の運営地域が一致しないことがあるためです。ルールセットの価値は使い込むほど高まるので、定期的に接続ログを見返し、頻繁に MATCH で兜底判定されているドメインを明確なルールに追加していくと、分流はどんどん精密になっていきます。
ルール分流を設定する前に、対応プラットフォームでクライアントをインストールし、サブスクリプションの取り込みを済ませてください。