ルールルーティング実践ガイド
ルールルーティングは Clash の最も核心的な機能です。本記事では基本構文から上級テクニックまで、トラフィックの行き先を精密に制御する方法を身につけていきます。
ルールルーティングの意義
Clash のルールルーティング(Rule-based Routing)は、単純なプロキシツールとは一線を画す核心機能です。丁寧に設定されたルールセットがあれば、Clash はまるで賢い交通管制システムのように振る舞います。ニコニコ動画や楽天、LINE のようなローカルサービスへのアクセスはローカル回線を経由して全速力・低遅延で処理し、Google、YouTube、GitHub へのアクセスは自動的にプロキシノードに切り替えて意識せずアクセスでき、広告やトラッキング用のドメインはその場でブロックして通信量も遅延も消費しません。
ルールルーティングがなかった時代は、ユーザーは「プロキシを ON にする」か「OFF にする」かの二択しかなく、ローカルサイトが遅くなるか、海外サービスにアクセスできないかのどちらかを受け入れるしかありませんでした。ルールルーティングによってこの両方を完璧に両立できるようになったため、ルール設定を使いこなすことは Clash の上級ユーザーにとって必須のスキルとなっています。
Clash.Meta(Mihomo)カーネルはルールシステムを大幅に強化し、RULE-SET、DOMAIN-REGEX、NETWORK といった新しいルールタイプを追加し、コミュニティが管理する大規模ルールセット(Loyalsoldier の clash-rules など)にも対応しています。これによりルールの表現力とメンテナンス効率が大きく向上しています。
ルール構文の基礎
Clash の設定ファイル(YAML 形式)では、rules フィールドは順序付きリストです。各ルールの形式は次のとおりです。
タイプ,マッチ値,対象ポリシーグループ[,no-resolve]
ルールは上から下へ順に評価され、最初にマッチしたルールが適用され、それ以降のルールはチェックされません。つまりルールの順序が非常に重要で、特殊なルールは前に、汎用的なルールは後ろに置く必要があります。典型的なルールファイルの構造は次のようになります。
rules:
# 1. ローカルネットワークと特殊アドレスは直接接続
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
# 2. 広告ブロック(優先的にマッチさせるため前に置く)
- RULE-SET,reject,REJECT
# 3. プロキシ経由のドメイン
- RULE-SET,proxy,Proxy
# 4. ローカル向けドメインは直接接続
- RULE-SET,direct,DIRECT
- GEOIP,JP,DIRECT
# 5. 兜底ルール(必ず最後に置く)
- MATCH,Proxy
最後の MATCH は必須の兜底ルールで、それまでのルールにマッチしなかったすべてのトラフィックがここに落ちます。通常はプロキシ経由に設定し、ルールでカバーされていない未知のドメインでも海外サービスにアクセスできるようにします。
よく使うルールタイプ
DOMAIN はドメイン名を完全一致でマッチさせ、サブドメインにはマッチしません。DOMAIN,google.com,Proxy は google.com だけにマッチし、www.google.com にはマッチしません。
DOMAIN-SUFFIX はドメイン名とすべてのサブドメインにマッチする、最もよく使われるドメインルールタイプです。DOMAIN-SUFFIX,google.com,Proxy は google.com、www.google.com、mail.google.com などすべてにマッチします。
DOMAIN-KEYWORD はドメイン名に指定したキーワードが含まれていればマッチする、諸刃の剣のようなルールです。便利ですが誤爆しやすい点に注意が必要です。DOMAIN-KEYWORD,google,Proxy は google.com にマッチしますが、googledrive.com や somegooglestuff.net のようなドメインにも意図せずマッチしてしまうため、慎重に使う必要があります。
IP-CIDR は宛先の IP アドレス範囲にマッチします。ローカルネットワークのアドレス(192.168.0.0/16 など)を直接接続にする場合や、特定サービスの IP 範囲を指定する場合によく使われます。IP-CIDR ルールはデフォルトでドメイン名を先に IP へ解決しますが、DNS 解決を発生させたくない場合(Fake-IP モードなど)は末尾に no-resolve を付けます。
GEOIP は宛先 IP の地理情報データベースに基づいて所属国を判定します。GEOIP,JP,DIRECT はほぼすべての Clash 設定ファイルに登場するルールで、日本国内の IP を直接接続にし、ローカルサービスがプロキシ経由になるのを防ぎます。海外から輸入した設定ファイルでは GEOIP,CN,DIRECT のように別の国コードが使われている例も見かけますが、これは元の配布元のローカル地域向けに書かれたものなので、自分の環境に合わせて書き換えるのがポイントです。Mihomo カーネルは MaxMind の GeoIP または GeoSite データベースを使用し、自動更新にも対応しています。
RULE-SET は外部のルールセットファイル(またはインラインのルールセット)を参照する方式で、大量のルールを管理するのに推奨される方法です。詳しくは次の章で解説します。
MATCH は無条件にすべてのトラフィックにマッチするため、必ずルールリストの最後に兜底ルールとして配置します。
ポリシーグループとルールの関係
ルール内の「対象ポリシーグループ」は、Clash 設定ファイルの proxy-groups フィールドで定義したポリシーグループ名、または組み込みの DIRECT(直接接続)・REJECT(ブロック)キーワードのいずれかです。
ポリシーグループの役割は、複数のノードをまとめてグループ化し、ノード選択の方式を定義することです。
select タイプはユーザーが手動でノードやサブグループを選べるタイプで、最上位の「ノード選択」ポリシーグループに適しています。ルールにマッチしたトラフィックがどのノードを通るかは、その時点でのユーザーの選択次第です。
url-test タイプは自動で速度測定を行い、遅延が最も低いノードを選ぶタイプで、「自動選択」ポリシーグループに適しています。url(測定先アドレス)、interval(測定間隔・秒)、tolerance(切り替えの許容遅延・ミリ秒)のパラメータで動作を制御します。
fallback タイプは順番にノードを試し、最初に使用可能なノードを採用するタイプです。現在のノードが使えなくなると自動的に次のノードへ切り替わり、フェイルオーバーのような挙動をします。安定性を重視するシーンに向いています。
load-balance タイプは複数のノードにトラフィックを分散させるタイプで、並列ダウンロードの速度を上げたい場合に向いています。
ルールとポリシーグループを組み合わせることで、「どのトラフィックをどのポリシーで処理するか」を細かく制御できます。動画のストリーミングは「ストリーミング専用」ポリシーグループ(対応地域の解除ノードを選択)に、ダウンロードは「ダウンロード最適化」ポリシーグループ(帯域の広いノードを選択)に、通常のブラウジングは「自動選択」ポリシーグループ(遅延の低いノードを選択)に振り分けるといった使い方です。
Rule-Set ルールセット
数百件のドメインルールを手動でメンテナンスするのは手間がかかり、すぐに古くなってしまいます。RULE-SET を使えば外部ファイルや URL をルールセットとして参照でき、ルールの維持管理をコミュニティプロジェクトに任せることができます。
最も広く使われているコミュニティルールセットは、Loyalsoldier がメンテナンスする clash-rules プロジェクトです。reject(広告ブロック)、proxy(プロキシ経由ドメイン)、direct(直接接続ドメイン)など複数カテゴリのルールセットを提供し、毎日自動更新され、数万件のルールを収録しているため、手動管理よりもカバー率と精度が大幅に優れています。
設定ファイルでの参照方法は次のとおりです。
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 # 1日ごとに更新
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,Proxy
- GEOIP,JP,DIRECT
- MATCH,Proxy
Mihomo カーネルは初回起動時にこれらのルールセットファイルをローカルにキャッシュし、以降は interval 秒ごとに自動更新します。オフラインでもキャッシュされたルールセットを使えるため、通常の利用に影響はありません。
カスタムルール実践
プロキシプロバイダーが提供するサブスクリプション設定には通常、合理的なルールセットが最初から含まれていますが、特定のシーンではカスタムルールを追加したくなることがあります。Clash Plus(Mihomo)は GUI の「Override(オーバーライド)」機能でルールを追加したり、「Mixin」機能でカスタム設定をマージしたりできるため、元のサブスクリプションファイルを直接編集する必要はありません。
ケース 1:特定のアプリを強制的に直接接続にする。ローカルのアプリがルールセットの網羅漏れによって意図せずプロキシ経由になってしまった場合、DOMAIN-SUFFIX ルールを DIRECT 向けに手動で追加し、ルールリストの前方(優先度が高い位置)に配置します。
prepend-rules:
- DOMAIN-SUFFIX,example-jp-app.com,DIRECT
- DOMAIN-SUFFIX,example-cdn.jp,DIRECT
ケース 2:ストリーミングサービス専用のノードを指定する。Netflix のリージョン解除はノードの所在地と密接に関係するため、専用の解除ノードが必要になることがあります。専用のポリシーグループを作成し、Netflix 関連のドメインをそのポリシーグループに振り分けます。
prepend-proxy-groups:
- name: "Netflix 専用"
type: select
proxies:
- US Netflix 解除ノード 1
- US Netflix 解除ノード 2
prepend-rules:
- DOMAIN-SUFFIX,netflix.com,Netflix 専用
- DOMAIN-SUFFIX,nflxvideo.net,Netflix 専用
- DOMAIN-SUFFIX,nflximg.net,Netflix 専用
ケース 3:特定の広告ドメインをブロックする。ルールセットに含まれていない広告ドメインを見つけた場合は、REJECT ルールを直接追加します。
prepend-rules:
- DOMAIN-SUFFIX,specific-ad-domain.com,REJECT
デバッグとトラブルシューティング
あるサイトにアクセスできない、あるいは意図しないルートを通っている場合、「Connections(接続)」ページが最も役立つデバッグツールになります。Clash Plus の接続ログを開き、対象のサイトへのリクエストを再度発生させて、ログに表示されるそのコネクションがヒットしたルール(Rule 列)と経路(Chain 列)を確認します。ほとんどの場合、間違ったルールにマッチしているのか、ノード自体の接続に問題があるのか、一目で判断できます。
あるドメインが「直接接続」のトラフィックに含まれているが本来はプロキシ経由にすべき場合は、「Override」設定で DOMAIN-SUFFIX ルールを対象のプロキシポリシーグループに向けて手動追加すれば修正できます。逆に本来直接接続すべきローカルサイトがプロキシ経由になっている場合は、DIRECT 向けのルールを追加してください。
http://127.0.0.1:9090/ui)は、デスクトップ GUI よりも詳細な接続ログとルールテスト機能を提供しており、ルールを深く検証する際に役立ちます。
DNS とプライバシー保護についても知りたいですか?
ルールルーティングと Fake-IP DNS を組み合わせることで、本当にリークのない振り分けが実現します。次の記事ではこのテーマを詳しく解説します。