この記事は、サービス提供元から入手したTrojan設定を持ち、Shadowrocketで各項目を手動確認したい方向けです。接続先、Port、Password、SNI、TLS認証の順に確認すれば、接続タイムアウト、証明書エラー、認証失敗を切り分けられます。example.comは項目の形式を示す例であり、接続先として利用できません。当サイトではサーバーやサブスクリプションを提供・販売・推奨していません。
1. Trojan接続におけるTLSとPasswordの役割
TrojanはTLSでクライアントとサーバー間の通信を保護し、暗号化された接続内でプロトコル認証を行います。設定時は、TLSが接続先サーバーの身元を確認し、Passwordが接続要求の許可をサーバーに確認する点を区別してください。Passwordが正しくても証明書の身元不一致は解消されず、証明書検証を無効にしてもPasswordの誤りは直りません。
通常、接続はドメイン名の解決、TCP接続、TLSハンドシェイク、Trojan認証、接続先へのアクセスの順に進みます。前の段階で失敗すると、後続の処理には進めません。そのため、タイムアウト時はまずAddressとPortを確認し、明確な証明書エラーが出た場合はSNI、証明書、システム時刻を確認します。Passwordを何度も入力し直す必要はありません。
結論:失敗した段階に応じて該当項目を修正
Portに接続できない場合はAddressとPortを確認し、証明書の検証に失敗する場合はSNIとシステム時刻を確認します。複数の項目を同時に変更すると、接続できても原因を特定できません。
2. Home → Add ServerからTrojanを追加
手動入力の前に、元の設定に記載されたサーバーアドレス、Port、Password、証明書に対応するドメイン名、サーバー側が指定する通信パラメータを用意します。すでにサブスクリプションから設定を読み込んでいる場合は、その記録を照合して確認してください。サーバー名に含まれる地域名やプロトコルの略称だけから、設定を推測しないでください。
-
追加画面を開く
Homeを開き、右上の「+」をタップしてAdd Serverを表示します。見分けやすいテスト用の設定を新規作成し、トラブル対処時に元の設定を失わないよう、既存の設定は残しておきます。
-
プロトコルを選択
Typeを開いてTrojanを選択し、Add Serverに戻ります。プロトコルはサーバー側の設定と一致させてください。他のプロトコルのPasswordや識別情報をTrojanに入力することはできません。
-
接続先を入力
元の設定に従ってAddressとPortを入力します。Addressにはホスト名またはIPアドレスのみを入力し、Portには数字を別途入力してください。共有リンク全体をAddressに貼り付けないでください。
-
認証情報を確認
PasswordとSNIを入力し、TLS証明書の検証は有効のままにします。設定に通信方式やその他のTLSパラメータが指定されている場合は、推測で値を追加せず、元の説明と一つずつ照合してください。
-
保存してテスト
保存後、Homeに戻り、作成した設定を選択して接続します。まず接続が確立することを確認し、その後Global Routingが実際のアクセスに与える影響を確認してください。
Homeでは接続設定の選択と接続の制御を行い、Configではルール設定を管理し、Settingsではアプリの設定を変更します。Configの振り分けルールを変更しても、Homeの設定にある誤ったPasswordは自動で修正されません。それぞれ個別に確認してください。
3. Address・Port・Passwordの入力ルール
Addressは接続先を指定します。ドメイン名の場合は先にDNSで名前解決され、IPアドレスの場合はそのアドレスに直接接続します。Portは接続先のどのサービスにアクセスするかを指定します。Addressが正しくてもPortを間違えると、タイムアウトや接続拒否が発生したり、Trojan以外のサービスに接続したりすることがあります。
| 項目 | 入力方法 | よくある間違い |
|---|---|---|
| Type | Trojanを選択 | 元の設定を確認せず、名前からプロトコルを推測して選択する。 |
| Address | ホスト名(例:edge.example.com)、または元の設定で指定されたIPアドレスを入力します。 | https://やパス、空白を追加する、またはPortまで一緒に貼り付ける。 |
| Port | サーバーが指定する数字を入力します(例:443)。 | よく使われるPortを既定値と思い込み、元の設定に記載された別のPortを上書きする。 |
| Password | 元のPasswordを大文字・小文字や記号も含めて、そのままコピーします。 | アカウントのログインPasswordを使う、末尾の文字が抜ける、改行が含まれる。 |
| SNI | 設定で指定されたTLSサーバー名を入力します(例:tls.example.com)。 | 完全なURLやPortを含める、または証明書と関係のないドメイン名を使う。 |
Passwordを独自に変換する必要はありません
Passwordはサーバー側で設定された認証用の秘密情報です。任意に作成するメモでも、特定の形式に整える必要がある識別情報でもありません。手動入力ではサービス提供元から受け取ったPasswordをそのまま使い、ハッシュ値を計算したり、再エンコードしたりしないでください。共有リンクしかない場合は、アプリで利用できるインポート方法を使って各項目を読み込みます。リンクから一部を切り出して推測で入力しないでください。
- コピー後は、特に先頭と末尾を確認してください。改行、空白、見間違えやすい文字にも注意します。
- Passwordに特殊記号が含まれる場合は、リンク内のエスケープ表記と実際の項目値を区別してください。混同しないようにしましょう。
- スクリーンショット、問い合わせ文、公開ログには、Passwordやサブスクリプショントークンなどの機密情報を残さないでください。
4. SNIと証明書:接続先と異なる名前でも、身元の検証は必要
SNIはTLSのServer Name Indication拡張です。クライアントはハンドシェイク時に、接続を希望する名前をサーバーへ伝えます。一つの接続先で複数のTLSサイトをホストする場合、サーバーはSNIに応じて証明書や処理経路を選択します。そのため、設定によってAddressとSNIが同じ場合も異なる場合もあります。値が異なるという理由だけで、独断で同じ値に変更しないでください。
たとえば元の設定でAddressにIPアドレス、SNIにtls.example.comが指定されている場合、そのIPアドレスに接続し、TLSハンドシェイクでは指定された名前を使います。ドメイン名はサーバーの設定と一致している必要があり、証明書も該当する名前と信頼チェーンで検証できなければなりません。よく知られたWebサイトのドメイン名に変更しても、証明書が有効になるわけではありません。
- 形式:SNIにはホスト名を入力します。
https://、:443、/pathは含めません。 - 名前:証明書のSubject Alternative Nameが、接続先として使うサービス名をカバーしているか確認します。証明書に表示された組織名だけを見て判断しないでください。
- 時刻:iPhoneの「設定 → 一般 → 日付と時刻」で、時刻が正確か確認します。日付が誤っていると、証明書が有効期間前または期限切れと判定されることがあります。
- SNIが空欄:元の設定にSNIが記載されていない場合は、まずサーバーが想定する名前と、アプリが空欄をどう扱うかを確認します。関係のないドメイン名を試しに入力しないでください。
SNI自体はPasswordではなく、それだけでサーバーの信頼性を証明するものでもありません。従来のTLSでは通常、SNIに独立した秘匿性はなく、SNIを入力すれば追加の本人確認が行われるという意味ではありません。TLSによる身元確認は、証明書全体の検証に依存します。サーバー証明書が期限切れ、または証明書チェーンが不完全な場合は、サーバー側で修正が必要です。
5. TLSとAllow Insecure:検証を維持し、設定で問題を隠さない
Trojanの基本設計はTLSを前提としています。設定時にTLSを速度向上のための追加オプションと捉えたり、接続を試すために無効にしたりしないでください。画面にTLSバージョン、ALPN、通信方式などの項目がある場合は、まず既定値のままにし、元の設定で明確に指定されている場合だけ変更します。クライアントとサーバーで対応するパラメータが共通している必要があります。項目を追加すれば必ず互換性が高まるわけではありません。
Allow Insecureは「安全でない接続を許可する」という意味で捉えられることがありますが、サーバー証明書の検証を緩和する設定です。互換性のあるプロトコルを有効にするものではありません。証明書の検証を回避すると、通信が暗号化されていても、サーバーの身元確認が弱まります。Addressの誤り、Portの遮断、Passwordの誤りは解決できません。
Allow Insecure:オフ
推奨証明書の通常の検証を維持します。接続できない場合は、証明書名、有効期間、信頼チェーン、システム時刻を順に確認し、原因を修正してから再テストしてください。
適用例:日常的な接続、有効な証明書を使うTrojan設定。
Allow Insecure:オン
証明書の検証を緩和すると、サーバーの身元確認が弱まります。既存の設定でこの項目が有効になっている場合は、まず理由を確認し、通常の検証ができる設定をサービス提供元から入手してください。一般的なトラブル解決策として扱わないでください。
適用例:既存設定のセキュリティ状態を確認する場合。日常的なトラブル対処には使用しません。
サーバー側でWebSocketなどの通信ラッパーを使っている場合は、対応する各パラメータも確認します。WebSocketのHostとPathはTLSのSNIとは異なる層の設定です。同じ値をそのまま機械的に入力しないでください。この記事で扱う基本項目だけでは、追加パラメータに関するサーバー側の指定を代替できません。
6. エラーの内容から原因を切り分ける:遅延だけで判断しない
遅延テストの結果から分かるのは、そのテスト方法で応答が得られたかどうかだけです。TCP接続が確立しても、TrojanのPassword認証が成功したとは限りません。テストで数値が表示されても、目的のWebサイトにアクセスできるとは限りません。原因を調べる際は、テスト方法、ネットワーク環境、エラー内容、発生した段階を記録し、一度に一つの項目だけを変更してください。
ずっとタイムアウトします。Passwordが間違っていますか?
必ずしもそうとは限りません。Homeで対象の設定を開き、AddressとPortを一つずつ確認してから、Wi-Fiとモバイル通信の両方でテストします。どちらのネットワークでも基礎となる接続を確立できない場合は、まず接続先に到達できるか、サーバーが稼働しているかを確認してください。timeoutだけを根拠にPasswordの誤りと判断しないでください。
証明書名が一致しないと表示された場合、どの項目を変更すればよいですか?
Add ServerのSNIが元の設定と一致しているか確認し、プロトコルの接頭辞やPortが誤って含まれていないか調べます。次に、サーバー証明書がその名前をカバーしているか確認してください。証明書自体が一致しない場合は、Allow Insecureを有効にするのではなく、契約中のサービス提供元に修正を依頼します。
遅延の数値は表示されるのに、Webページが開かないのはなぜですか?
まずHomeでテスト対象の設定が選択されていることを確認します。次にGlobal Routingを確認してください。Directではプロキシ経路を検証できません。比較のため一時的にProxyを選択し、テスト後に元の設定へ戻します。Proxyで動作し、Configで動作しない場合は、Configのルールとポリシーの選択を確認してください。
サブスクリプションを更新したら、手動で変更した設定が元に戻りました。
サブスクリプションの更新時に、リモート側の内容に基づいて設定が再作成されることがあります。更新後のAddress、Port、SNI、Passwordを改めて確認してください。比較テストが必要な場合は手動設定を別に作成し、一時的な変更を恒久的な修正として扱わないでください。正しい値は、利用中のサブスクリプションのデータ提供元にも反映する必要があります。
基礎となる接続とTLSの両方が成功した後に認証失敗や即時切断が発生する場合は、Password、サーバー側のアカウント状態、通信方式が一致しているかを確認してください。具体的なエラーはサーバーの実装によって異なります。「切断」という表示だけでPasswordが無効だと判断することはできません。問い合わせ時にはエラーの説明を残し、Password、サブスクリプションリンク、完全な接続先、その他の個人を特定できる情報は伏せてください。
7. 保存前後の最終チェックリスト
設定を確認したら、まず一つの接続をテストし、その後通常のルール設定に戻します。Global RoutingのProxy、Direct、Config、Sceneは異なるルーティングモードであり、Trojanの暗号化方式の違いではありません。モードを切り替えても、設定内のSNIやPasswordは変わりません。Sceneを使う場合は、現在のシーンに適用されている実際の設定も確認してください。シーンの切り替えによる変化をプロトコルの問題と誤認しないようにします。
- 接続先:Addressに余分な接頭辞やパスがなく、Portが元の設定と完全に一致している。
- 認証情報:Passwordを再エンコードしておらず、空白や改行も含まれていない。
- TLSの検証:SNIの設定根拠が明確で、証明書名と有効期間に問題がなく、Allow Insecureがオフになっている。
- 設定の選択:Homeで、名前が似た別の設定ではなく、テストした設定が選択されている。
- ルールの復元:一時的なテスト後にGlobal Routingを元に戻す。Configを使う場合は、実際に適用されるポリシーを確認する。
- サブスクリプションの確認:利用中のサブスクリプションから取得した設定の場合、次回の更新後も正しい設定を取得できることを確認する。
ShadowrocketはAppleプラットフォーム向けのクローズドソースの有料アプリで、主にiPhoneとiPadで利用できます。入手先はApp Storeのみで、買い切り方式です。アプリの購入に接続サービスは含まれません。システム要件とユニバーサル購入の対応状況は、App Storeの掲載内容をご確認ください。インストール前に正規版確認ページで、デベロッパ名Shadow Launch Technology Limited、公式アイコン、アプリID 932747118を確認してください。