設定の読み方・項目の照合

Clashの用語ガイド

クライアントからネットワークスタックまで、用語・役割・適用条件を整理。まず用語を確認し、実際の設定と照らし合わせましょう。

カーネルとクライアント

カーネルは接続を処理し、クライアントは操作画面を提供します。アプリがプロキシを利用するかはシステム設定にも左右されます。トラブル時は、まずこの3つを切り分けましょう。

ClashカーネルProxy engine
カーネルは設定の読み込み、プロキシ接続の確立、ルールの照合、DNSの処理を担うネットワークエンジンです。GUIはカーネルを管理する手段の一つにすぎません。オリジナルのClashと後継の派生カーネルでは、対応する設定項目が異なります。古い設定をインポートできても、すべての機能が有効になるとは限りません。項目のエラーが出た場合は、まず実際に動作しているカーネルを確認し、対応する設定ドキュメントを参照してください。
mihomoFormerly Clash Meta
mihomoは、Clash Metaプロジェクトを引き継ぐオープンソースのプロキシカーネルです。ルールベースの振り分け、TUN、Fake-IP、複数のプロトコルに対応しています。単独で実行できるほか、Clash Verge RevなどのGUIクライアントからも利用できます。クライアントを選ぶ際は、画面の使いやすさとカーネルの互換性を分けて比較しましょう。アプリ名にClashとあるかだけでは判断できません。
GUIクライアントGUI client
GUIクライアントでは、サブスクリプションのインポート、プロキシグループの切り替え、ログの確認、自動起動などの日常操作を行います。通常はカーネルのプロセスやシステムプロキシも管理します。画面上のスイッチは、まずクライアント独自の設定に保存されてから実行設定に反映される場合があり、元のサブスクリプションファイルに同じ項目があるとは限りません。OSごとのクライアント一覧を確認し、必要な機能の設定場所も調べておきましょう。
システムプロキシSystem proxy
システムプロキシは、OSがアプリに提供するプロキシアドレスの設定です。通常は、ローカルでカーネルが待ち受けるHTTPまたはSOCKSポートを指定します。ブラウザーなど、この設定に従うアプリはプロキシを使いますが、独自にネットワーク接続を行うアプリやシステム設定を無視するアプリは使わない場合があります。有効にしても一部のアプリが直接接続するなら、ノードの障害とは限りません。アプリ独自のプロキシ設定を確認するか、TUNによる通信の取り込みを検討してください。
混合ポートmixed-port
mixed-portは、HTTPとSOCKSの両方のプロキシ接続を受け付けるローカル待ち受けポートを指定します。例として7890がよく使われますが、固定の値ではありません。アプリに入力するポートはカーネルの設定と一致させ、同じアドレスのポートをほかのプロセスが使用していないことを確認してください。これはローカルの受付ポートであり、リモートノードのポートではありません。詳しくはポート設定をご覧ください。

プロキシプロトコル

プロトコルは接続の確立方法を定めます。サーバーアドレス、認証情報、伝送方式、証明書の設定を一組として確認してください。

プロキシノードProxy outbound
ノードはプロキシの出向先を定義するパラメーター一式で、通常はserver、port、type、認証情報などを含み、proxiesに記述できます。ノード名は設定内の識別子にすぎず、サーバーの所在地、帯域幅、利用可否を示すものではありません。ノードは接続を定義し、プロキシグループは選択肢から接続先を決めるもので、別の概念です。
Shadowsockstype: ss
Shadowsocksは暗号化プロキシプロトコルの一つです。mihomoではtype: ssと指定し、通常は暗号化方式のcipherとパスワードを設定します。暗号化方式、サーバーのポート、パスワードはサーバー側と一致させてください。追加のプラグイン設定が必要な構成もあります。アドレスとポートだけをコピーしてもインポートは完了せず、プロトコルの設定が不足すると接続やハンドシェイクに失敗する場合があります。
VMesstype: vmess
VMessはUUIDでユーザーを識別するプロキシプロトコルです。設定ではvmessを指定し、WebSocketなどの伝送方式を組み合わせる場合があります。uuidだけでなく、network、TLS、リクエストパス、ホスト名なども確認してください。異なる伝送方式の設定を混在させず、認証やハンドシェイクのエラーが出た場合は、表示名を何度も変えるのではなくノードの設定全体を照合しましょう。
VLESStype: vless
VLESSは軽量なプロキシプロトコルの一つです。設定ではtype: vlessを使い、ユーザー識別にUUIDを使うのが一般的です。プロトコル自体は通信を暗号化しないため、TLSやREALITYなどのセキュリティ設定を確認してください。サーバー名、伝送方式、認証情報はノードの指定どおりに保ちましょう。別のプロトコルの設定ブロックを、種類の名前だけ書き換えて使うことはできません。
Trojantype: trojan
Trojanは通常、TLSで通信し、パスワードで認証するプロキシプロトコルです。設定ではtype: trojanを指定します。接続にはパスワードのほか、正しいsniやサーバー証明書が必要な場合があります。構成によっては追加の伝送設定も使います。証明書エラーが出たら、証明書検証を無効にするのではなく、まずシステム時刻、サーバー名、設定の入手元を確認してください。

