ルールエンジンの動作原理
Clash のルールエンジンは上から下へ順番に照合します。最初にマッチしたルールが有効になり、それ以降のルールはチェックされません。各ルールは3つの部分で構成されています:
# 書式:ルールタイプ,マッチ値,ターゲットポリシー
- DOMAIN-SUFFIX,google.com,Proxy
- GEOIP,CN,DIRECT
- MATCH,DIRECT # 最後に必ず配置するキャッチオールルール
この順番マッチングの仕組みを理解することが非常に重要です:精確なルールを前に、広範なルールを後ろに、MATCH を最後のキャッチオールとして配置してください。
ルールタイプの詳細解説
ドメインルール
| ルールタイプ | マッチ方法 | 例 |
|---|---|---|
DOMAIN | ドメイン名の完全一致 | DOMAIN,www.google.com,Proxy |
DOMAIN-SUFFIX | ドメインおよびすべてのサブドメインに一致 | DOMAIN-SUFFIX,google.com,Proxy |
DOMAIN-KEYWORD | ドメインにキーワードが含まれる | DOMAIN-KEYWORD,googleapis,Proxy |
DOMAIN-REGEX | 正規表現でドメインに一致 | DOMAIN-REGEX,^api\..+\.com$,Proxy |
DOMAIN-SUFFIX,google.com,Proxy は google.com、www.google.com、mail.google.com などすべてのサブドメインに同時にマッチします。最もよく使われるドメインルールです。
IP アドレスルール
| ルールタイプ | マッチ方法 | 例 |
|---|---|---|
IP-CIDR | IPv4 CIDR レンジに一致 | IP-CIDR,192.168.0.0/16,DIRECT |
IP-CIDR6 | IPv6 CIDR レンジに一致 | IP-CIDR6,::1/128,DIRECT |
GEOIP | IP の所属国/地域でマッチ | GEOIP,CN,DIRECT |
IP-CIDR ルールはデフォルトで DNS 解決をトリガーします(ドメインを IP に解決してからマッチ)。fake-ip モードでは、IP-CIDR ルールはドメインに対して機能しないため、まずドメインルールを使用してください。IP-CIDR が DNS 解決をトリガーしないようにするには、ルールの末尾に no-resolve を追加します:IP-CIDR,10.0.0.0/8,DIRECT,no-resolveその他のルールタイプ
| ルールタイプ | 説明 | 例 |
|---|---|---|
PROCESS-NAME | プロセス名でマッチ(デスクトップ) | PROCESS-NAME,git.exe,Proxy |
PROCESS-PATH | プロセスのフルパスでマッチ | PROCESS-PATH,/usr/bin/curl,Proxy |
NETWORK | プロトコルタイプでマッチ | NETWORK,udp,Proxy |
PORT | 宛先ポートでマッチ | DST-PORT,22,DIRECT |
RULE-SET | 外部ルールセットを参照 | RULE-SET,gfw,Proxy |
MATCH | キャッチオール、無条件マッチ | MATCH,DIRECT |
proxy-groups ポリシーグループ設定
ポリシーグループは、ルールがマッチした後にトラフィックを転送する先を定義します。Clash は以下のポリシーグループタイプをサポートしています:
手動選択(select)
proxy-groups:
- name: "Proxy"
type: select
proxies:
- "自動選択"
- "香港 01"
- "シンガポール 01"
- "日本 01"
- DIRECT
クライアントのインターフェースでユーザーが手動でノードまたはサブポリシーグループを選択します。最外層のデフォルトポリシーグループには通常 select タイプを使用します。
レイテンシ自動選択(url-test)
- name: "自動選択"
type: url-test
url: "https://www.gstatic.com/generate_204"
interval: 300 # テスト間隔(秒)、180〜300 を推奨
tolerance: 50 # レイテンシ差が 50ms 以内の場合はノードを切り替えない
proxies:
- "香港 01"
- "香港 02"
- "シンガポール 01"
すべてのノードのレイテンシを自動的にテストし、常に最も低いレイテンシのノードを選択します。レイテンシに敏感なシナリオ(ゲーム、ビデオ会議)に最適です。
フェイルオーバー(fallback)
- name: "フェイルオーバー"
type: fallback
url: "https://www.gstatic.com/generate_204"
interval: 300
proxies:
- "メインノード"
- "バックアップノード 01"
- "バックアップノード 02"
リスト内の最初のノードを優先して使用し、そのノードが利用できない場合にのみ次のノードに切り替えます。安定性優先のシナリオに最適です。
負荷分散(load-balance)
- name: "負荷分散"
type: load-balance
strategy: round-robin # round-robin / consistent-hashing
url: "https://www.gstatic.com/generate_204"
interval: 300
proxies:
- "ノード A"
- "ノード B"
- "ノード C"
複数のノードにトラフィックを分散させ、全体のスループットを向上させます。round-robin はノードを均等にローテーション;consistent-hashing は同じ宛先には常に同じノードを使用し、セッション維持が必要なシナリオに適しています。
rule-providers 外部ルールセット
何百ものルールを手動で管理するのは面倒でミスが起きやすいです。rule-providers を使用すると、外部 URL またはローカルファイルからコミュニティが管理する大型ルールセットを購読し、自動更新することができます。
rule-providers:
gfw:
type: http
behavior: domain # domain / ipcidr / classical
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
path: ./ruleset/gfw.yaml
interval: 86400 # 24 時間ごとに自動更新
cn-cidr:
type: http
behavior: ipcidr
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
path: ./ruleset/cncidr.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,direct,DIRECT
- RULE-SET,gfw,Proxy
- RULE-SET,cn-cidr,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,Proxy
完全設定テンプレート例
以下は、ルールベースルーティング、ポリシーグループ、外部ルールセットを含む最小限の動作可能な設定テンプレートです:
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- tls://8.8.8.8:853
proxies:
- name: "香港 01"
type: vmess
server: hk01.example.com
port: 443
uuid: "your-uuid-here"
alterId: 0
cipher: auto
tls: true
proxy-groups:
- name: "Proxy"
type: select
proxies: ["自動選択", "香港 01", DIRECT]
- name: "自動選択"
type: url-test
url: "https://www.gstatic.com/generate_204"
interval: 300
proxies: ["香港 01"]
rule-providers:
gfw:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
path: ./ruleset/gfw.yaml
interval: 86400
rules:
# カスタム高優先度ルール(最前に配置)
- DOMAIN-SUFFIX,openai.com,Proxy
- DOMAIN-KEYWORD,notion,Proxy
# 外部ルールセット
- RULE-SET,gfw,Proxy
# 国内 IP 直接接続
- GEOIP,CN,DIRECT
# LAN 直接接続
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
# キャッチオール
- MATCH,DIRECT
よくあるスプリットトンネリングのシナリオ
ストリーミングのアンロック
Netflix、Disney+、YouTube Premium などのストリーミングサービスには地域制限があり、特定地域のアンロックノードが必要です:
proxy-groups:
- name: "Netflix"
type: select
proxies: ["米国ノード", "シンガポールノード", "日本ノード"]
rules:
- DOMAIN-SUFFIX,netflix.com,Netflix
- DOMAIN-SUFFIX,nflxvideo.net,Netflix
- DOMAIN-KEYWORD,netflix,Netflix
開発者ツールの最適化
npm、pip、Docker Hub などはプロキシが必要ですが、イントラネットサービスやローカル開発サーバーは直接接続が必要です:
rules:
# 開発ツールはプロキシ経由
- DOMAIN-SUFFIX,npmjs.org,Proxy
- DOMAIN-SUFFIX,pypi.org,Proxy
- DOMAIN-SUFFIX,docker.io,Proxy
- PROCESS-NAME,git.exe,Proxy # Windows
- PROCESS-NAME,git,Proxy # macOS/Linux
# ローカル開発は直接接続
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- DOMAIN-SUFFIX,local,DIRECT
ルール設定のベストプラクティス
- 精度優先:
DOMAINをDOMAIN-SUFFIXの前に、DOMAIN-SUFFIXをDOMAIN-KEYWORDの前に配置して、誤マッチを減らす - GEOIP は後ろに:GEOIP は DNS 解決が必要で時間がかかるため、ドメインルールの後に配置する
- MATCH は必ず最後:キャッチオールルールとして、どのルールにもマッチしなかったトラフィックを MATCH で処理する
- ログでデバッグ:Clash クライアントの「ログ」ページでリアルタイムに各接続がどのルールにマッチしたかを確認し、ルーティング問題を素早くトラブルシューティングできる
- no-resolve でレイテンシ削減:内部 IP だとわかっている IP-CIDR ルールには
no-resolveを追加して DNS 解決ステップをスキップする
まとめ
- ルールは上から下へ順番にマッチング:精確なルールを前に、広範なルールを後ろに、MATCH がキャッチオール
- よく使うルールタイプ:
DOMAIN-SUFFIX(ドメインとサブドメイン)、GEOIP(IP の地理的位置)、IP-CIDR(IP レンジ)、PROCESS-NAME(プロセス名) proxy-groupsでノード選択戦略を定義:select(手動)/ url-test(自動レイテンシ)/ fallback(フェイルオーバー)/ load-balance(負荷分散)rule-providersで外部の大型ルールセットを購読し、自動更新、手動メンテナンス不要
関連記事
- TUN モード使用ガイド:すべてのトラフィックを Clash のルール経由でルーティングする
- DNS 汚染対策設定:ルールベースルーティングと組み合わせて DNS 汚染問題を解決する
- 購読の自動更新設定:ノードとルールセットを常に最新の状態に保つ