Shadowrocketの対応プロトコル|Shadowsocks・VMess・VLESS・Trojan・Hysteria2を1分で確認

Shadowsocks、VMess、VLESS、Trojan、HTTP/SOCKS5、WireGuard、Hysteria2の通信方式と、Add Serverで入力する項目を1分で確認できます。

この記事の概要

Shadowrocketは複数のプロキシ/トンネルプロトコルに対応しています。すでに利用するサーバーの設定情報やサブスクリプションをお持ちの方向けに、各プロトコルの認証方式と通信条件を確認し、Home → + → Add Serverで入力項目を照合する手順を解説します。最後に、接続失敗、TLSエラー、ルールに一致しない場合の違いも整理します。プロトコルはサーバー側の設定と一致させる必要があり、Typeだけを変更して既存サーバーを別のプロトコルに切り替えることはできません。

対応プロトコルと入力項目一覧

手動で追加する場合は、まずAdd ServerのTypeでプロトコルを選び、その種類に表示される項目を入力します。プロトコルごとに認証情報は異なり、使い回せません。ShadowsocksのPasswordはVMessのUUIDとは別の情報で、WireGuardの鍵をTrojanのPassword欄に入力することもできません。以下は代表的な設定項目で、対応するすべてのプロトコルを網羅した一覧ではありません。利用できる拡張機能や項目名は実際の画面でご確認ください。

プロトコル通信方式と認証の特徴追加時の主な確認項目
Shadowsocks選択した暗号化方式とパスワードで認証します。TCPに対応し、UDPの利用にはサーバーとクライアント双方の対応が必要です。Address、Port、Method、Password。プラグインを使う場合は、対応するパラメータも入力します。
VMessUUIDでユーザーを識別します。通信方式とTLSの設定は構成によって異なります。Address、Port、UUID、暗号化オプション、通信方式、TLSパラメータ。
VLESSUUIDで認証します。プロトコル自体にShadowsocksと同等のデータ暗号化層はありません。UUID、通信方式、サーバー側で指定されたTLSなどのセキュリティ層のパラメータ。
TrojanTLSでサーバーに接続し、Passwordで認証する構成が一般的です。Password、TLSサーバー名、証明書の検証条件。
HTTP / SOCKS5汎用プロキシプロトコルです。認証や暗号化の有無は設定によって異なります。Address、Port、認証情報。HTTPではTLSを使用するかどうかも確認します。
WireGuardUDPベースの暗号化トンネルで、公開鍵と秘密鍵のペアを使用します。ローカルのPrivate Key、トンネルアドレス、ピアのPublic Key、Endpoint、ルーティング範囲。
Hysteria2QUICベースで、下位層にUDPを使用します。TLSと設定された認証情報で接続します。Address、Port、認証用Password、TLSサーバー名。帯域幅と難読化の設定も確認します。

これらの項目に共通の初期値はありません。AddressとPortには、利用するサーバーの待ち受けアドレスを設定します。TLSの有効/無効やWebSocketの使用有無も、元の設定に合わせてください。本文のポート番号は項目の説明用の例であり、サーバー設定の代わりにはなりません。

Shadowsocks・VMess・VLESSの違い

ShadowsocksではMethodとPasswordを組み合わせて使用します。Passwordが同じでもMethodが異なれば、認証や復号に失敗します。UDPに対応しているか、プラグインが必要かは別々に確認が必要です。Webページを開けても、音声通話などのUDP通信が利用できるとは限りません。

WebSocketを例にすると、サーバーのAddress、HTTP Host、Path、TLSで使用するサーバー名は、それぞれ役割が異なります。Addressは接続先を指定し、HostとPathはアプリケーション層の転送に使われます。TLSサーバー名はハンドシェイクと証明書の識別に使われます。値が同じ場合もありますが、すべてを同じ値に変更してよいわけではありません。

Trojan・HTTP・SOCKS5のセキュリティ上の違い

