コア原理 · 詳細解析

Clash はどのように動作するのか?

通信の入り口からルールの照合、そしてプロトコルによる送信まで、Clash の一連のプロセスを紐解きます。単なる設定のコピーではなく、ルール振り分け、TUN 透明プロキシ、DNS リーク対策の裏側にある仕組みを理解しましょう。

リクエストは Clash でどのように処理されるのか?

ブラウザで URL を開いたとき、通信は直接行われるわけではありません。Clash はローカルで1つ以上のポートを監視し、すべての送信接続をインターセプトします。そしてルールエンジンが「直接接続」か「プロキシ経由」かを判断します。

全体のプロセスは5つの段階に分かれ、それぞれに Clash の介入ポイントがあります:

  1. 通信のインターセプト — アプリが接続を開始すると、システムプロキシまたは TUN 仮想ネットワークカードが通信を Clash プロセスへ転送します。
  2. DNS 解析 — Clash 内蔵の DNS モジュールが介入し、設定に基づいて Fake-IP またはリアル IP 解析を選択します。
  3. ルールの照合rules リストに従い、ドメイン、IP、プロセス名などの条件を上から順に照合します。
  4. ポリシーグループによる制御 — ルールにマッチすると、対応するポリシーグループ(Proxy / DIRECT / REJECT)に処理が引き渡されます。
  5. プロトコルによる送信 — 選択されたノードのプロトコル(SS / VMess / Trojan…)を使用して、暗号化通信を行います。

Clash ルールエンジン:優先順位、照合タイプ、実行順序

ルールエンジンは Clash の最も重要な機能です。rules リストを上から順に1行ずつ照合し、最初にマッチしたルールが即座に適用されます。以降のルールは無視されるため、記述する順番が極めて重要です。

ドメインベースのルール

最も頻繁に使用されるタイプです。ドメイン全体やサフィックス(後方一致)で、特定のサイトごとに経路を指定できます。

DOMAINgoogle.comProxy
DOMAIN-SUFFIXgithub.comProxy
DOMAIN-KEYWORDyoutubeProxy
  • DOMAIN:完全一致。指定したドメイン名に完全に一致する場合のみマッチします。
  • DOMAIN-SUFFIX:後方一致(サフィックス)。サブドメインを含めてマッチします。
  • DOMAIN-KEYWORD:キーワード一致。ドメイン名に特定の文字列が含まれる場合にマッチします。

IP / 位置情報ベースのルール

接続先の IP アドレスや GeoIP データベースに基づいて判断します。「国内は直結、海外はプロキシ」を実現する中核的なルールです。

IP-CIDR192.168.0.0/16DIRECT
IP-CIDR6fe80::/10DIRECT
GEOIPCNDIRECT
  • IP-CIDR:IPv4 サブネット範囲によるマッチング。
  • IP-CIDR6:IPv6 サブネット範囲によるマッチング。
  • GEOIP:Country.mmdb を参照し、割り当て国に基づいて判定します。

プロセス / ポートベースのルール

アプリのプロセス名やポート番号で振り分けます。特定のソフト(開発ツールやゲームなど)だけ別の経路を通したい場合に便利です。

PROCESS-NAMEchromeProxy
SRC-PORT7890DIRECT
DST-PORT443Proxy
  • PROCESS-NAME:実行プロセス名で判定(macOS / Windows で有効)。
  • DST-PORT:接続先のポート番号で判定(80 や 443 など)。

ルールセット (RULE-SET)

膨大な数のルールを外部のサブスクリプションファイルにまとめ、クライアントが定期的に更新・取得する仕組みです。大規模な振り分け設定に適しています。

# rule-providers でルールセットを定義
RULE-SETgfwProxy
RULE-SETcn_domainDIRECT
  • ルールセットは YAML またはテキスト形式をサポートしています。
  • interval を設定することで、自動的な定期更新が可能です。
  • コミュニティで公開されている Loyalsoldier 氏や blackmatrix7 氏のルールセットが有名です。

ルールの順序が結果を左右します

