Clash ルーティング実践:ドメインと GeoIP で精密な振り分けを実現

日本国内サイトは直接接続、海外サイトはプロキシ経由という典型的なシナリオを例に、DOMAIN-SUFFIX、GEOIP、RULE-SET などのルールタイプの書き方、マッチング順序と優先度を解説。すぐに使えるルール例も掲載。

ルーティング(規則分流)は Clash が一般的なプロキシツールと一線を画す中核機能です。設定ファイル内の rules セクションが、各ネットワークリクエストを最終的にどのプロキシグループへ振り分けるかを決定します。判定基準はドメイン、IP の所属地、プロセス名、ポートなどが使えます。うまく組んだルールセットなら、国内サイトは直接接続、海外サイトはプロキシ経由、特定サービスは専用回線というように、手動切り替え不要で振り分けが完結します。本稿は実践の流れに沿ってルールタイプ、記述形式、優先度の仕組みを分解し、そのまま使えるルール例を示します。

DOC-01

ルールマッチングの基本構造

Clash 設定ファイル内の各ルールは統一された形式に従います。

ルールタイプ,マッチ対象,ターゲットポリシー

例:

rules:
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

3つのフィールドの役割は明確です。第1フィールドはルールタイプで、どの観点でマッチングするかを決めます。第2フィールドは具体的なマッチ値で、タイプに応じて変わります(ドメイン、IP レンジ、プロセス名など)。第3フィールドはヒットした際に処理を委ねるプロキシグループ名またはアクションで、自分で定義したプロキシグループ名のほか、DIRECT(直接接続)や REJECT(拒否)といった組み込みアクションも指定できます。

ルールは上から下へ1件ずつ照合され、最初にヒットした時点で判定は終了し、それ以降のルールは評価されません。つまり記述順序そのものが優先度であり、順序を誤ると入念に設計したルールが機能しなくなります。

DOC-02

DOMAIN 系列:ドメインによる振り分け

ドメイン系のルールは最も使用頻度が高く、マッチング範囲が段階的に広がる複数の書き方があります。

3者の粒度関係は、DOMAIN が最も精密、DOMAIN-SUFFIX がサブドメインをカバー、DOMAIN-KEYWORD が最も広範です。実際の設定では DOMAIN-SUFFIX が大多数の要件をカバーし、DOMAIN-KEYWORD は通常ドメイン構造が不規則なサービスの処理にのみ使用します。

注記

ドメインルールはドメインしか識別できず、IP を直接指定してアクセスする接続は識別できません。対象サイトがドメイン解決を経由しない場合(クライアントに固定 IP が組み込まれている場合など)は、IP-CIDR または GEOIP ルールに切り替える必要があります。

DOC-03

GEOIP:IP の所属地による判定

GEOIP ルールは対象 IP が属する国や地域コードに基づいてマッチングを行い、「国内は直接接続、海外はプロキシ」といった全体戦略を実現する重要なツールです。記述例:

rules:
  - GEOIP,CN,DIRECT

このルールの意味は、解決結果が中国大陸の IP レンジに該当する接続はすべて直接接続とし、プロキシを経由させないというものです。GEOIP ルールは通常、ルールリスト全体の後方に配置し、ドメインルールでカバーしきれない部分を補完する役割を担います。まず DOMAIN-SUFFIX で既知のサイトを精密に処理し、次に GEOIP でその他の IP 所属地から正しく分類できるトラフィックを兜底的に処理する、という流れです。

GEOIP ルールは内蔵または外部から読み込む IP 地理データベースに依存します。mihomo カーネルはこのデータベースの更新機構とマッチング性能を最適化しており、判定速度は初期バージョンより向上しています。使用時はデータベースを最新に保つ必要があり、そうでなければ特に新規割り当ての IP レンジで所属地判定が遅れる場合があります。

DOC-04

IP-CIDR と RULE-SET:より精密、またはより一括なマッチング

IP-CIDR は特定の IP レンジにマッチさせるためのもので、CIDR 表記で記述します。

rules:
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT

この種のルールはローカルネットワークのアドレス帯を直接接続にする用途で多用され、LAN 内アクセスが誤ってプロキシトンネルに送られることを防ぎます。IPv6 の場合は IP-CIDR6 という書き方になります。

RULE-SET は外部のルールセットファイルを参照するもので、大量のドメインや IP ルールを1つのファイルにまとめ、設定側は1行の参照だけで済みます。

rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://example.com/reject-list.yaml"
    path: ./rules/reject.yaml
    interval: 86400

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,direct,DIRECT
  - RULE-SET,proxy,Proxy

RULE-SET の価値は、数百数千行のドメインルールを手動で保守する手間を省ける点にあります。ルールセットの作成者が上流のリストを更新すれば、クライアントは interval で設定した周期で最新内容を自動的に取得します。behavior フィールドはルールセット内容の種類を示し、domain はドメインリスト、ipcidr は IP レンジリスト、classical は完全なルール形式を混在させたリストを意味します。この3種の behavior に対応するルールセットファイルの内部形式は異なるため、参照時は実際のファイルタイプと一致させる必要があり、そうでなければ解析に失敗します。

