利用中のサービスから接続情報やサブスクリプションを入手済みの方向けに、ShadowrocketのTrojan設定で接続先、認証用Password、TLSのサービス名をどう指定するか説明します。ネットワーク接続、証明書検証、プロトコル認証の違いを確認してから、Add Serverの各項目を設定。タイムアウト、証明書エラー、認証失敗などの症状から原因を絞り込みます。証明書検証を無効にして解決を試みる必要はありません。
Trojan接続で確認する3つの段階
ShadowrocketのTrojanは接続プロトコルの種類であり、サブスクリプションURLの種類ではありません。一般的なTrojan接続では、まずサーバーとTCP接続を確立し、次にTLSハンドシェイクを行い、その後、暗号化された通信路でTrojan認証とリクエストの送受信を行います。TLSによってHTTPSで一般的な暗号化通信の特性を備えますが、通信が識別されないことや、接続先のWebサイトがプロキシサーバーを信頼することを意味するものではありません。
3つの段階はそれぞれ異なる問題を確認します。AddressとPortは接続先を見つけられるか、TLS検証は接続相手の身元を確認できるか、TrojanのPasswordはその接続先を利用する権限があるかを判断します。Passwordが正しくても証明書の名前が一致しなければ解決せず、証明書が有効でもPasswordが正しいとは限りません。接続の順序に沿って確認し、複数の項目を同時に変更しないでください。
この記事では、一般的なTrojan over TLSの設定を扱います。既存の設定にWebSocketなどのトランスポート設定が含まれる場合は、トランスポートの種類、Host、パスもあわせて確認してください。Address、Port、Passwordだけを転記しても接続できません。Trojanの項目を別のプロトコルの項目と混同しないでください。長い文字列が設定に含まれていても、別プロトコルのユーザー識別子とは限りません。
Add Serverの項目と設定値の対応
手動で追加する前に、手元の設定情報からサーバーのAddress、Port、TrojanのPassword、TLSサービス名を確認してください。以下のドメインとアドレスは項目の関係を説明するための例であり、接続先ではありません。例ではAddressを192.0.2.10、Portを443、TLSサービス名をgateway.example.comとしています。実際に設定する際は、必ずご自身の接続情報に置き換えてください。
| 項目 | 設定の確認元 | よくある間違い |
|---|---|---|
| Type | Trojanを選択 | 別のプロトコルを選び、認証方式が合わなくなる |
| Address | 接続情報に記載されたサーバーのドメイン名またはIPアドレス | サブスクリプションURL全体を貼り付ける、またはhttps://やパスを付ける |
| Port | サーバーが実際に待ち受けているPort。例:443 | TLSを見てPortを443に変更し、元の値を上書きする |
| Password | サービス提供元から指定されたTrojan接続用Password | アカウントのログインPasswordを使う、またはコピー時に空白や改行が混入する |
| SNI | 接続情報で指定されたTLSサービス名 | プロトコル付きURL、IPアドレス、または任意のWebサイトのドメイン名を入力する |
| Allow Insecure | 通常はオフにして、証明書検証を有効にする | 証明書検証のスキップを接続問題の解決策と誤解する |
Passwordはプロトコル認証に使う情報です。元の値をそのまま、大文字・小文字も区別して入力し、独自にハッシュ化やエンコードをしないでください。インポート用リンク内のPasswordはURLエンコードされている場合があります。元のリンクをアプリに解析させる方法を優先してください。Webページから手動でコピーする場合は、見えない文字が混入していないか確認します。メモは変更できますが、認証項目ではありません。メモを変更しても接続先の身元は変わりません。
結論:Portの指定元を確認する
接続情報に別のPortが記載されている場合は、その値を使います。443と明記されている場合に限り、443を入力してください。接続がタイムアウトする場合は、まずAddressとPortを確認し、Passwordの変更や証明書検証の無効化は行わないでください。
SNIと証明書名の関係
SNIはTLS ClientHelloで、接続先のサービス名をサーバーに伝える拡張機能です。1つのIPアドレスで複数のTLSサービスを提供している場合、サーバーはSNIに応じて証明書や接続先を選ぶことがあります。そのため、接続に使うAddressがIPアドレスでも、SNIには設定で指定されたドメイン名を入力する場合があります。役割が異なるため矛盾はありません。Addressは「どこに接続するか」、SNIは「どのTLSサービスを要求するか」を示します。
証明書の検証では、信頼チェーン、有効期限、証明書が想定するサービス名をカバーしているかも確認します。たとえばgateway.example.comの場合、サーバーに接続できるからといってSNIをwww.example.comに変更してはいけません。名前が一致しないと、Passwordが正しくてもTrojan認証に進む前に接続が失敗することがあります。
- Addressがドメイン名の場合:そのドメイン名が想定するサーバーに解決されることを確認します。設定で別途SNIが指定されている場合は、指定値を入力してください。
- AddressがIPアドレスの場合:設定にSNIが別途指定されているか確認してください。通常、ドメイン名用の証明書は、接続先のIPアドレスを直接カバーしません。
- SNIが空欄の場合:自動的にどの値が使われるか推測しないでください。元のサブスクリプションやサービス設定を確認し、明示的な指定が必要か確かめます。
- デバイスの時刻が正しくない場合:システムの「設定 → 一般 → 日付と時刻」で時刻を確認してください。時刻が誤っていると、証明書の有効期間の判定に影響することがあります。
SNIはPasswordではなく、接続を許可する情報でもありません。通常のTLSハンドシェイクではSNIは秘匿されないため、機密性の高いトークンを入力しないでください。SNIを変更してTLS接続が確立しても、設定が正常に使えるとは限りません。Trojan認証と実際のリクエストも確認してください。
Allow Insecure:証明書検証の設定
Allow Insecureは、通常のサーバー証明書検証をスキップできるようにする設定です。有効にすると、TLSで通信が暗号化されていても、接続相手が想定したサーバーであると確実に確認できません。暗号化と身元確認は別のものです。無効な証明書、差し替えられた証明書、信頼されていない証明書の問題を、この設定だけで隠さないでください。
Allow Insecure:オフ
推奨通常の証明書検証を維持します。証明書エラーが出た場合は、SNI、デバイスの時刻、証明書の有効期限、サーバー証明書のチェーンを確認し、原因を修正してください。
用途:日常的な接続、長期間使う設定
Allow Insecure:オン
サーバー証明書の検証が緩和され、身元確認の保証が失われます。PortやPasswordの誤り、トランスポート設定の不一致は解決できません。
用途:リスクを理解したうえでの短時間の診断。長期間使う設定にはしない
この設定をオンにした場合だけ接続できるなら、「証明書検証に関係する問題がある」と記録し、「解決した」とは扱わないでください。オフに戻し、証明書エラーの内容をサービス提供元に確認してもらいます。相手の身元を確認できない接続で機密情報を扱わないでください。検証を長期間無効にする方法を、一般的なトラブル対処として使わないでください。
設定の追加からリクエストの確認まで
サブスクリプションから該当するTrojanの項目がすでに追加されている場合は、インポート済みの項目と元の接続情報を確認してください。手動で追加し直す必要はありません。サブスクリプション管理の項目は更新時に再生成されることがあり、手動変更が保持されるかは項目の登録元によって異なります。診断の前に変更内容を記録しておき、端末上の一時的な変更をサーバー側の修正と混同しないようにしましょう。
-
新しい項目を追加
Home → 右上の「+」→ Add Serverを開き、TypeでTrojanを選択します。既存の項目を確認する場合は、同じ名前の項目を新規作成せず、対象の編集画面を開いてください。
-
接続情報を入力
Address、Port、Password、SNIの順に確認します。Allow Insecureはオフのままにします。トランスポートの追加項目は、既存の接続情報に従って入力し、指定されていない設定を有効にせず保存してください。
-
サーバーを選択
Homeに戻り、保存したTrojanの項目を選択します。元のGlobal Routing設定を記録してから、ルールによる振り分けの影響を抑えるため、短時間だけProxyを選択します。
-
リクエストを送信
接続スイッチをオンにします。初回接続時は、システムの案内に従ってVPN構成を許可してください。アクセスできることが確認済みのテストページを開き、新しいリクエストを送信して結果とアプリのログを確認します。遅延時間が表示されるだけでは、リクエストが正常に完了したとは判断できません。
-
ルーティング設定を戻す
テスト後は、元のGlobal Routing設定に戻します。Proxyでは接続できてもConfigに戻すと問題が起きる場合は、現在のConfigでルールがどう適用され、どのポリシーに振り分けられるかを確認してください。TrojanのPasswordをむやみに変更しないでください。
Global RoutingのProxyはルーティングモード、ルール内のPROXYはポリシーのキーワードです。別の項目なので混同しないでください。一時的にProxyへ切り替えることでルールの影響を切り分けられますが、証明書や認証の確認に代わるものではありません。テスト中にSettings → On Demandも変更する必要はありません。オンデマンド接続の条件と個別のTrojan設定は、別の確認対象です。
ハンドシェイクに失敗したときの確認手順
まず、どの段階で失敗したかを記録し、変更は一度に1項目だけ行います。ログの表現はシステムやエラーの発生元によって異なる場合があります。以下では症状ごとに確認点をまとめていますが、特定のメッセージだけを唯一の判断材料にしないでください。問い合わせ時はエラーの種類、発生時刻、ネットワークの種類、確認済みの項目を伝え、PasswordとサブスクリプションURL全体は伏せてください。
- ドメイン名を解決できない:Addressのスペルミスや余分なパスがないことを確認し、現在のネットワークでDNSによる名前解決ができるか調べます。Addressを解決できない場合、TrojanのPasswordを変更しても解決しません。
- 接続がタイムアウトする、または拒否される:AddressとPortを確認し、そのPortでサーバーが待ち受けているか調べます。タイムアウトはネットワーク経路、接続拒否はPortが開いていないことが関係する場合がありますが、症状だけで原因の所在を断定できません。
- TLSまたは証明書のエラー:SNI、デバイスの時刻、証明書名、有効期限を確認します。証明書チェーンと対象のTLSサービスをサービス提供元に確認してもらい、証明書検証は有効のままにしてください。
- TLS接続後すぐに切断される:Type、Password、トランスポート設定を再確認します。ハンドシェイク後の切断がPasswordの誤りとは限りません。サーバー側のログもあわせて確認してください。
- 接続後、一部のリクエストが失敗する:Global Routingと現在のConfigを確認し、リクエストが選択中の項目を経由しているか確かめます。そのうえで、接続先サイトの障害、DNSの問題、ルールの影響を切り分けてください。
Passwordをコピーしたのに接続できないのはなぜ?
コピーしたのがアカウントのログインPasswordではなく、TrojanのPasswordであることを確認してください。Homeから対象の項目の編集画面を開き、先頭・末尾の空白、改行、大文字・小文字を確認します。その後、PortとSNIも確認してください。正しいPasswordを何度も変更する必要はありません。
AddressにIPアドレスを入力した場合、SNIにもIPアドレスを入力しますか?
必ずしもそうではありません。設定でTLSサービス名としてドメイン名が指定されている場合は、そのドメイン名をSNIに入力し、Addressには接続用のIPアドレスを指定します。例のドメイン名をご自身の設定に流用したり、適当に選んだアクセス可能なWebサイトのドメイン名を使ったりしないでください。
Allow Insecureをオンにしたら接続できました。ずっとオンにしてもよいですか?
長期的な解決策として扱わないでください。オフに戻し、SNIとデバイスの時刻を確認したうえで、サービス提供元に証明書の有効期限とチェーンを調べてもらいます。この現象は証明書検証に問題があることを示しますが、サーバーの身元が信頼できることを証明するものではありません。
サブスクリプションを更新したら接続できなくなりました。どこを確認すればよいですか?
まず、更新前後のAddress、Port、SNI、トランスポート設定を比較し、Homeで実際に選択中の項目を確認します。更新によって端末上の変更が上書きされた場合は、元のサブスクリプションの接続情報に戻って設定元を確認してください。Passwordやサブスクリプションのトークン全体を公開の質問に貼り付けないでください。
アプリの入手と接続サービスは別のものです。Shadowrocketはクローズドソースの有料アプリで、App Storeから買い切りで入手できます。主な利用端末はiPhoneとiPadです。システム要件はApp Storeのページで確認してください。アプリの買い切り購入は、接続サービスの利用プランとは別です。この記事では手元にある接続情報の使い方のみを説明し、接続サービスやサブスクリプションの提供、販売、推奨は行いません。