Trojanでは、TLSでクライアントからサーバーまでの接続を保護する構成が一般的です。Passwordが正しくても、TLS接続が成功するとは限りません。証明書の期限切れ、設定したサーバー名との不一致、端末の時刻ずれなどが原因で、Password認証の前に接続が中断されることがあります。元の設定と証明書の条件を確認し、証明書検証の無効化を通常の対処法にしないでください。

443
TLSを使うサービスで見られるポート番号の例です。すべてのプロトコルで固定されているわけではありません。
1080
SOCKS5で使われることのあるポート番号の例です。実際の待ち受けポートを確認してください。
128 bit
UUIDの長さ。VMess/VLESSで識別子として使われますが、暗号化の強度を示すものではありません。

要点:ポート番号だけではプロトコルは決まらない

ポート番号が443でも、まずType、認証方式、TLSパラメータを確認してください。443を使う項目をすべてTrojanとして設定してはいけません。

HTTPプロキシはCONNECTを使ってHTTPS接続先へのトンネルを確立できますが、クライアントからプロキシサーバーまでの通信にも必ずTLSが使われる、という意味ではありません。SOCKS5自体にも通信を暗号化する機能はなく、ユーザー名とPasswordによる認証は暗号化層の代わりになりません。HTTPS接続先とのTLSと、プロキシへの接続の安全性は別の層として確認してください。

Hysteria2とWireGuardで必要なUDP通信

Hysteria2とWireGuardはどちらも下位層でUDPを使用しますが、同じ種類のトンネルではありません。Hysteria2はQUICベースで、WireGuardは独自の暗号化トンネル方式を使用します。利用中のネットワークで該当するUDPポートが遮断されていると、どちらも正常に接続できない場合があります。TCPポートの開放状況だけでは、これらのサービスを検証できません。

設定項目Hysteria2WireGuard
認証情報サーバー側で指定された認証情報。Passwordを使用する構成が一般的です。ローカルの秘密鍵とピアの公開鍵。設定で必要な場合は事前共有鍵も入力します。
セキュリティ層TLS名、証明書、任意の難読化設定を確認します。鍵のペア、トンネルアドレス、ピアの設定を確認します。
ネットワーク条件接続先のUDPポートに到達できる必要があります。Endpointに設定されたUDPポートに到達できる必要があります。
追加パラメータ帯域幅、ポート範囲などを既存の設定に合わせて入力します。Allowed IPs、DNS、MTUなどをトンネルの設計に合わせて設定します。

WireGuardのトンネルアドレスはサーバーのグローバルアドレスではありません。また、Private KeyはピアのPublic Keyとは異なります。Allowed IPsはトンネル内で対象となるIP範囲を指定するもので、ShadowrocketのGlobal Routingとは別の設定です。インポート後にトンネルアドレスを変更すると、Endpointに到達できても通信が戻ってこない場合があります。

Hysteria2の帯域幅パラメータは速度測定の結果ではなく、値を大きくすればよいというものでもありません。入力が必要な場合は、既存の設定で指定された値を使ってください。同じ設定がWi-Fiでは使えて、モバイル通信に切り替えるとタイムアウトする場合は、切り替え前後の状況を記録してからUDPの到達性を確認します。一度の失敗だけで、プロトコル自体の速度や安定性を判断することはできません。

Add Serverで追加して接続を確認する

以下の手順は、サーバーの設定情報がすべてそろっていることを前提としています。すでにサブスクリプションに設定一式が含まれている場合は、手入力による漏れを防ぐため、元のインポート結果を使うのが一般的です。手動追加の前に元の設定を記録し、テスト時は一度に変更する項目を1つに絞って原因を特定してください。

  1. 追加画面を開く

    Homeを開き、右上の+をタップしてAdd Serverを表示します。Typeでは、既存サーバーと同じプロトコルを選んでください。名称が似ているという理由だけで選ばないようにします。

  2. 接続先を入力する

    AddressとPortを入力します。Addressには指定されたドメイン名またはIPアドレスを入力してください。項目で完全なURLを求められていない限り、Webページのパスやプロトコルのプレフィックスを付けないでください。

  3. 認証情報を確認する

    プロトコルに応じてPassword、UUID、鍵情報を入力します。Method、TLS名、通信方式、Host、Pathを個別に確認してください。提供されていない拡張設定を推測で入力しないでください。

  4. 保存して選択する

    保存後にHomeへ戻り、サーバーを選択して左側に選択マークが表示されることを確認します。接続スイッチをオンにし、初回利用時はシステムの案内に従ってVPN構成の追加を許可してください。

  5. 接続をテストする

    HomeでConnectivity Testを実行してから、確認対象の接続先にアクセスします。テストのタイムアウト、TLSエラー、特定の接続先だけ開けないなど、「接続済み」以外の状況も記録してください。