ルールは上から順にチェックされ、最初にマッチしたものが適用され、それ以降は実行されません。よくある間違いとして、GEOIP の前に MATCH,DIRECT を置いてしまうと、すべての通信が直接接続されてしまいます。推奨される順番:

  1. ローカル / プライベート IP(IP-CIDR 192.168.0.0/16) → DIRECT
  2. プロキシ必須のドメイン / RULE-SET → Proxy ポリシーグループ
  3. 直接接続必須のドメイン / RULE-SET → DIRECT
  4. GEOIP,CN,DIRECT — 国内 IP であれば直接接続
  5. MATCH,Proxy — デフォルト設定。上記に該当しないものはプロキシ経由

TUN モード vs システムプロキシ:違いと使い分け

Clash にはトラフィックを取り込む2つの方法があります。適切なモードを選ばないと「特定のアプリにプロキシが効かない」原因になります:

システムプロキシモード
TUN 透明プロキシ
仕組み
OS に HTTP/SOCKS5 プロキシのアドレスを登録し、アプリ側からそこへ接続を要求します。
仮想ネットワークカードを作成し、ネットワーク層ですべての IP 通信をインターセプトします。
カバー範囲
OS のプロキシ設定に従うアプリのみ(ブラウザや多くの一般的なアプリ)。
すべてのプロセスの全通信。コマンドラインツールやゲームクライアントも含みます。
必要な権限
一般ユーザー権限
管理者権限 / root 権限(仮想ネットワークカードの作成に必要)
適したシーン
通常の Web 閲覧、シンプルなプロキシ利用
ゲームの高速化、ターミナルのプロキシ化、全通信の一括制御

TUN モードの設定イメージ

config.yaml
tun:
  enable: true
  stack: system # or gvisor
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

stack オプションsystem はシステムのネットワークスタックを使用し、高性能です。gvisor はユーザー空間のスタックを使用し、互換性に優れています。Mihomo カーネルは mixed 混合モードもサポートしています。

Clash DNS の動作原理:Fake-IP、Redir-Host と DNS リーク対策

DNS リークは、プロキシ利用者が最も見落としがちなセキュリティ上の盲点です。トラフィックがプロキシを通っていても、DNS クエリが地元の ISP へ明文で送信されてしまうと、訪問先のドメインが筒抜けになってしまいます。Clash はこの問題に対処するため、高度な DNS 処理モジュールを内蔵しています。

Fake-IP モード

推奨

DNS リクエストを受け取ると、Clash は即座に仮想 IP(例: 198.18.x.x)を返します。これによりアプリは即座に接続を開始でき、実際の DNS 解析はプロキシサーバー側で行われるため、ローカルでのドメイン漏洩を防げます。

1 アプリ:google.com の IP は?
2 Clash:仮想 IP 198.18.0.1 を返す
3 アプリが仮想 IP に接続。Clash がこれを傍受し、本来のドメインを特定
4 プロキシ側で解析を行い、実際のサーバーへ接続
  • 接続開始が速い(実際の DNS 応答を待たないため)
  • リーク防止効果が高い(ドメインがローカル DNS を通らない)
  • ルールエンジンとの連携が最もスムーズ

Redir-Host モード

互換モード

まずローカルで実際の DNS 解析を行い、ドメインをリアル IP に変換してからルールエンジン(GEOIP など)に渡します。互換性は高いですが、DNS クエリ自体が ISP に漏れるリスクがあります。

1 アプリ:google.com の IP は?
2 Clash が上流 DNS にリアル IP を問い合わせる
3 リアル IP が返され、ルールエンジンが GEOIP 判定を行う
4 ルールに従って直接接続かプロキシ経由かを決定
  • 特殊なネットワーク環境での互換性が高い
  • リアル IP に基づくため、GEOIP ルールの精度が高い
  • DNS クエリがローカルで発生するため、リークのリスクがある

DNS 設定リファレンス

config.yaml — dns セクション
dns:
  enable: true
  enhanced-mode: fake-ip # or redir-host
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 8.8.8.8
    - 114.114.114.114
  fallback: # used when GEOIP != CN
    - tls://1.1.1.1:853
    - https://dns.google/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN

fallbackfallback-filter の併用:海外 IP と判定された場合、自動的に暗号化された DoT / DoH サーバーで再解析を行い、DNS 汚染を防ぎます。

Clash がサポートするプロトコル:原理と選定アドバイス

