config.yaml構造の全体像
完全な設定ファイルはいくつかのトップレベルのフィールドで構成されています。この表を理解すれば、以降の各セクションはそれぞれのフィールドの詳しい書き方の説明になります:
| フィールド | 役割 |
|---|---|
port / socks-port | ローカルHTTP / SOCKS5プロキシポート |
allow-lan | LAN内のデバイスからローカルプロキシへの接続を許可するかどうか |
mode | 動作モード:rule(ルールベースルーティング)、global(グローバルプロキシ)、direct(グローバル直接接続) |
log-level | ログの詳細度:silent / error / warning / info / debug |
external-controller | RESTful APIのリスンアドレス。ダッシュボード系クライアントと併用 |
dns | DNSルーティングと漏洩防止に関する設定 |
proxies | 手動で記述するノードリスト(サブスクリプションのノードはここに書く必要はありません) |
proxy-groups | プロキシグループの定義 |
proxy-providers | リモートノードプロバイダー(サブスクリプションリンクの基盤となる仕組み) |
rule-providers | リモートルールセットプロバイダー |
rules | 最終的に適用されるルーティングルールのリスト。上から順に照合 |
config.yaml(またはその中のproxies/rules部分)をリクエストし、ローカル設定に統合する仕組みです。この構造を理解しておくと、サブスクリプションの問題を手動で調査する際にかなり役立ちます。
プロキシプロトコルパラメータ詳細
サブスクリプションに完全に依存せず、ノードを手動で追加したい場合は、proxiesフィールド配下の主要プロトコルのコアパラメータを以下に示します:
Shadowsocks
コアとなるフィールドはcipher(暗号方式、例:aes-256-gcm、chacha20-ietf-poly1305)とpasswordです。一部のノードではplugin(obfsやv2ray-pluginなど)を使ってトラフィックを難読化することもあります。
VMess
uuidとalterId(新しいバージョンでは通常0)が必要で、cipherは一般的にautoを使います。TLSが有効なノードの場合はtlsやservername(SNI)も設定が必要です。
Trojan
コアとなるフィールドはpasswordとsniです。Trojanはデフォルトで標準TLSを強制し、通常のHTTPS通信になりすますため、sniが証明書のドメインと一致しているかどうかが接続の成否に直結します。
Hysteria2
QUICプロトコルをベースとし、コアとなるフィールドはpasswordとup / down(アップロード/ダウンロード帯域のヒント値)です。弱い回線や高遅延の環境では、従来のTCPプロトコルより安定する傾向があります。
WireGuard
他のプロトコルとはフィールドの構成が異なります:private-key、相手側のpublic-key、そしてip(WireGuardの内部ネットワーク上での自分のアドレス)が必要です。設定はやや低レベルで、通常はノード提供元から完全な設定スニペットがそのまま渡されます。
各プロトコルのフィールド例を見る
proxies:
- name: "ss-node"
type: ss
server: example.com
port: 443
cipher: aes-256-gcm
password: "your-password"
- name: "trojan-node"
type: trojan
server: example.com
port: 443
password: "your-password"
sni: example.com
- name: "hy2-node"
type: hysteria2
server: example.com
port: 443
password: "your-password"
up: "50 Mbps"
down: "200 Mbps"
ルール構文完全リファレンス
ルールの形式は統一されており、ルールタイプ,マッチ対象,ターゲットポリシーという形で上から順に照合し、一致した時点で処理を停止します。以下によく使われるルールタイプの一覧を示します:
| ルールタイプ | マッチ対象 | 例 |
|---|---|---|
DOMAIN | 完全一致するドメイン | DOMAIN,ad.example.com,REJECT |
DOMAIN-SUFFIX | ドメインのサフィックス | DOMAIN-SUFFIX,google.com,PROXY |
DOMAIN-KEYWORD | ドメインに含まれるキーワード | DOMAIN-KEYWORD,youtube,PROXY |
DOMAIN-REGEX | 正規表現でドメインを照合 | DOMAIN-REGEX,^ad\d+\.com$,REJECT |
GEOIP | IPの所在地(GeoIPデータベースと連携) | GEOIP,JP,DIRECT |
IP-CIDR / IP-CIDR6 | IPv4 / IPv6のアドレス範囲 | IP-CIDR,192.168.0.0/16,DIRECT |
SRC-IP-CIDR | リクエスト元のローカルソースIP範囲 | SRC-IP-CIDR,192.168.1.100/32,DIRECT |
SRC-PORT / DST-PORT | 送信元ポート / 宛先ポート | DST-PORT,22,DIRECT |
PROCESS-NAME | リクエスト元のプロセス名(アプリ単位のプロキシを実現する基盤の仕組み) | PROCESS-NAME,com.app.id,PROXY |
RULE-SET | Rule Providerのルールセットを参照 | RULE-SET,reject,REJECT |
MATCH | 一致しなかった全トラフィック向けのフォールバックルール | MATCH,PROXY |
DOMAIN-REGEXや大きなRULE-SETを、明らかに一致しない位置より前に置くと、リクエストごとの照合速度が遅くなります。
Providerの仕組み:Proxy ProviderとRule Provider
Providerは、Clashが「リモートかつ自動更新可能」なリソースを管理するための統一された仕組みです。サブスクリプションリンクの裏側は実はProxy Providerであり、ルールセットの裏側はRule Providerです。どちらも定期的な自動更新に対応しており、ファイルを手動で置き換える必要はありません。
proxy-providers:
my-sub:
type: http
url: "https://example.com/api/v1/subscribe?token=xxx"
interval: 3600
health-check:
enable: true
url: http://www.gstatic.com/generate_204
interval: 300
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/rules/reject.txt"
path: ./rules/reject.txt
interval: 86400
ここでintervalは自動更新の周期(秒単位)を制御し、health-checkはクライアントに定期的にProvider配下のノードを一括で速度測定させます。behaviorは、ルールセットの内容がドメインリスト(domain)、IP範囲(ipcidr)、あるいは完全なルール(classical)のいずれかであるかをクライアントに伝えます。
プロキシグループの高度なパラメータ
基本的なtypeとproxiesのほかに、プロキシグループには知っておくと役立ついくつかの高度なパラメータがあります:
lazy——url-test/fallbackグループで有効にすると、実際に使用されたときだけバックグラウンドで速度測定を行い、アイドル時のリソース消費を減らします;tolerance—— 遅延の許容値(ミリ秒)。新しいノードの遅延が現在のノードよりこの値以上低くならない限り切り替えは発生せず、測定値のブレによる頻繁な切り替えを防ぎます;strategy(load-balanceグループのみ)—— ロードバランシングの戦略で、一般的なのはconsistent-hashing(同じ宛先は常に同じノードを使用し、セッション維持が必要な場面に適する)またはround-robin(順番に巡回)です;disable-udp—— そのプロキシグループ内のノードのUDP転送を無効化します。一部のノードや回線がUDPに対応していない場合に使用します。
DNSの高度な設定
DNS設定は漏洩防止のオン・オフだけでなく、解決動作を細かく制御することもできます:
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- https://dns.google/dns-query
- https://1.1.1.1/dns-query
fallback:
- https://1.0.0.1/dns-query
- https://dns.quad9.net/dns-query
nameserver-policy:
"geosite:private": [192.168.1.1]
fallback-filter:
geoip: true
geoip-code: JP
enhanced-mode: fake-ipは最も一般的なモードで、クライアントが各ドメインに仮のIPを割り当て、プロキシ層で実際のドメインに戻すため、互換性が最も高いです。nameserver-policyはドメインの所属に応じてどのDNSグループで解決するかを個別に指定できます(例:自宅ルーターなどLAN内のホスト名だけローカルDNSで解決する)。fallback-filterはある解決結果が「汚染されている疑いがある」かどうかを判定し、fallbackリストで再度問い合わせるかどうかを決定するために使われます。geoip-code(ここではJP)とサンプルのIP/ドメインは、実際にお使いの地域やDNSサーバーに置き換えてください。
TUNモードのパラメータ詳細
TUNモードのコアパラメータは以下の通りです:
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
stackは仮想ネットワークアダプターの実装方式を決めます。systemは互換性が最も高く、gvisor/mixedは場面によってはパフォーマンスが優れています。auto-routeを有効にすると、クライアントが自動的にシステムのルーティングテーブルを引き継ぎます。auto-detect-interfaceは、現在使用している物理ネットワークインターフェースをクライアントが自動的に検出し、手動指定を不要にします。dns-hijackは、UDP53ポート経由のDNSリクエストを強制的に横取りし、アプリがシステムのDNS設定を回避して直接問い合わせるのを防ぎます。
外部コントローラーとRESTful API
external-controllerを設定すると、Clashは指定したアドレスでRESTful APIを公開します。ダッシュボード系クライアントと組み合わせることで、クライアントを再起動せずに接続状況の確認、ノードの切り替え、遅延の確認などをリアルタイムで行えます。
external-controller: 127.0.0.1:9090
secret: "your-strong-secret"
secretを設定し、external-controllerがローカルアドレス(127.0.0.1)のみをリスンするようにしてください。0.0.0.0にバインドしてシークレットを設定していない場合、プロキシの操作権限をネットワーク全体に公開してしまうことになります。
パフォーマンス・セキュリティのおすすめ設定
- 何百もの
DOMAIN-SUFFIXをrulesに直接並べるのではなく、できるだけRULE-SETでルールセットを参照する方が、照合が速く、メンテナンスも簡単です; - アクセス頻度が高く、明確なルールほど
rulesリストの上位に置き、平均的な照合回数を減らしましょう; - 必要がない限り
log-levelをdebugのまま長時間運用しないでください。詳細なログはディスクとメモリを消費し続けます; external-controllerには必ずsecretを設定し、複数デバイス・複数プラットフォーム間で同じシークレットを使い回さないでください;- プロキシグループの速度測定の間隔は短すぎないようにしましょう。数十秒から数分に1回で十分にノードの異常を検知できます。頻度が高すぎるとノード側の負荷やローカルリソースの消費が増えるだけです;
- カスタムで上書きしたルールやプロキシグループは別途バックアップしておくと、サブスクリプション更新やクライアント再インストール後にすぐ復元できます。
よくある質問
設定ファイルを変更しても反映されないのはなぜ?
ほとんどのクライアントでは、変更を反映させるために手動で「設定を再読み込み」をクリックするか、クライアントを再起動する必要があります。サブスクリプションで管理している設定の場合、ローカルファイルを直接編集すると次回の自動更新で上書きされる可能性があるため、代わりに上書き(オーバーライド)機能を使うことをおすすめします。
RULE-SETと直接ルールを書く方法の違いは?
効果自体は同じですが、メンテナンス方法が異なります。RULE-SETはリモートで更新できる独立したファイルで、ルール内容が変わっても設定全体を再読み込みする必要がありません。一方、rulesに直接書いたルールは、変更するたびに設定ファイル自体を手動で編集する必要があります。
fake-ipとredir-hostモードはどちらを選ぶべき?
fake-ipは互換性・速度ともに優れており、現在の主流の選択肢です。redir-hostはDNSの応答結果を書き換えて実現するため、実際のIPで検証を行う一部のアプリで問題が起きる場合があります。fake-ipモードで明確な互換性問題に遭遇した場合のみ、切り替えを検討してください。
external-controllerのポートが使用中だったら?
external-controllerのポート番号を別の未使用のポートに変更すれば解決します。一般的なデフォルトポートは9090です。システムのコマンドでそのポートを使用しているプロセスを確認してから、閉じるかどうかを判断することもできます。
プロキシグループの速度測定が失敗し続ける場合はどう調査する?
まず、測定用アドレス(urlフィールド)自体がそのノードからアクセス可能かどうかを確認してください。特定のネットワーク環境では一部の測定用アドレスがブロックされることがあります。他の公開されている接続テスト用アドレスに変更したり、ノード自体が失効していないか確認することもできます。
複数のRule Providerを同時に使うことはできますか?
できます。rule-providersでは任意の数のルールセットを定義でき、rulesリストの中で必要に応じてRULE-SET名でそれぞれ参照できます。順序は上から順に照合するルールに従います。
まだ基本的な使い方を見ていない方は、初心者向けチュートリアルからサブスクリプションの読み込み、プロキシグループ、ルールベースルーティングなどの基本概念を学んでみてください。