プロトコルの境界と最小構成
AnyTLS は、現在の Mihomo コアが提供する TLS over TCP のアウトバウンド種別です。QUIC は使わず、ポートホッピング用のフィールドもありません。最小ノードは、共通の名前、種別、サーバー、ポート、サーバーパスワードで構成されます。
password サーバー側のユーザー設定と一致させる必要があります。udp が true の場合、クライアントは UDP over TCP で UDP リクエストを運びます。基盤となる接続が UDP に変わるわけではありません。
name必須- ノード名です。ポリシーグループやルールから、このアウトバウンドを識別するために使われます。
type: anytls必須- Mihomo の AnyTLS アウトバウンド実装を選択します。オリジナルの Clash はこの種別を認識しません。
server / port必須- サーバーのホストと待受ポートを指定します。ポートは単一の整数です。
password認証- サーバー側でそのユーザーに設定されたパスワードを指定します。空の値が機能する可能性があるのは、サーバー側で明示的に許可されている場合だけです。
udp任意- UDP リクエストへの対応を有効にします。実際には AnyTLS 接続内の UDP over TCP で運ばれます。
TLS、SNI、証明書の検証
AnyTLS は常に TLS 接続を確立します。 sni を指定しない場合、クライアントは server を TLS Server Name として使用します。 server が IP の場合は、通常、サーバー証明書に合わせてドメイン形式の SNI を指定する必要があります。
sniTLS- ハンドシェイクで使うサーバー名を設定します。省略時は server にフォールバックします。
alpnTLS- サーバーが対応する ALPN の一覧を指定します。例として h2 と http/1.1 があります。クライアント側の好みだけで変更しないでください。
client-fingerprintTLS- クライアントの TLS フィンガープリントを選択します。例:chrome。証明書のフィンガープリント検証とは別のフィールドです。
skip-cert-verifyリスク- が true の場合、通常の証明書検証を省略します。リスクを明確に理解している場合にだけ使用してください。
name-cert-verifyTLS- 証明書名の検証対象だけを個別に指定します。接続先アドレスを変更するものではありません。
fingerprintTLS- サーバー証明書のフィンガープリントを固定し、証明書ピンニングに使用します。
certificate / private-keymTLS- サーバー側でクライアント証明書が必要な場合に、ペアで指定します。
ech-opts任意- ECH を使って ClientHello 内の実際の SNI を隠します。具体的なフィールドは、現在のコアにおける共通 TLS 設定に従います。
Reality とセキュアラッピングの境界
AnyTLS は、ECH、ShadowTLS、ResTLS、JLS と組み合わせて TLS の露出特性を処理できますが、これらの機能は Reality の別名ではありません。
shadow-tls-optsラッピング- ShadowTLS の version と password を指定します。サーバー側と一致させる必要があります。
restls-optsラッピング- ResTLS の password を指定します。サーバーから提供されている場合は version-hint も指定できます。
jls-optsラッピング- JLS の username と password を指定します。
- 排他ルール重要事項
- 現在の実装では、ShadowTLS、ResTLS、JLS のうち選択できるのは一つだけです。同時に指定するとノードの作成が拒否されます。
アイドルセッションのパラメーター
AnyTLS は、一つ以上の TLS 接続上でストリームを多重化します。三つのセッションパラメーターは秒単位で確認と回収を制御するもので、QUIC ウィンドウではなく、TLS 証明書の検証にも影響しません。
idle-session-check-intervalデフォルトは 30 秒- アイドルセッションを確認する間隔です。
idle-session-timeoutデフォルトは 30 秒- 確認時に、この値を超えてアイドル状態が続いているセッションを閉じます。
min-idle-sessionデフォルトは 0- 確認時に最低限維持するアイドルセッション数です。値を増やすと、より多くの接続が維持されます。
最小構成の例
まず、サーバーから実際に提供されたパスワード、SNI、ALPN を使って接続を確立します。その後、必要に応じて ECH または一種類のセキュアラッピングを追加してください。セッションフィールドにはデフォルト値があるため、通常は重ねて指定する必要はありません。
proxies:
- name: anytls-node
type: anytls
server: server.example.com
port: 443
password: replace-with-server-password
udp: true
sni: server.example.com
client-fingerprint: chrome
alpn:
- h2
- http/1.1よくある設定ミス
YAML として解析できても、プロトコルパラメーターを相互に置き換えられるとは限りません。AnyTLS で接続できない場合は、まず最小構成まで絞り込んでください。
- VLESS ノードから
reality-optsをコピーし、現在のコアが明示的に未対応としている組み合わせを使っています。 serverに IP を指定した一方で、証明書に対応するsniを指定していないため、証明書名の検証に失敗しています。- ShadowTLS、ResTLS、JLS のうち二つ以上のラッピングを同時に有効にすると、ノードの作成時にエラーになります。
- セッション確認用のパラメーターを性能倍率だと考えてむやみに増やすと、かえって多くのアイドル接続が維持されます。
