ShadowrocketのTrojan設定方法|Password・SNI・TLSの入力項目を解説

ShadowrocketのTrojan設定を解説。Add ServerでのAddress・Port・Password・SNI・証明書検証の入力方法と、よくあるミスを紹介します。

この記事の要点

この記事は、利用中のサービスから提供された情報やサブスクリプションを使って、ShadowrocketでTrojanの設定を確認する方向けです。サーバーアドレスとSNIを区別し、PortとPasswordを確認したうえで、証明書検証を有効にしておきましょう。設定後はサーバーへの接続とGlobal Routingをそれぞれ確認します。本文中のドメインは項目の説明用で、接続先として使えるサービスアドレスではありません。当サイトではサーバー情報やサブスクリプションを提供・販売・推奨していません。

1. Trojanの各設定項目が接続のどの段階で使われるか

TrojanはTLSでクライアントとサーバー間の通信を保護し、暗号化された接続上でプロトコル認証を行います。設定の流れは、アドレスの名前解決、Portへの接続、TLSハンドシェイク、認証情報の送信、リクエストの転送に分けられます。前の段階が完了しなければ、次の設定項目が使われる段階には進めません。そのため、接続できない原因がPasswordとは限りません。

Addressは接続先、Portはサーバー側の接続口を指定します。SNIはTLSハンドシェイクでサーバー名を通知するために使われ、証明書検証ではサーバーの身元を確認します。PasswordはTrojanの認証に使います。Passwordが正しくても証明書が正しいとは限らず、Portに接続できてもTrojan認証が成功したとは限りません。

項目・段階役割優先して確認する点
Address接続先を指定。ドメイン名またはIPアドレスを入力入力ミス、名前解決の結果、パスを誤って貼り付けていないか
Portサーバーの待ち受けPortを指定提供された情報と完全に一致しているか。プロトコル名から推測しない
SNITLSハンドシェイクでサーバー名を通知サーバーが要求する名前、証明書の対象範囲
証明書検証信頼チェーン、有効期限、名前の一致などを確認デバイスの日時、証明書の名前、サーバー側の証明書設定
PasswordTrojan認証に使用大文字・小文字、文字の抜け、前後の空白

Portの443はよくある例であり、Trojanの固定要件ではありません。提供された情報に8443と明記されている場合は、8443を入力してください。通常のTrojanの設定を、別のトランスポートとの組み合わせにそのまま適用することもできません。追加のトランスポート設定が必要な場合は項目ごとに確認し、Address・Port・Passwordだけで設定が完了したと判断しないでください。

2. Home → Add Serverでの入力手順

手動で追加する前に、既存の設定値を控えておくと、編集中に元の値と混同せずに済みます。以下は通常のTrojanを設定する手順です。サブスクリプションから追加した設定の場合は、まず取り込み後の項目を確認し、別の設定として手動で追加する必要があるか判断してください。画面レイアウトによって項目の位置が異なることがあるため、現在のAdd Server画面に表示されている英語の項目名を確認してください。

  1. Typeを選択

    Homeを開き、右上の「+」をタップしてAdd Serverを表示し、TypeでTrojanを選択します。別のプロトコルの設定を使い回してPasswordだけを変更しないでください。プロトコルの種類によって各項目の意味が異なります。

  2. AddressとPortを入力

    Addressには提供された情報にあるドメイン名またはIPアドレスを、Portには対応する数字を入力します。Addressにhttps://、ウェブページのパス、末尾のスラッシュは含めません。PortはAddressに付けず、別の項目に入力してください。

  3. Passwordを確認

    Passwordには認証用の文字列をすべて貼り付け、前後の空白や改行がないか確認します。PasswordはサブスクリプションのURLでも、ウェブサイトのログインパスワードでもありません。提供された値に引用符を付けたり、文字を置き換えたりしないでください。

  4. SNIを確認

    SNIには提供された情報に指定されているサーバー名を入力します。AddressがIPアドレスで、証明書がドメイン名に発行されている場合は、特に注意して確認してください。証明書検証は有効のままにし、Allow Insecureを通常の接続設定として使わないでください。

  5. 保存して接続を確認

    保存後にHomeへ戻り、追加したサーバーを選択してGlobal Routingを確認し、接続スイッチをオンにします。初回接続時はシステムの案内に従って許可してください。接続スイッチの状態だけでなく、アクセスできることが分かっているウェブページを開いて確認します。