Connectivity Testは接続状態を確認する手がかりであり、すべてのアプリ、接続先、UDP通信が通ることを保証するものではありません。調査のためにGlobal Routingを変更した場合は、テスト後に元の設定へ戻し、一時的な診断設定をそのまま使い続けないようにしてください。

接続状態とルールによる振り分けを分けて確認する

サーバーのプロトコルは接続の確立方法を決め、Global Routingはリクエストのルーティング方法を決めます。Proxyはプロキシ経由、Directは直接接続、Configは現在の設定ルールに基づく処理、Sceneは設定済みのシーンに基づく処理です。サーバーの設定が正しくても、すべてのリクエストがそのサーバーを経由するとは限りません。

Configでは、DOMAIN-SUFFIXがドメインの末尾に一致し、IP-CIDRがIPアドレス範囲に一致します。GEOIPはIPアドレスの地理的な割り当てに基づいて一致し、FINALはそれ以前のルールに一致しない場合の最終ポリシーを指定します。これらは通信の振り分け先を変更するもので、Password、UUID、TLS名の誤りを修正するものではありません。Settings → On Demandは条件に応じた接続を制御し、プロトコルの認証情報は変更しません。

プロトコル選択とエラーに関するよくある質問

最も速いプロトコルを選べばよいですか?

まず、サーバーが実際に対応しているプロトコルを使用してください。そのうえで、同じネットワーク、近い時間帯、同じ接続先で比較します。遅延、パケットロス、サーバー負荷、通信設定はいずれも結果に影響します。TypeをHysteria2やWireGuardに変更するだけで、既存サーバーがそれらに対応するわけではありません。

インポートした設定が表示されるのに、接続できないのはなぜですか?

項目が表示されるのは設定内容が読み込まれたことを示すだけで、認証が有効であるとは限りません。まずHomeで対象の項目を選択してConnectivity Testを実行し、Address、Port、プロトコルの認証情報を確認してください。サブスクリプションから取得した設定の場合は、元のサブスクリプションを更新して再確認し、期限切れの情報を使い続けないようにします。

TLSエラーが出た場合、証明書の検証を無効にすべきですか?

まず端末の時刻、TLSサーバー名、サーバー証明書の条件を確認し、接続先の設定が正しいことを確かめてください。証明書の識別に失敗した場合は、設定または証明書を修正します。検証の無効化を日常的な設定にしたり、証明書名の不一致をPasswordの変更で解決しようとしたりしないでください。

Webページは開けるのに、音声通話が失敗するのはなぜですか?

Webページの通信は主にTCPを使いますが、音声通話ではUDPが必要な場合があります。使用中のプロトコル、サーバー、ネットワークが必要なUDP転送に対応しているか確認し、Configのルーティング先も確認してください。HTTPプロキシ経由でWebページを確認できても、リアルタイム通信が使えるとは限りません。

サブスクリプションを更新すると、手動で変更した項目も変わりますか?

サブスクリプション内の項目は、更新時にリモートの内容から再作成または上書きされる場合があります。変更前に元の設定を保存し、更新後に選択中の項目と拡張フィールドを再確認してください。継続して保持する必要がある変更は明確に記録し、一度手動で変更しただけでサブスクリプション側の設定も更新されたと判断しないでください。

App Storeで正規アプリを確認