ルールと振り分け

ルールが接続を照合し、プロキシグループが出向先を選択します。接続先はモード、ルールの優先順位、グループ内の選択によって決まります。

ルールベースの振り分けmode: rule / rules
ルールモードでは、rulesを上から順に照合し、最初に一致したルールで指定の出向先またはプロキシグループを使用します。ドメインなどの個別ルールは、フォールバックのMATCHより前に記述してください。たとえばDOMAIN-SUFFIX,example.com,DIRECTは、対象ドメインとサブドメインを直接接続します。DIRECTはその接続の出向先を指すだけで、クライアントを終了する設定ではありません。グローバルモードに切り替えた場合は、ルールモードと同じ振り分けにはなりません。
GeoIPGEOIP
GeoIPは、接続先IPアドレスのデータベース上の地理情報をもとに照合します。たとえばGEOIP,CN,DIRECTのように指定します。結果はデータの更新状況や接続先アドレスに左右され、CDN、複数地域にまたがるサーバー、データベースの誤差により、想定と異なる場合があります。no-resolveを追加すると、このルールによるドメイン名の能動的な解決を避けられます。ただし、接続に利用可能なIPアドレスがまだない場合は条件に一致しないことがあります。
GeoSiteGEOSITE
GeoSiteは、あらかじめ整理されたドメイン分類を使ってサービスやサイトを照合します。IPアドレスの地理情報で判定するGeoIPとは異なります。ルールで指定するカテゴリ名が、実際に読み込んだデータに存在する必要があります。データの提供元によって、カテゴリ名や収録範囲は異なります。リアルタイムのサイト分類サービスではありません。ドメインが一致しない場合は、ノードだけを変更するのではなく、データの内容や更新状況、先行するルールを確認してください。
ルールセットrule-providers / RULE-SET
ルールセットでは、多数の照合条件を独立したファイルにまとめ、rule-providersで読み込み、RULE-SETから参照します。プロバイダーのbehaviorによって内容の解釈方法が決まり、一般的な種類にはdomain、ipcidr、classicalがあります。ルールセットが照合条件を提供し、実際の出向先と優先順位はメイン設定のrulesが決定します。
プロキシグループproxy-groups
プロキシグループは、proxy-groupsで定義する出向先の選択ロジックです。ノード、別のグループ、組み込みの出向先などを含められます。selectは手動選択、url-testはテスト結果に基づく自動選択、fallbackは利用可能な接続先への切り替えに使います。自動選択がすべての用途に適しているとは限らず、テスト先や判定条件によって結果は変わります。操作方法はプロキシグループの選び方をご覧ください。

DNSとネットワークスタック

ドメインの名前解決、通信の取り込み、出向先の選択はそれぞれ別の処理です。TUNとFake-IPは組み合わせて使えますが、互いに置き換えられる機能ではありません。

DNSDomain Name System
DNSはドメイン名をアドレスなどのレコードに変換します。mihomoではdnsセクションに、上流DNSや名前解決の方針を設定できます。nameserverは通常の名前解決に使う上流DNS、proxy-server-nameserverはプロキシサーバーのドメイン名の解決に使うDNSを指定します。DNSを設定しただけで、すべての問い合わせがカーネルを通るとは限りません。OS、ブラウザー、TUNを含め、実際の名前解決経路を確認してください。
Fake-IPdns.enhanced-mode: fake-ip
Fake-IPは、ドメイン名の問い合わせにマッピングアドレスを返します。後続の接続がカーネルに届くと、マッピングからドメイン名を復元してルールを照合します。dns.enhanced-mode: fake-ipで有効になり、返されるアドレスはWebサイトの実サーバーのアドレスではありません。実際の名前解決結果を必要とするアプリには、互換性に応じてfake-ip-filterを設定できます。フィルターの動作を理解しないまま、すべてのドメインを除外することは避けてください。
TUNモードtun.enable / auto-route
TUNは仮想ネットワークインターフェースとルーティング設定を使って、より多くのアプリの通信をカーネルに取り込みます。システムプロキシに従わないアプリにも有効です。tun.enableで有効にしますが、auto-routeやstackなどの項目も通信の取り込み方に影響し、通常はサービスモードやOSの権限が必要です。カーネルに取り込まれた後もモードとルールに従って振り分けられるため、TUNを有効にしてもすべての接続がリモートプロキシを経由するわけではありません。
ドメイン名のスニッフィングsniffer
ドメイン名のスニッフィングは、HTTP、TLS、QUICなど、対応するプロトコルのハンドシェイク情報からドメイン名を取得し、宛先IPアドレスしか分からない接続でもドメインルールを照合できるようにします。snifferで設定し、認識できるかどうかは通信の形式とカーネルの対応状況によって異なります。アプリの通信内容を復号する機能ではありません。元の宛先とスニッフィングしたドメイン名に違いがある場合は、override-destinationの役割を理解してから設定を変更してください。
DNSリークDNS leak
DNSリークとは、ドメイン名の問い合わせが想定した名前解決経路を通らず、ローカルのインターネットサービスプロバイダーや別のDNSリゾルバーに送られる状態です。Web通信がプロキシ経由でも、DNS問い合わせが同じ経路を通っているとは限りません。ブラウザーのセキュアDNS、IPv6、ほかのネットワークツールもテスト結果に影響します。確認する際は、検査ページ、システムDNS、ブラウザー設定、カーネルログをあわせて調べ、DNSリゾルバーの識別情報と問い合わせの実際の経路を区別してください。