3. AddressとSNIが異なる場合の入力方法

Addressはネットワーク接続先、SNIはTLSハンドシェイクで通知するサーバー名です。両者は同じ場合も異なる場合もあります。たとえばIPアドレスに接続し、証明書がドメイン名に対応している場合、クライアントはそのIPアドレスの指定Portに接続しますが、サーバーが適切な証明書を選択したり接続を処理したりするため、ハンドシェイク時にドメイン名の通知が必要なことがあります。

SNIを指定しても、接続できないIPアドレスが到達可能になるわけではありません。また、任意のウェブサイトのドメイン名を入力するものでもありません。提供された情報とサーバー側の設定に合致する必要があります。同じAddressに対してSNIを次々に変更しても、確実な解決にはならず、証明書名の問題も特定しにくくなります。

設定情報の例Addressの例SNIの確認方法
接続先がドメイン名で、SNIも同じ場合edge.example.com提供された情報にもedge.example.comと指定されているか確認
IPアドレスに接続し、証明書はドメイン名に対応する場合192.0.2.10提供された情報に指定されている名前を入力します。例:edge.example.com
接続先はドメイン名だが、別のSNIが指定されている場合entry.example.com明示されたSNIを使い、Addressに自動で置き換えない

表中の192.0.2.10は文書用の例示アドレスで、実際のサービスのテストには使えません。提供された情報にSNIの記載がない場合は、新しい名前を推測せず、取り込んだ設定と元の説明を確認してください。SNIを空欄にした場合の自動処理は、実際の証明書名の確認に代わるものではありません。特にAddressがIPアドレスの場合は注意が必要です。

4. TLSの証明書検証とAllow Insecureの違い

TrojanのTLSは通信を暗号化するだけでなく、サーバーの身元確認にも関わります。Allow Insecureのような設定で変わるのは証明書検証の条件であり、サーバーアドレス、Port、Password、待ち受け状態の問題が解消されるわけではありません。検証を無効にして接続できたとしても、確認すべき点が証明書関連にある可能性を示すだけで、すべての設定が正しい証拠にはなりません。

証明書検証を有効にする

推奨

Allow Insecureをオフにし、提供された情報に従ってSNIを入力します。証明書エラーが出た場合は、名前、デバイスの日時、サーバー側の証明書を確認し、サーバーの身元確認を維持してください。

適した用途:日常の接続、取り込んだ設定の確認、長期的に使う設定の保存

Allow Insecureをオンにする

証明書検証が緩和され、サーバーの身元確認の安全性が低下します。既存の設定でオンになっている場合は、その理由と証明書の状態を確認してください。あらゆる接続エラーを解決する方法として使わないでください。

適した用途:既存設定の検証例外を確認し、修正方法を検討する場合

結論:まず名前と証明書を確認する

証明書関連のエラーが出たら、まずAddress、SNI、証明書の対象名を照合し、次にデバイスの日時を確認します。Port、Password、検証スイッチを同時に変更すると、次のテストで何が影響したのか判断できなくなります。

サーバー側で特殊な証明書設定を使っている場合は、利用中のサービスから提供された情報に検証方法が明記されている必要があります。クライアント側で証明書検証をむやみに無効にしても、信頼性を確認したことにはなりません。問い合わせ時にはエラーの種類と発生段階を伝えられますが、Password、サブスクリプションの完全なURL、その他の認証情報は公開しないでください。

5. 保存後にウェブページを開けない場合の切り分け

