ShadowrocketのTrojan設定方法|パスワード・SNI・TLSの入力手順

TrojanのTLS接続の仕組みを確認し、Add Server画面のAddress、Port、Password、SNI、Allow Insecureの入力方法と、よくある入力ミスを解説します。

この記事の概要

この記事は、サービス提供元からTrojanの接続情報またはサブスクリプションを受け取り、Shadowrocketの設定を確認したい方を対象としています。接続先、TLSで使うサーバー名、認証パスワードを区別し、Add Serverの各項目を順に確認します。タイムアウト、証明書エラー、認証失敗が起きた場合は、すべての設定を手当たり次第に変更せず、失敗した接続段階から原因を絞り込みます。

Trojan設定の3要素:接続・TLS・認証

一般的なTrojan接続では、まずTCPで指定ポートのサーバーに接続し、続いてTLSセッションを確立します。その後、暗号化された通信路でTrojanの認証情報を送信し、プロキシリクエストをやり取りします。つまり、接続先に到達できてもTLSが成功するとは限らず、TLSが成功してもパスワードが正しいとは限りません。設定時は、この3段階を分けて確認してください。

TLSは通信を保護し、接続先のサーバーを認証するためのものです。Trojanのパスワードはアプリケーション層での認証に使われ、互いに代用できません。サーバー証明書が有効でも入力したパスワードが正しいとは限らず、パスワードが正しくても証明書の名前が一致しない問題は解決できません。この記事では一般的なTrojan over TLSの設定を扱います。その他の通信設定は、現在のサブスクリプションまたはサービス提供元の案内に従ってください。

3段階
TCP接続、TLSハンドシェイク、Trojan認証の順に確認
443
TLSでよく使われるポートの例。すべてのTrojan設定で固定されているわけではありません
1項目
1回の確認で変更する項目は1つだけ。保存後に同じテストを繰り返します

判断のポイント:まず失敗した段階を特定

証明書名のエラーが出た場合は、パスワードを変更する前にSNIと証明書を確認します。接続がタイムアウトする場合は、TLSのセキュリティ設定を変更せず、まずAddress、Port、現在のネットワークを確認してください。

Add Serverの項目:Address・Port・Passwordの入力方法

Home画面右上の「+」からAdd Serverを開き、TypeでTrojanを選択して各項目を入力します。既存のサブスクリプションから項目を追加できる場合は、比較用として元の項目を残しておきましょう。手動で確認する際は別の項目を作成すると、一時的な変更がサブスクリプションの更新で上書きされるのを防げます。画面上の項目の配置は変更される場合があるため、英語の項目名と用途を基準に確認してください。

項目 入力する値 よくある入力ミス
Type 既存の設定と同じプロトコルになるようTrojanを選択します。 項目名だけを見て、実際のプロトコルを確認していない。
Address サービス提供元から指定されたサーバーのドメイン名またはIPアドレス。 サブスクリプションURL全体を貼り付ける。または、https://やパス、クエリパラメーターを入力する。
Port サーバーが実際に待ち受けているポート。例:443、8443。指定された値を使用します。 TLSを見て一律に443へ変更する。またはPortをAddressにも入力する。
Password このTrojan設定に対応する完全な認証パスワード。 サービス提供元のWebサイトのログインパスワードを使う。記号を抜かす。先頭または末尾に空白を入れる。
SNI サービス提供元が指定したTLSサーバー名。通常はドメイン名です。 URL、ポート、任意のWebサイト名を入力する。
Allow Insecure 通常はオフのままにして、証明書の検証を有効にします。 タイムアウトやパスワードエラーを解決する万能スイッチだと思って有効にする。

たとえば、指定されたAddressがedge.example.com、Portが8443の場合は、それぞれ別の項目に入力します。ここに記載したドメイン名は入力形式の例であり、接続先として利用できるサーバーではありません。一般的なHTTPSのポートが443だからといって、サーバー指定のPortを独自に変更しないでください。

SNIとTLS:接続先とサーバー名が異なる場合

SNIは、TLS ClientHelloに含まれるサーバー名拡張です。同じアドレスを共有するサーバーが、適切な証明書とサイト設定を選ぶために使います。Addressはクライアントの接続先を指定し、SNIはTLS接続でのサーバー名の選択に使われます。一般的な設定では両方に同じドメイン名を指定しますが、AddressにIPアドレスを使う場合や、サーバー側で特定の接続口を使用する場合は異なることがあります。

たとえば、設定でAddressに特定のIPアドレス、SNIにtls.example.comが指定されている場合は、その違いを維持してください。SNIを自動的にIPアドレスへ変更したり、別の項目から「似ている」ドメイン名をコピーしたりしないでください。証明書の検証では、信頼チェーン、有効期限、名前の一致も確認されます。端末の日時が大きくずれていると、有効な証明書がまだ有効でない、または期限切れと判定されることがあります。

元の設定にALPNや通信方式に関する項目がある場合は、それらも一致させてください。トラブル対処の記事に記載された設定の組み合わせを、既存の項目にそのまま適用しないでください。特に、標準的なTrojanの設定方法を別のプロトコルに当てはめないでください。プロトコルによって認証方法と通信方式が異なるため、Typeを変更するだけでは切り替えられません。