プロトコルは、通信の暗号化や難読化の戦略を決定します。Clash は多彩なプロトコルをネイティブサポートしており、Mihomo (Clash Meta) カーネルではさらに次世代プロトコルが拡張されています。

Shadowsocks(SS)

定番・安定

対称鍵暗号(AES / ChaCha20)を使用して通信を暗号化し、データをランダムに見せることで DPI(ディープ・パケット・インスペクション)に対抗します。設計がシンプルで、対応クライアントが最も多いです。

暗号化AES-256-GCM / ChaCha20-Poly1305
転送層TCP / UDP
適したシーン日常利用、幅広い対応、入門者に最適

VMess

V2Ray エコシステム

V2Ray プロジェクトによる独自プロトコル。暗号化に加えてタイムスタンプ検証や難読化機能を備えています。WebSocket + TLS と組み合わせることで HTTPS 通信に完璧に擬装でき、高い遮断耐性を誇ります。

暗号化AES-128-GCM / ChaCha20-Poly1305
転送層TCP / WebSocket / gRPC / HTTP/2
適したシーン厳しい規制環境、CDN 経由の通信

Trojan

TLS 難読化

TLS レイヤー内で直接データを転送するため、外見は通常の HTTPS と全く区別がつきません。サーバー側で実際のウェブレスポンスを返すことで、プロキシの特徴をさらに隠蔽します。

暗号化TLS 1.3 (証明書検証あり)
転送層TCP / WebSocket
適したシーン高度な TLS 擬装、HTTPS への完全な擬装

Hysteria2

Mihomo サポート

QUIC (UDP) をベースにした次世代の高速プロトコル。弱網環境やパケットロスが多い回線において、TCP ベースのプロトコルより圧倒的に高いパフォーマンスを発揮します。不安定な長距離回線に最適です。

転送層QUIC (UDP ベース)
メリット弱網環境に強く、パケットロス耐性が高い
利用要件Mihomo (Clash Meta) カーネル必須

TUIC

Mihomo サポート

同じく QUIC ベースで、低遅延と接続の再利用に特化。0-RTT ハンドシェイクにより接続開始を高速化。ゲームやリアルタイム通話など、レスポンス速度が重視されるシーンに最適です。

転送層QUIC (UDP) + 0-RTT
メリット超低遅延な接続開始、高いリソース効率
利用要件Mihomo (Clash Meta) カーネル必須

WireGuard

Mihomo サポート

コードが極めて軽量で監査が容易な、現代的な VPN プロトコル。ChaCha20 + Poly1305 を採用し、カーネルレベルの実装により最高峰のパフォーマンスを誇ります。Mihomo はこれをアウトバウンドとして利用可能です。

暗号化ChaCha20-Poly1305 / Curve25519
転送層UDP
利用要件Mihomo (Clash Meta) カーネル必須

ポリシーグループ詳解:URL-Test 自動選択、Fallback、負荷分散

ポリシーグループは、ルールを「まとめる」役割とノードを「振り分ける」役割を担います。ルールに合致した通信は、直接ノードへ行くのではなく、まずポリシーグループへ渡されます。グループ内で自動測速や死活監視を行い、最適なノードを決定します。

select ・ 手動選択

ユーザーがノード一覧から手動で使用するノードを選びます。クライアント画面で直接操作する最も標準的な方法です。経路を固定したい場合に使用します。

type: select
proxies: [HK-01, SG-02, JP-03]

url-test ・ 低遅延ノードを自動選択

全ノードに対して定期的に HTTP リクエストを送信し、最も応答が速いノードを自動で選択します。一定以上の差(tolerance)がある場合のみ切り替わるため、頻繁な変動を抑えられます。

type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50

fallback ・ 利用可能なノードへ自動切替

リストの先頭から順に使用し、ノードがダウン(健康診断失敗)した場合に次のノードへ自動で切り替えます。常に接続を維持したいシーンに適しています。

type: fallback
url: http://www.gstatic.com/generate_204
interval: 180

load-balance ・ 負荷分散

複数のノードを順番、あるいはランダムに利用して通信を分散させます。全体の帯域を最大限活用したい場合に有効です。Mihomo はセッション維持のための consistent-hashing に対応しています。

type: load-balance
strategy: consistent-hashing
url: http://www.gstatic.com/generate_204

