ルールエンジンの動作原理

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,Proxygoogle.comwww.google.commail.google.com などすべてのサブドメインに同時にマッチします。最もよく使われるドメインルールです。

IP アドレスルール

ルールタイプマッチ方法
IP-CIDRIPv4 CIDR レンジに一致IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR6IPv6 CIDR レンジに一致IP-CIDR6,::1/128,DIRECT
GEOIPIP の所属国/地域でマッチ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
ℹ️
おすすめのルールセットソースLoyalsoldier/clash-rules はコミュニティで最も広く使われているルールセットで、GFW リスト、国内直接接続ドメイン、広告フィルタリングなどを含み、継続的にメンテナンス・更新されています。

完全設定テンプレート例

以下は、ルールベースルーティング、ポリシーグループ、外部ルールセットを含む最小限の動作可能な設定テンプレートです:

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

ルール設定のベストプラクティス

  • 精度優先DOMAINDOMAIN-SUFFIX の前に、DOMAIN-SUFFIXDOMAIN-KEYWORD の前に配置して、誤マッチを減らす
  • GEOIP は後ろに:GEOIP は DNS 解決が必要で時間がかかるため、ドメインルールの後に配置する
  • MATCH は必ず最後:キャッチオールルールとして、どのルールにもマッチしなかったトラフィックを MATCH で処理する
  • ログでデバッグ:Clash クライアントの「ログ」ページでリアルタイムに各接続がどのルールにマッチしたかを確認し、ルーティング問題を素早くトラブルシューティングできる
  • no-resolve でレイテンシ削減:内部 IP だとわかっている IP-CIDR ルールには no-resolve を追加して DNS 解決ステップをスキップする
上級設定ガイドで Clash のさらなる高度な機能を探索する

まとめ

  • ルールは上から下へ順番にマッチング:精確なルールを前に、広範なルールを後ろに、MATCH がキャッチオール
  • よく使うルールタイプ:DOMAIN-SUFFIX(ドメインとサブドメイン)、GEOIP(IP の地理的位置)、IP-CIDR(IP レンジ)、PROCESS-NAME(プロセス名)
  • proxy-groups でノード選択戦略を定義:select(手動)/ url-test(自動レイテンシ)/ fallback(フェイルオーバー)/ load-balance(負荷分散)
  • rule-providers で外部の大型ルールセットを購読し、自動更新、手動メンテナンス不要

関連記事