DOC-05

完全なルール例:日本国内直接接続 + 海外プロキシのシナリオ

以下は「日本国内サイトは直接接続、海外サイトはプロキシ経由」という典型的なシナリオに沿ったルール例です。マッチング優先度に従って順序が並んでおり、そのまま使用したり必要に応じて追加・削除したりできます。

rules:
  # LANおよびプライベートアドレス、常に直接接続
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT

  # 広告・トラッキング用ドメイン、即座に拒否
  - RULE-SET,reject,REJECT

  # 国内でよく使うサイト、精密に直接接続
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,taobao.com,DIRECT
  - DOMAIN-SUFFIX,jd.com,DIRECT
  - DOMAIN-SUFFIX,bilibili.com,DIRECT

  # 海外の主要サイト、プロキシグループ経由
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,youtube.com,Proxy
  - DOMAIN-SUFFIX,github.com,Proxy
  - DOMAIN-SUFFIX,twitter.com,Proxy

  # 外部で保守されている国内ドメインルールセットを参照し、一括で直接接続
  - RULE-SET,direct,DIRECT

  # 外部で保守されているプロキシ用ドメインルールセットを参照
  - RULE-SET,proxy,Proxy

  # IP所属地による兜底判定:中国大陸は直接接続
  - GEOIP,CN,DIRECT

  # 上記のいずれにもヒットしない場合、すべてプロキシグループへ
  - MATCH,Proxy

この例はルール設計の一般的な考え方を体現しています。まず特例(LAN、広告ブロック)を処理し、次に既知の高頻度ドメインを処理し、その後ルールセットで長尾のドメインを一括カバーし、最後に GEOIP と MATCH で兜底することで、前段のルールでヒットしなかったトラフィックにも明確な行き先を確保し、ルールリストの不足による接続失敗を防ぎます。

DOC-06

優先度の仕組みとよくある誤り

優先度を理解するには2点を押さえておく必要があります。

  1. ルールは記述順に上から下へ1件ずつ照合され、最初にヒットしたルールが有効となり、以降のルールは判定に加わりません。
  2. 範囲が広いルールタイプほど前方に置くと、本来後方の精密なルールが処理すべきトラフィックを「先取り」してヒットしやすくなり、振り分け結果が想定と食い違う原因になります。

よくある順序の誤りとしては、DOMAIN-KEYWORD をルールリストの最前列に置いてしまい、対象外の多数のドメインが誤って処理されてしまうケース、GEOIP,CN,DIRECT を海外ドメインルールより前に置いてしまい、CDN で配信されて IP レンジが中国大陸内だが実際にはプロキシ経由が必要なドメインが誤って直接接続になってしまうケース、あるいは末尾に MATCH の兜底ルールを書き忘れ、どのルールにもヒットしない接続の挙動が不定になってしまうケースなどが挙げられます。

ルールをデバッグする際は、クライアント内蔵の接続ログやルールヒット確認機能を使い、特定のドメインが実際にどのルールにマッチしたかを1件ずつ確認し、それに基づいて順序を調整することをお勧めします。経験だけで何度も推測するより効率的です。

注意

ルールセットの behavior タイプ(domain/ipcidr/classical)は、ルールセットファイルの実際の内容形式と一致させる必要があります。混用するとそのルールセット全体の解析が失敗し、それに依存するすべてのドメイン判定が無効になります。ルールセットの入手元を変更する際は、まずドキュメントに記載された behavior タイプを確認することをお勧めします。

DOC-07

プロキシグループとの連携

ルールの最終的な指し先はプロキシグループ名でよく、単一ノードである必要はありません。select(手動選択)、url-test(自動速度テストによる切り替え)、fallback(フェイルオーバー)などのプロキシグループタイプと組み合わせることで、ルーティングとノード選択の戦略を完全に分離できます。ルールは「このトラフィックはプロキシか直接接続か」だけを判断し、具体的にどのノードを使うかはプロキシグループ自身に委ねます。この階層的な設計こそが、Clash の設定が柔軟性と保守性を両立できる要となっています。

proxy-groups:
  - name: Proxy
    type: url-test
    proxies:
      - ノードA
      - ノードB
    url: "http://www.gstatic.com/generate_204"
    interval: 300

上記の例が示すように、ルール内に書いた Proxy はここで定義したプロキシグループに対応し、グループ内のノードは url-test タイプによって自動的に速度が計測され、最も遅延の低いものが選ばれます。ルールファイル自体は具体的なノード情報を気にする必要がなく、後からサブスクリプションを変更したりノードを追加・削除したりしてもルールセクションを変更する必要はありません。

Clash クライアントを入手する

ルーティングを機能させるには、完全なルール文法と RULE-SET をサポートするクライアントが必要です。ダウンロードページから最新版を取得し、チュートリアルに従って基本設定を完了することをお勧めします。

Clash をダウンロード