Clash 従来版 vs Mihomo (Clash Meta):どちらを使うべき?

現在、Clash には2つの主要なブランチがあります。日常会話では混同されがちですが、特にプロトコルのサポート範囲や TUN モードの拡張機能において大きな違いがあります。

Clash (従来版)

Dreamacro/clash
  • Shadowsocks / VMess / Trojan / SNELL
  • HTTP / SOCKS5 プロキシ
  • Rule / Global / Direct モード
  • Fake-IP / Redir-Host DNS
  • TUN モード (基本機能)
  • Hysteria2 / TUIC / WireGuard
  • 拡張 TUN (gVisor / mixed スタック)
  • 外部ルールセット (rule-providers) の高度な機能
VS

Mihomo(Clash Meta)

metacubex/mihomo
  • Shadowsocks / VMess / Trojan / SNELL
  • Hysteria2 / TUIC / WireGuard / VLESS
  • Rule / Global / Direct / Script モード
  • Fake-IP + fallback-filter による強力な DNS
  • 拡張 TUN (system / gVisor / mixed 対応)
  • rule-providers によるリモートルールセット購読
  • Sub-Rule、GeoSite データベース
  • マルチアーキテクチャ:x86_64 / ARM / MIPS

結論:新規ユーザーの方は、プロトコル対応がより完全で TUN モードも強力な Mihomo (Clash Meta) カーネルを採用したクライアント(Clash Verge Rev、Mihomo Party、Clash Meta for Android など)を直接選ぶのが最も賢明です。従来版の Clash も安定していますが、現在の開発の主流は Mihomo ブランチへと移行しています。

コア原理に関する FAQ

なぜルールの順番がそれほど重要なのでしょうか?
ルールエンジンは上から順に照合を行い、最初に一致したものが適用されます。範囲の広すぎる MATCH ルールを上に置いてしまうと、それより下の詳細なルールが一生実行されなくなります。理想的な順番は:ローカルネットワーク → 特定ドメインのプロキシ設定 → 特定ドメインの直接接続 → GEOIP による判定 → 最後に MATCH で一括設定、という流れです。
Fake-IP モードで問題が起きるアプリはありますか?
一部のゲームや LAN 内のサービスなど、特定の IP 範囲 (198.18.x.x) を特別扱いするアプリで不具合が出ることがあります。その場合は Clash の fake-ip-filter 設定に該当ドメインを追加することで、通常の DNS 解析(リアル IP)を行わせることができます。
TUN モードを有効にするとシステムが重くなるのはなぜですか?
TUN モードはすべての通信をインターセプトしてユーザー空間で処理するため、カーネルのスタックを直接通るよりオーバーヘッドが発生します。Mihomo の system スタックは gvisor より高性能ですが、マシンスペックが不足している場合は、特定のアプリのみシステムプロキシを利用し、TUN はオフにすることをお勧めします。
VMess と Shadowsocks はどちらが安全ですか?
暗号化の強度自体(AEAD 暗号化)は同等です。違いは通信の特徴にあります。Shadowsocks は特徴が比較的シンプルですが、VMess + WebSocket + TLS の構成は通常の HTTPS 通信に完全に擬装できるため、厳しい検知環境下でも遮断されにくいというメリットがあります。
url-test ポリシーグループの測速用 URL には何を指定すべきですか?
応答が速く、安定している URL を選ぶ必要があります。Google の http://www.gstatic.com/generate_204 や Cloudflare の http://cp.cloudflare.com/generate_204 が一般的です。国内アドレスを使うとプロキシ経由の判定を誤る可能性があるため、国外のアドレスを推奨します。
Country.mmdb とは何ですか? どのくらいの頻度で更新すべきですか?
Country.mmdb は MaxMind 形式の IP 位置情報データベースです。GEOIP ルールがこれを使って IP を国コードに紐付けます。1〜3ヶ月に一度の更新を推奨します。最新のクライアントなら自動更新も可能です。Loyalsoldier 版などコミュニティで精査された版を使うと、より正確な判定が期待できます。

仕組みを理解したら、次は:Clash をダウンロードして設定

お使いのプラットフォームに合ったクライアントを選び、3ステップで設定を完了させて、インテリジェントな自動振り分けを体験しましょう。