入力から接続確認まで:5つの手順

入力前に元の接続情報を用意し、現在のネットワークがWi-Fiかモバイル通信かを記録します。同じ接続先、同じネットワーク、同じ設定項目を使って確認すれば、変更の効果を判断しやすくなります。Password、SNI、ルーティングモードを同時に変更すると、接続が回復しても原因を特定しにくくなります。

  1. 追加画面を開く

    Home → 右上の「+」 → Add Server → Typeの順に進み、Trojanを選択します。既存のサブスクリプションを使っている場合は、生成済みの項目と照合し、プロトコルを間違えて選んでいないか確認してください。

  2. 接続情報を入力する

    Address、Port、Passwordをそれぞれ入力します。貼り付けた後に先頭と末尾の空白を確認し、AddressにURLのパスが含まれていないこと、Portが指定値と一致していることを確かめます。

  3. TLS設定を確認する

    元の設定に従ってSNIを入力し、TLS関連の項目を確認します。Allow Insecureはオフのままにしてください。保存する前に、ドメイン名にポートが含まれていないことを再確認します。

  4. ルーティングの影響を切り分ける

    Homeに戻り、保存した項目を選択します。テスト中はGlobal Routingを一時的にProxyに設定し、テストリクエストがこの項目を経由することを確認できます。テスト後は、元のConfigまたはSceneの設定に戻してください。

  5. 実際のアクセスを確認する

    接続スイッチをオンにし、システムの案内に従って必要な確認を完了します。次にConnectivity Testを実行し、普段利用するHTTPSページにアクセスしてください。接続スイッチがオンかどうかだけでなく、エラーや実際の状況も記録します。

Global RoutingがDirectの場合、リクエストが直接接続されることがあります。Webページが開いても、Trojanの設定が有効だとは限りません。Configでは現在の設定ルールに基づいて接続先が選択されるため、使用中のルールを確認してください。Sceneの場合は、該当シーンの設定を確認します。一時的にProxyを使うのはルーティングの条件を減らすためで、普段からそのモードにする必要があるという意味ではありません。ルールによる振り分けについてはルールマニュアルをご覧ください。

よくある症状:タイムアウト・証明書エラー・接続後に通信できない

「つながらない」という症状だけで判断せず、実際に表示されたエラーに応じて切り分けてください。以下は確認の手順であり、決めつけた診断結果ではありません。同じ症状でも複数の原因が考えられるため、元の接続情報と再テストの結果を照らし合わせてください。

タイムアウトが続く場合、まずパスワードを変更すべきですか?

まずHomeで選択中の項目のAddressとPortを確認し、別の利用可能なネットワークでもう一度テストしてください。ドメイン名を解決できない、ポートに到達できない、サーバーから応答がない場合もタイムアウトになります。サーバーに接続できることを確認してから、パスワードを調べてください。タイムアウトだけではパスワードが間違っているとは判断できません。

証明書エラーが表示された場合、SNIはどう変更すればよいですか?

設定項目の編集画面を開き、元の設定と照らし合わせてSNIのスペルを確認します。次にiPhoneまたはiPadの「設定 → 一般 → 日付と時刻」で、日時とタイムゾーンを確認してください。それでも証明書エラーが続く場合は、エラー内容を利用中のサービス提供元に伝えて確認を依頼します。Allow Insecureを有効にして問題を隠さないでください。

遅延時間が表示されるのに、Webページが開かないのはなぜですか?

表示される遅延時間はテスト方法によって異なり、TLS、Trojan認証、接続先へのアクセスまでをすべて確認しているとは限りません。まずGlobal RoutingがDirectになっていないことを確認してから、Connectivity Testを実行してください。接続後すぐに切断される場合は、パスワードとサーバーの状態も確認します。

手動で修正した設定が、サブスクリプション更新後に使えなくなりました

サブスクリプションを更新すると設定項目が再生成され、端末上で行った変更が上書きされる場合があります。更新後のAddress、Port、SNIを確認済みの接続情報と照合し、サブスクリプションの内容は利用中のサービス提供元に修正を依頼してください。一時的なテストには別の手動設定項目を使い、同じサブスクリプション項目を繰り返し変更しないようにします。

確認結果を記録し、サブスクリプション情報を保護する

問い合わせ時は、失敗した時刻、ネットワークの種類、テスト方法、内容を伏せたエラーメッセージを記録すると、設定全体を送るより原因を特定しやすくなります。PasswordやサブスクリプションURLには認証情報が含まれている場合があります。特にクエリパラメーター内のtokenは、公開スクリーンショット、チャットグループ、ログなどで共有しないでください。実際のサブスクリプションURLを、信頼できないページに貼り付けて検証しないでください。

Shadowrocketはクローズドソースの商用アプリです。アプリの購入とサーバーへのアクセスに使う認証情報は別のものです。アプリの買い切り購入は、接続サービスの契約を含みません。この記事では、利用中のサービス提供元とサブスクリプションがあることを前提に、設定の確認方法を説明しています。

App Storeで正規アプリを確認