サブスクリプションと設定

サブスクリプションが設定内容を提供し、クライアントがインポートとマージを行い、カーネルが最終的な設定を実行します。更新の前後で、設定が置き換わっていないか、ローカルの変更が保持されているか確認してください。

サブスクリプションSubscription
サブスクリプションは、クライアントが設定やノード一覧を定期的に取得するURLです。完全なClash YAMLが返る場合もあれば、Base64でエンコードされたノードリンクが返る場合もあります。形式によっては同じインポート画面で扱えないため、クライアントの対応形式を確認してください。URLにはアクセス情報が含まれることがあるので、機密情報として扱い、スクリーンショットを公開したり、信頼できない変換サービスに貼り付けたりしないでください。更新に失敗しても、既存のノードがすぐ使えなくなるとは限りません。
YAMLconfig.yaml
YAMLはClashの設定でよく使われるテキスト形式です。インデントで階層を表し、リスト項目は通常-で始まります。編集時はTabではなくスペースを使い、設定項目の階層を保ってください。特殊文字は引用符で囲む必要がある場合があります。構文を解析できても、テキストの構造が有効だと分かるだけです。現在のカーネルが項目に対応していることや、プロキシグループ名とルールの参照先が一致していることまでは保証されません。
プロキシプロバイダーproxy-providers
proxy-providersではノードの一覧を個別に管理できます。取得先URL、キャッシュ先、更新間隔、ヘルスチェックを設定し、プロキシグループからuseで参照します。設定全体のサブスクリプションとは異なり、ノード一覧だけを更新してメイン設定の振り分けルールを保てます。プロキシプロバイダーが出向先を提供するのに対し、rule-providersは照合条件を提供するため、相互に置き換えることはできません。
ローカル設定の上書きLocal override / merge
ローカル設定の上書きは、リモートのサブスクリプションにローカル設定をマージまたは反映する方法です。ポート、DNS、TUN、自作ルールの保持によく使われます。設定画面の名称は「上書き」「マージ」「スクリプト」など、クライアントによって異なります。リストを置き換えるか追加するかもクライアントの仕様次第です。ダウンロードしたサブスクリプションを直接編集すると、次回の更新で変更が失われる場合があります。クライアントが対応する永続化方法を使い、エディターの表示だけでなく最終的な実行設定も確認してください。
ノードのレイテンシLatency test / url-test
クライアントに表示されるレイテンシは、通常、指定されたテスト先へのアクセスにかかった時間です。DNS、接続の確立、プロトコルのハンドシェイクなどが含まれる場合があり、必ずしもICMP Pingの値ではありません。テスト先、タイムアウト時間、ネットワークの状態によって結果は変わります。数値が低くてもダウンロード速度が速いとは限りません。ノードを比較する際は同じ条件でテストし、実際の用途でも確認してください。タイムアウトは今回のテストが完了しなかったことを示すだけで、すべてのサービスに接続できない証拠にはなりません。
外部コントローラーexternal-controller
external-controllerは、カーネル管理APIの待ち受けアドレスを指定します。管理パネルから接続の確認、プロキシグループの切り替え、一部の実行状態の変更などに利用できます。HTTPやSOCKSのプロキシ受付ポートではないため、アプリのプロキシ設定には入力しないでください。通常はローカルからのアクセスに制限します。リモート管理が必要な場合は、待ち受け範囲、認証、ファイアウォールをあわせて検討し、接続を便利にするためだけにインターネットへ公開しないでください。