Clash のルーティングルールとは?
Clash を始めたばかりの方がよくぶつかるのが次の悩みです。グローバルプロキシをオンにすると、Baidu や Taobao、bilibili など中国本土向けのサイトまで海外サーバーに迂回し、表示や動画の読み込みがもたつく。往復 RTT が 100 ms 以上増えることも珍しくなく、本来なら数 ms で済むはずの通信が「地球の裏まで行って戻る」ような遅さに感じられます。
この問題の肝は接続ごとに「ダイレクトかプロキシか」を自動で振り分けるルールです。ドメインや IP を見て、国内系は DIRECT、海外はプロキシグループへ送るように書けば、モードを手で切り替え続ける必要はほぼなくなり、国内・海外の両方をひとつの設定で快適に使えます。
この記事では、ルールエンジンの挙動、主要なルール型、GEOIP,CN による本土ダイレクト、Rule Provider と RULE-SET の扱い、そしてそのまま参考にできる YAML の骨格までをまとめます。ある程度 Clash に慣れていて、ルーティングをより細かくしたい方向けです。
ルールエンジンの動き
ルールを正しく並べるには、まず「どう評価されるか」を押さえます。
評価順:上から順に、最初に当たった一行だけが効く
新しい接続ごとに、設定内の rules: に書いた上から順に照合されます。一度どこかにマッチすると、その行で指定したポリシー(DIRECT やプロキシグループ名など)が使われ、それ以降の行は見ません。並び順がそのまま動作に直結します。
- より具体的なルールを上に:特定ホスト向けの
DOMAINは、幅の広いDOMAIN-SUFFIXより前に置く - 最後は必ず MATCH:
MATCH,ProxyやMATCH,DIRECTで、どれにも当たらなかった残余を受ける - 例外はブロックより前に:親ドメインを拒否しつつ子だけ通すなら、通す側を先に書く
1 行の構造
各ルールはカンマ区切りのだいたい次の形です(YAML リストでは先頭に - が付く場合もあります)。
ルール種別, マッチ対象, 送り先ポリシー
例:
DOMAIN-SUFFIX,google.com,Proxy
GEOIP,CN,DIRECT
MATCH,Proxy
送り先は DIRECT や REJECT などの組み込み名、または proxy-groups: で定義した名前(Proxy / Auto など)です。
代表的なルール型(6 種類)
Mihomo 系の Clash で特によく使うのは次のあたりです。
ドメイン系
| 種別 | 意味 | 例 |
|---|---|---|
DOMAIN |
FQDN の完全一致 | DOMAIN,www.google.com,Proxy |
DOMAIN-SUFFIX |
そのサフィックスおよび全サブドメイン | DOMAIN-SUFFIX,google.com,Proxy |
DOMAIN-KEYWORD |
ホスト名にキーワードが含まれる | DOMAIN-KEYWORD,google,Proxy |
基本は DOMAIN-SUFFIX:DOMAIN-SUFFIX,google.com,Proxy は google.com 本体と mail.google.com などをまとめて拾え、抜け漏れが少ないです。DOMAIN-KEYWORD は短すぎると無関係なホストに当たりやすいので注意してください。
IP 系
| 種別 | 意味 | 例 |
|---|---|---|
IP-CIDR |
IPv4 のプレフィックス一致 | IP-CIDR,192.168.0.0/16,DIRECT |
IP-CIDR6 |
IPv6 のプレフィックス一致 | IP-CIDR6,2001:db8::/32,DIRECT |
LAN やループバックを最初に DIRECT に回すときなどに使います。ドメインで既に決まった接続には通常この段まで来ません。IP で直接アクセスするケースや、名前解決後の IP で振り分けたいときに効いてきます。
GEOIP(国コード)
GEOIP,CN,DIRECT は「解決済みの宛先 IP が中国本土向けならダイレクト」という、本土回線に欠かせない一行です。内蔵 GeoIP(または geodata)で CN かどうかを見ます。
# 中国本土の IP へはダイレクト
GEOIP,CN,DIRECT,no-resolve
no-resolve を付けると、「このルールの評価のために余計な DNS 解決を誘発しない」という意味合いで扱われ、意図しないタイミングの解決やループを抑えやすくなります。クライアントのバージョンや DNS 設定と合わせて挙動を確認してください。
GeoIP は古くなる:割り込みの変更に内蔵 DB が追いつかないことがあります。geodata-mode: true などで MaxMind 系 geodata を使う構成も検討し、クライアントの「GEO データ更新」(Clash Verge Rev などでは自動更新)を定期的に行うと安定します。
MATCH(残余の受け皿)
MATCH は必ず最終行付近に置き、どの行にも当たらなかったトラフィックの行き先を決めます。
# 残余はすべてプロキシグループへ
MATCH,Proxy
これで、ルールに明示していない海外ドメインもまとめて Proxy に流せます。
中国本土をダイレクトにする:実践の積み重ね
GEOIP,CN,DIRECT だけでは足りないこともあります。海外 CDN へ出ている国内サービスや、グローバル Anycast な IP では、GeoIP 上は海外に見える場合があります。次の三層を意識すると安定しやすいです。
第 1 層:LAN・予約帯を DIRECT
# LAN および予約アドレスはダイレクト
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
第 2 層:よく使う中国向けドメインを DOMAIN-SUFFIX で DIRECT
Baidu / Tencent / アリババ系 / バイトダンス系など、利用頻度の高いサフィックスを明示すると、GeoIP より先に確実に振れます。
DOMAIN-SUFFIX,baidu.com,DIRECT
DOMAIN-SUFFIX,qq.com,DIRECT
DOMAIN-SUFFIX,weixin.qq.com,DIRECT
DOMAIN-SUFFIX,taobao.com,DIRECT
DOMAIN-SUFFIX,tmall.com,DIRECT
DOMAIN-SUFFIX,jd.com,DIRECT
DOMAIN-SUFFIX,bilibili.com,DIRECT
DOMAIN-SUFFIX,zhihu.com,DIRECT
DOMAIN-SUFFIX,weibo.com,DIRECT
DOMAIN-SUFFIX,bytedance.com,DIRECT
DOMAIN-SUFFIX,douyin.com,DIRECT
第 3 層:GEOIP,CN でフォールバック
GEOIP,CN,DIRECT,no-resolve
この順で重ねると、本土向けトラフィックを無駄なプロキシに流さず、体感速度と転送量の両方を抑えやすくなります。
Rule Provider とルールセット
数万行を手で rules: に書くのは現実的ではありません。Rule Provider で URL やローカルファイルからルールを読み込み、RULE-SET で参照する形にすると、コミュニティの更新にも追従しやすくなります。
behavior の三種類
| behavior | 中身の形式 | 向いている用途 |
|---|---|---|
domain |
1 行 1 ドメイン、または +. 付きワイルド |
ドメインの白黒リスト。索引が効いて軽い |
ipcidr |
1 行 1 CIDR | IP 帯の DIRECT / プロキシ一覧 |
classical |
従来型(TYPE,ARG。ポリシー部分は含めない) | 型が混在する複雑なセット |
HTTP から取り込む例
例としてコミュニティの blackmatrix7 / ios_rule_script を参照する宣言です。
rule-providers:
# 中国本土向けドメイン(直結用)
ChinaDomain:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/ChinaMax/ChinaMax_Domain.txt"
path: ./ruleset/ChinaDomain.txt
interval: 86400 # 24 時間ごとに更新
# よくプロキシする海外向けドメイン
ProxyGFW:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Global/Global_Domain.txt"
path: ./ruleset/ProxyGFW.txt
interval: 86400
rules: 側では RULE-SET で拾います。
rules:
# LAN 直結
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
# 中国ドメインセット → 直結
- RULE-SET,ChinaDomain,DIRECT
# 海外ドメインセット → プロキシ
- RULE-SET,ProxyGFW,Proxy
# 中国 IP → 直結
- GEOIP,CN,DIRECT,no-resolve
# 残余
- MATCH,Proxy
オフラインでも使いやすく:path: を決めておくと、初回に取得したルールがキャッシュされます。一時的に GitHub に繋がなくても、ローカルに残っていれば通常はそのまま動きます。
構成全体のサンプル(YAML 骨格)
プロキシグループ・Rule Provider・rules: の三つが揃うと運用しやすくなります。次はその最小イメージです。
# ── Proxy Groups ──────────────────────────────────────
proxy-groups:
- name: "Proxy"
type: select
proxies:
- Auto
- HK-01
- JP-01
- US-01
- name: "Auto"
type: url-test
url: "https://www.gstatic.com/generate_204"
interval: 300
proxies:
- HK-01
- JP-01
- US-01
# ── Rule Providers ─────────────────────────────────────
rule-providers:
ChinaDomain:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/ChinaMax/ChinaMax_Domain.txt"
path: ./ruleset/ChinaDomain.txt
interval: 86400
ProxyGFW:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Global/Global_Domain.txt"
path: ./ruleset/ProxyGFW.txt
interval: 86400
# ── Rules ──────────────────────────────────────────────
rules:
# LAN / ループバック
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
# 高頻度の中国ドメイン(GeoIP より手前)
- 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,zhihu.com,DIRECT
- RULE-SET,ChinaDomain,DIRECT
- RULE-SET,ProxyGFW,Proxy
- GEOIP,CN,DIRECT,no-resolve
- MATCH,Proxy
HK-01 などは、購読しているサーバ一覧の実際のノード名に差し替えてください。
困ったときの切り分け
国内サイトなのにプロキシに乗る
よくあるのは、DNS の答えが海外 CDN の IP になって GeoIP が海外判定するパターンです。
- 該当ドメインを
DOMAIN-SUFFIX,example.com,DIRECTで明示し、GEOIP,CNより上に置く dns.enhanced-mode: fake-ipを使うなら、国内ドメインをfake-ip-filterで除外するなど、名前解決の経路を確認する- 使用中の Rule Provider にそのホストが含まれているか、足りなければ手書きで補う
海外なのに DIRECT になって開けない
MATCH の前のどこかで誤って DIRECT になっている可能性があります。
- クライアントの「接続 / Connections」で、当該フローにどのルールが当たったかを確認する
- 中国向けセットに誤って入っているドメインなら、プロキシ側のルールをより上に追加して上書きする
MATCHが本当にプロキシグループを指しているか(DIRECTのままになっていないか)を確認する
ログを一時的に詳しく
設定の冒頭で log-level: debug にすると、マッチングの詳細がログに出ます。
log-level: debug # silent / error / warning / info / debug
原因が分かったら info か warning に戻してください。debug はログ量が多く、常時オンは負荷になります。
ルールは良くても、クライアントが古いと台無し
Rule Provider や新しいコア機能に対応していない GUI では、せっかくの設定が生かしきれません。例:
- Clash for Windows(CFW):開発が止まっており、Mihomo の
behavior: domainなどに最適化されたルールセットの扱いが新世代クライアントに劣る場合がある - ClashX:メンテが止まっており、Hysteria 2 や VLESS Reality など新プロトコル、ルールの自動更新まわりが使いづらい
- 一部の Android クライアント:プロキシグルーの切り替えや TUN がわかりにくく、トラブル時の切り分けが難しい
活発に更新されているクライアントでは、次のような利点があります。
- 接続ログやパネルで、リクエストごとに命中したルールをすぐ確認できる
- Rule Provider の手動・自動更新がしやすい
- Mihomo の機能(Hysteria 2、VLESS Reality、TUN など)を一通り使える
- UI が整理されており、ノード選択や遅延テストが直感的
この記事どおりに組んでも挙動がイマイチなら、メンテされている Clash クライアントに乗り換えるだけで分岐の精度や安定性が上がることも多いです。当サイトでは各 OS 向けのインストーラを直接配布しており、GitHub を開かずに最新版を入手できます。下のボタンからどうぞ。