Homeの接続スイッチがオンになっていることは、端末上の接続機能が起動していることを示しますが、リモートサーバーの認証に成功したことを意味しません。サーバーへの接続失敗、接続先ウェブサイトへの接続失敗、リクエストがこのサーバーを経由していない場合を分けて確認しましょう。毎回変更する設定は1つに絞り、テスト時刻、ネットワーク環境、結果を記録してください。

  1. まず選択中の設定を確認します。Homeに戻り、現在選択されているサーバーを確認してください。別の設定を編集した一方で、実際には元の設定を使っていることがあります。設定でポリシーグループを使っている場合は、グループ内で実際に選択されている項目も確認します。
  2. 次にルーティングの状態を確認します。Home → Global Routingで、Directは直接接続、Configは現在の設定に従った処理、Proxyは経由するルートの一時確認に使えます。Sceneはシーンに応じた選択です。トラブル対処では名称だけで固定の動作と判断せず、実際に適用されている内容を確認してください。
  3. AddressとPortを確認します。タイムアウトが発生する場合は、まずドメイン名を名前解決できるか、Portが提供された情報と一致しているかを確認し、現在のWi-Fiとモバイル回線で結果を比較します。タイムアウトだけでPasswordの誤りとは判断できません。
  4. TLSの段階を確認します。証明書やハンドシェイクに関するエラーが出る場合は、SNI、デバイスの日時、証明書の有効期限、サーバーがそのPortで想定どおりのTLSサービスを提供しているかを確認します。
  5. 最後に認証と接続先を確認します。接続確立後に切断される場合は、Passwordを再確認し、サーバー側の状態も確認してください。特定のウェブサイトだけ開けない場合は、その接続先とルールを確認し、サーバー設定全体をすぐに作り直さないでください。

Configを使っている場合は、Configを開き、現在有効なファイルのRuleセクションを確認します。ルールは上から順に照合され、DOMAIN-SUFFIX,example.com,DIRECTに一致するリクエストはDIRECTで接続します。そのため、このドメインへのアクセスだけではTrojanが使えるか確認できません。どのルールにも一致しない場合は、FINALのポリシーと、ポリシーグループで最終的に選択されているサーバーも確認してください。

6. Password・SNI・取り込んだ設定に関するよくある質問

Passwordを正しくコピーしたのに接続できないのはなぜ?

Homeで該当する設定の編集画面を開き、まずTypeがTrojanになっているか、次にAddressとPortが正しいかを確認します。その後、Passwordを貼り直し、前後の空白や改行、大文字・小文字を確認してください。Passwordを優先的に疑うのは、接続が認証段階まで進んだ場合です。タイムアウトや証明書エラーが出る場合は、それより前の接続段階を先に確認しましょう。

Addressがドメイン名でも、SNIを入力する必要はありますか?

まず、利用中のサービスから提供された情報にSNIが明記されているか確認します。別の名前が指定されている場合は、Add Server → SNIにその値を入力してください。Addressがドメイン名だからといって削除しないでください。指定がない場合は、取り込んだ設定と証明書の構成を確認し、無関係なドメイン名を独自に入力しないでください。

443に変更しても接続がタイムアウトするのはなぜ?

Portにはサーバーが実際に待ち受けているPortを指定します。提供された情報の8443を443に変更しても、サービスの待ち受けPortは自動で変わりません。まず元のPortに戻し、Address、現在のネットワーク、サーバーの状態を確認してください。よく使われるPortであっても、そのPortで必ずTrojanが提供されているとは限りません。

サブスクリプションを更新したら、手動で変更したSNIが元に戻ったのはなぜ?

Homeに戻って更新後の設定を確認し、利用中のサブスクリプション情報と照合してください。更新によって、サブスクリプション管理対象の項目が上書きされることがあります。診断用の値を残す必要がある場合は、別の設定を手動で作成してテストし、元の情報の提供元に正しい設定を確認してください。情報の出所が修正されていないまま、サブスクリプションの設定を繰り返し変更しないでください。

確認が終わったら、Passwordを含めずにチェック内容を記録しておきましょう。記録する項目は、プロトコルの種類、Port、AddressとSNIが異なるかどうか、証明書検証の状態、テスト時のGlobal Routing、エラーが発生した段階です。設定を何度も切り替えるのではなく、次回の問題特定に役立つ記録を残せます。

App Storeで正規版を確認App StoreでShadowrocketをダウンロード