CLASH / LINUX / 設定リファレンス
Clash用語集
カーネルから設定項目、システムサービスまで、導入手順に沿って用語を確認できます。「通信をどうカーネルに取り込むか」と「取り込んだ通信をどう振り分けるか」を分けて考え、変更が必要な設定を探しましょう。
このページでは24の用語を紹介します。各カードはURLのアンカーから個別に参照できます。YAMLの完全な例は設定リファレンスを、初めて導入する場合は入門ガイドをご覧ください。
CORE / CLIENT
カーネルとクライアント
画面は管理を担い、カーネルは接続を処理します。サブスクリプションやノードは設定データであり、ソフトウェアの実行状態とは別のものです。
- mihomoカーネル
- mihomoは、プロキシサーバーへの接続、ルールの解析、DNS処理を担うネットワークプロキシカーネルです。Clashの設定体系を引き継ぎながら機能を拡張しています。GUIクライアントから管理できるほか、Linux上で単独プロセスとしても実行できます。カーネルとGUIのバージョンは別々に管理されます。設定項目が使えるか確認する際は、クライアントの「バージョン情報」だけでなく、実際に動作しているカーネルのバージョンを確認してください。
mihomo -v
- GUIクライアント
- GUIクライアントには、サブスクリプションのインポート、プロキシグループの選択、ログ確認、サービス管理などの機能があります。通常はバックグラウンドでプロキシカーネルを起動します。画面に保存された設定が、カーネルの実際の読み込み内容と一致するとは限りません。トラブル時は、現在の設定や上書き項目、カーネルログを確認してください。Clash Verge RevやFlClashを選ぶ際は、インストーラーが対応するディストリビューションとCPUアーキテクチャも確認しましょう。
- Linuxクライアントを見る
- サブスクリプション
- サブスクリプションは、プロキシノードや設定一式を取得するためのリモートURLで、プロキシプロトコルそのものではありません。取得内容はノード一覧の場合もあれば、プロキシグループ、DNS、ルールを含む場合もあります。インポート前に形式の互換性を確認し、アクセス情報を含む可能性があるためURLは慎重に扱ってください。更新によってローカルの変更が上書きされる場合があります。長期的に保持したい設定は、クライアントが対応する上書き機能に追加してください。
proxy-providers
- ノード
- ノードは、プロキシサーバーへの接続に必要なパラメーターの集まりです。プロトコル、サーバーアドレス、ポート、認証情報やトランスポート設定などが含まれます。画面に表示される名前は設定内で参照するためのもので、名前だけではサーバーの所在地や接続元IP、利用可否は判断できません。ノードを設定に追加しただけでは通信に使われず、プロキシグループやルールで選択する必要があります。
proxies / type / server / port
- 遅延とヘルスチェック
- クライアントの遅延表示は、通常、指定されたテスト先へのアクセスにかかった時間です。計測に含まれるネットワーク区間は実装によって異なります。ダウンロード速度や、すべてのサイトでの使い勝手を示すものではありません。結果を比較する際はテスト先を統一し、タイムアウトしたらログと実際のリクエストを確認してください。ヘルスチェックはノードの利用可否を判定します。頻繁に実行するとネットワークリクエストが増え、モバイル端末がスリープから復帰する回数も増えることがあります。
health-check / url / interval
PROTOCOL
プロキシプロトコル
ローカルアプリが接続するプロキシの入口と、カーネルがリモートノードに接続するためのプロトコルは、別々の通信経路です。
- HTTPプロキシ
- HTTPプロキシは、アプリが明示的に接続するプロキシの入口です。HTTPSリクエストでは通常、CONNECTでトンネルを確立します。入口にHTTPを使っていても、接続先サイトがHTTPに限られるわけではありません。ブラウザーやコマンドラインツールには、正しいプロキシアドレスとポートを設定してください。プロキシアドレスのプロトコル接頭辞は、アプリからプロキシへの接続方式を示します。接続先URLがHTTPSだからといって、安易にHTTPSプロキシの入口へ変更しないでください。
http://127.0.0.1:7890
- SOCKS5
- SOCKS5は汎用プロキシプロトコルで、TCP接続に利用でき、アプリとサーバーの双方が対応していればUDPも転送できます。ドメイン名をローカルとプロキシ側のどちらで解決するかはアプリの設定によります。たとえばcurlのsocks5hでは、ドメイン名の解決をプロキシ側に任せます。SOCKSの入口を設定して一部のアプリしか使えない場合は、ルールを変更する前に、そのアプリがSOCKSに対応しているか確認してください。
socks5h://127.0.0.1:7890
- Shadowsocks
- Shadowsocksは暗号化プロキシプロトコルです。設定には通常、サーバーアドレス、ポート、暗号化方式、パスワードが含まれます。これはカーネルからリモートサーバーへの接続方式であり、ローカルの待ち受け口ではありません。暗号化方式はサーバー側と一致させ、プラグインを使う場合は双方の対応も確認してください。接続できない場合は、プロトコルの設定とサーバーへの疎通をそれぞれ確認してください。ローカルのmixed-portにリモートサーバーのポートを設定しないでください。
type: ss / cipher / password
- Trojan
- Trojanは通常、TLSでリモートのプロキシサーバーに接続します。設定にはサーバーアドレス、ポート、パスワード、証明書関連の項目が含まれます。SNIはTLSハンドシェイクでサーバー名を通知する仕組みで、接続先アドレスと異なる場合があります。証明書エラーが出たら、まずドメイン名、システム時刻、証明書チェーンを確認してください。証明書の検証を無効にするとセキュリティ上の前提が変わるため、接続問題の恒久対策として安易に使わないでください。
type: trojan / sni / password
CONFIG.YAML
設定項目
設定項目名はそのまま使います。階層やポート、DNSの動作を変更したら、設定をテストしてからサービスを再読み込みしてください。
- YAML
- YAMLはmihomoの設定ファイルで使われるデータ形式です。インデントで階層を表し、リスト項目は通常ハイフンで始まります。同じ階層の項目はインデントをそろえ、空白の代わりにTabを使わないでください。変更後は設定をテストしてから、サービスを再読み込みします。特殊文字を含む文字列は引用符で囲むと、サブスクリプションURLやパスワードをコピーした際に別の構造として誤認されるのを防げます。
mihomo -t -d ~/.config/mihomo
- mixed-port
- mixed-portは、HTTPとSOCKSの両方に対応するローカルの混合プロキシポートを指定します。アプリは対応するプロキシ形式で同じ入口に接続できます。ポートを設定しただけで、すべてのアプリが自動的に使うわけではありません。システムプロキシやアプリのプロキシ設定、環境変数を設定し、待ち受けアドレスも確認してください。7890はよく使われる設定例で、固定値ではありません。ポートが競合する場合は変更し、アプリ側の設定も合わせてください。
mixed-port: 7890
- external-controller
- external-controllerは、カーネル制御APIの待ち受けアドレスを指定します。パネルから接続状況の確認、プロキシグループの切り替え、実行状態の変更などを行うためのものです。Web通信のプロキシ入口ではありません。ローカルで使う場合はループバックアドレスへのバインドを優先し、リモート管理ではsecretを設定してネットワークアクセスを制限してください。パネルのポートをシステムプロキシのポートに設定すると、カーネルは起動していてもアプリから正常にアクセスできないことがあります。
external-controller: 127.0.0.1:9090
- Fake-IP
- Fake-IPモードでは、DNSリクエストに内部マッピング用の合成アドレスを返し、後続の接続でカーネルが元のドメイン名を特定できるようにします。このアドレスは実際のサーバーアドレスではありません。一部のLAN内サービスや特殊なアプリではfake-ip-filterへの追加が必要です。設定変更後は、既存のDNSキャッシュも考慮してください。合成アドレスが表示されても、それだけで名前解決の失敗とは限りません。後続の接続をカーネルが正しく受け取り、元のドメイン名に戻せるかが重要です。
dns.enhanced-mode / fake-ip-filter
- DNS漏れ
- DNS漏れとは、名前解決のリクエストが想定したDNS処理経路から外れる状態を指します。たとえば接続はプロキシ経由でも、DNSクエリはローカルネットワークのリゾルバーに送られている場合です。システムDNS、ブラウザーのセキュアDNS、アプリ内蔵の名前解決、TUNの対象範囲をあわせて確認してください。Webページが開くかどうかだけでは判断できません。アプリによって名前解決の経路が異なるため、パケットキャプチャやログで実際の宛先と通信経路を確認してください。
dns / nameserver / dns-hijack
- proxy-providers
- proxy-providersは、ノードの取得元を参照可能な独立したグループとして定義します。プロキシグループからuseでグループ名を指定します。HTTPタイプではintervalで更新間隔を設定し、health-checkでノードを確認できます。ノードの提供元がrulesやDNSの設定も提供するとは限りません。取得に失敗した場合は、ダウンロードリクエストの失敗と取得内容の解析エラーを切り分けてください。前者はネットワーク経路、後者はデータ形式の確認が必要です。
proxy-providers / use / interval
RULES / POLICY
ルールとプロキシグループ
ルールで接続の振り分け先を決め、プロキシグループで利用する出口を選びます。両者は名前で関連付けます。
- ルール分岐
- ルール分岐では、ドメイン名、宛先IP、ポートなどの条件に応じて、接続を直接接続、拒否、または指定したプロキシに振り分けます。通常のルールは上から順に評価され、先に一致したルールが優先されます。変更時は接続ログで一致したルールを確認し、順序の変更や振り分け先の修正が必要か判断してください。末尾のMATCHは通常、どのルールにも一致しない通信の受け皿です。前のほうに移動すると、後続のルールが一致しなくなります。
rules / DOMAIN-SUFFIX / MATCH
- プロキシグループ
- プロキシグループは、ノードや組み込みポリシー、ほかのグループをまとめ、ルールから参照できる振り分け先にします。selectは手動選択、url-testはテスト結果による選択、fallbackは利用可否に応じた切り替えに使います。グループ名はルール内の参照と一致させ、グループ間の参照が循環しないようにしてください。自動選択の結果はテスト先、チェック間隔、許容差にも左右されます。新しい接続のたびにすべてのノードが再測定されるわけではありません。
proxy-groups / select / url-test / fallback
- GeoIPとGeoSite
- GeoIPはIPデータセットからアドレスの所属を判定し、GeoSiteはドメインのデータセットからサイトの分類を判定します。いずれもリアルタイムの位置情報ではなく、すべてのCDNや新しいドメインを網羅する保証もありません。使用前にデータソース、分類名、カーネルの対応状況を確認してください。誤った振り分けが起きたら、まずルールがドメイン名と名前解決後のIPのどちらに一致しているか確認し、ドメインルールの追加かデータの更新かを判断します。
GEOIP / GEOSITE
- rule-providers
- rule-providersはルールを独立したグループとして定義し、RULE-SETルールから参照します。behaviorとformatはファイルの内容に合わせる必要があります。たとえばドメインの一覧と、完全なルールセットでは記述方法が異なります。最終的な振り分け先は参照元で指定します。プロキシノードを接続可能な状態で提供するproxy-providersとは異なり、rule-providersが提供するのは照合条件です。
rule-providers / RULE-SET / behavior
- Rule・Global・Directモード
- Ruleモードは設定ルールに従って通信を振り分けます。Globalモードはカーネルに入った接続をグローバルポリシーに渡し、Directモードは接続先に直接接続します。これらのモードが対象にするのは、すでにカーネルに入った通信だけです。Globalに切り替えてもプロキシ未設定のアプリが自動的に接続されるわけではなく、TUNの有効化とも異なります。問題の切り分けにはモードを一時的に切り替え、ルール選択とノード接続のどちらに原因があるか確認してから、通常の設定に戻してください。
mode: rule / global / direct
LINUX / RUNTIME
Linuxのシステム機能
権限、プロセス、ルートはシステム側の設定です。設定ファイルの構文が正しくても、実行条件が整っているとは限りません。
- TUNモード
- TUNは仮想ネットワークデバイスでIPパケットを受け取り、ルーティングやDNSの設定と組み合わせてアプリの通信を取り込みます。Linuxでは通常、ネットワーク管理に必要な権限が求められます。tun.enableを有効にした後も、画面のスイッチだけで判断せず、デバイスやルート、ほかのVPNとの競合を確認してください。tun.stackはプロトコルスタックの実装を指定します。ruleやglobalなどの振り分けモードとは別の設定です。
tun.enable / tun.stack / tun.auto-route
- systemdユーザーサービス
- systemdユーザーサービスはユーザー単位のマネージャーで実行され、systemctl --userで管理します。サービスファイルは通常、~/.config/systemd/user/に置きます。システムサービスとは管理範囲や権限、ログのコンテキストが異なります。ユーザーのログアウト後も動作するかは、ユーザーマネージャーのライフサイクルとlingerの設定によります。サービスファイルを変更したら、daemon-reloadを実行してからサービスを再起動してください。
systemctl --user status mihomo
- Linux capabilities
- Linux capabilitiesは、特権の一部をプロセスに個別付与できる機能に分割します。たとえばCAP_NET_ADMINはネットワークデバイスやルートの管理に関係します。バイナリに権限を設定する前に、ファイルの入手元と必要性を確認してください。実行ファイルを置き換えると、既存のファイルケイパビリティが失われる場合があるため、再確認が必要です。ファイルケイパビリティ、systemdのケイパビリティ制限、実行環境がそれぞれ影響するため、権限エラーが出たらサービスログも確認してください。
CAP_NET_ADMIN / getcap / setcap
- プロキシ環境変数
- http_proxy、https_proxy、all_proxyは、対応するアプリにプロキシアドレスを渡す環境変数です。no_proxyではプロキシを経由しない接続先を指定します。変数は通常、起動時の環境から引き継がれるため、すでに実行中のプログラムには自動適用されません。大文字・小文字やプロトコル形式の対応はツールによって異なる場合があります。デスクトップブラウザー、ターミナルのコマンド、systemdサービスでは環境が異なることがあります。ターミナルで接続できても、すべてのアプリがプロキシを使っているとは限りません。
http_proxy / https_proxy / all_proxy / no_proxy