この記事は、利用権のあるサービス設定をすでに持っていて、ShadowrocketにTrojan接続を追加する方を対象としています。サーバーアドレス、認証用Password、TLS証明書の名前を確認し、Home → 右上の「+」→ Type → Trojanの順に設定します。各項目を照合し、接続エラーの内容からネットワーク、証明書、Passwordのどこを確認すべきか判断できるようにします。Allow Insecureをむやみに切り替えて対処する方法は扱いません。
Trojanの仕組み:TLSとPasswordの役割
ShadowrocketはAppleプラットフォーム向けの有料クライアントです。この記事では、すでにお持ちの設定情報の入力と確認方法を説明します。サーバー、サブスクリプション、接続サービスの提供・販売・推奨は行っていません。アプリの購入と接続サービスは別のもので、アプリを購入しても利用可能なサーバーアドレスやPasswordが付属するわけではありません。
一般的なTrojan接続では、まずTLSで暗号化された通信路を確立し、その中で認証情報とプロキシ要求を送信します。TLSは通信内容を保護し、証明書によってサーバーの身元を確認します。TrojanのPasswordは、サーバー側が接続を許可されたユーザーを識別するためのものです。この2つは互いに代替できません。Passwordが正しくても証明書の確認を省略できるわけではなく、証明書が有効でもPasswordが正しいとは限りません。
要点:まずTLSを確認し、その後Passwordを確認
証明書またはTLSハンドシェイクのエラーが出た場合は、まずAddress、SNI、端末の日時、証明書の有効性を確認してください。TLSが正常に確立してからTrojan Passwordを確認します。証明書検証を無効にして設定確認の代わりにしないでください。
Trojanは、ドメイン名を入力すれば必ず接続できるというものではありません。サーバーによってポートが異なり、特定の通信方式が必要な場合もあります。お手元の設定にWebSocket、Host、Pathが指定されている場合は、その設定も含めて維持してください。TypeがTrojanだからといって、別の接続の値に置き換えないでください。
設定項目の確認:Address、Port、Password、SNI
入力前に、すべてが同じ接続に対応する設定情報をそろえてください。ある接続のAddress、別の接続のPassword、さらに別の設定のSNIを組み合わせてはいけません。表のドメイン名とポートは入力形式の例であり、接続先の情報ではありません。
| 項目 | 入力する内容 | 確認ポイント |
|---|---|---|
| Type | Trojan | サーバー側のプロトコルに合わせて選択してください。他のプロトコルの項目ルールで代用しないでください。 |
| Address | お手元の設定に記載されたドメイン名またはIPアドレス | ホスト部分のみ入力します。例:gateway.example.com。https://やWebページのパスは付けません。 |
| Port | サーバーが実際に待ち受けているポート | 443はよく使われる値にすぎません。8443が指定されている場合は、8443をそのまま入力します。 |
| Password | このTrojan接続に設定されたPassword | 大文字と小文字を区別します。前後の空白や改行がないか確認してください。App StoreのアカウントPasswordは入力しません。 |
| SNI | お手元の設定で指定されているTLSサーバー名 | 例:tls.example.com。プロトコルの接頭辞、ポート、パスは付けません。 |
| Allow Insecure | 通常はオフのままにします | このスイッチは証明書検証に関係する設定で、接続できないときに使う万能な解決策ではありません。 |
Addressは接続先を、Portはそのホストのどの待受口にアクセスするかを指定します。Passwordはサーバー側で使うプロトコル認証情報であり、UUID形式に合わせる必要はありません。Passwordをコピーした後は文字数や先頭・末尾の文字を確認できますが、完全なPasswordを公開の質問欄に貼り付けないでください。
追加手順:HomeからTrojan接続を保存する
以下では手動入力の手順を説明します。サブスクリプションから読み込んだ項目がすでにある場合は、元の設定情報と照合してください。同じ項目を重複して手動作成する必要はありません。サブスクリプションの管理と個別接続の編集は別の操作です。ローカルの項目を変更しても、次回のサブスクリプション更新で内容が再生成される場合があります。
-
設定情報を準備する
お手元の設定からAddress、Port、Password、SNI、通信方式の要件を整理します。入力を始める前に、すべてが同じTrojan接続の情報であることを確認してください。
-
プロトコルを選択する
Home → 右上の「+」→ Type → Trojanの順に開きます。Typeを選択してから、その種類に対応する項目を入力してください。別のTypeの初期値が残らないようにします。
-
接続情報を入力する
Address、Port、Passwordの順に入力します。Addressにはホスト情報のみ、Portには数字のみを入力します。Passwordは元の値をそのままコピーし、独自にエンコードしたり引用符を付けたりしないでください。
-
TLSを確認する
TLS関連の設定でSNIとAllow Insecureを確認します。SNIにはお手元の設定で指定された名前を入力します。通常は証明書検証を有効にしたまま、追加の通信項目も確認してください。
-
保存して接続を確認する
保存したらHomeに戻り、追加した項目を選択して接続を開始します。初回はシステムの案内に従ってVPN構成の追加を許可してください。スイッチの状態だけで判断せず、通常のWebリクエストを使って接続を確認します。
確認の前にHome → Global Routingも確認してください。Proxyに一時的に切り替えると、Configのルールによる影響を切り分けやすくなります。Directでは選択中のTrojan接続によるプロキシ転送を確認できません。Configでは現在の設定ルールに従ってリクエストの経路が決まります。Sceneの場合は、設定済みのシーンも含めて確認してください。テストが終わったら普段の設定に戻し、調査用の設定をそのまま使い続けないようにします。
SNIと証明書:接続先のAddressと異なっていても問題とは限りません
SNIはTLSハンドシェイクで送信されるサーバー名で、サーバーが証明書や対応する仮想ホストを選ぶために使われます。一般的な設定では、SNIは証明書の対象ドメインと一致します。AddressとSNIは同じ場合も多いものの、用途は異なります。値が異なるという理由だけで、勝手に一致させないでください。
たとえば、お手元の設定でAddressにIPアドレスを指定し、SNIには証明書に対応するドメイン名を指定する場合があります。この場合、クライアントはIPアドレスに接続し、TLSハンドシェイクでは指定された名前を使用します。逆に、サーバー証明書と無関係なドメインを適当に入力しても、証明書検証が自動的に通るわけではありません。
- 名前の一致:SNIのスペルが正しいか、証明書の有効な名前に含まれているか確認してください。Webページの完全なURLは入力しません。
- 有効期間:証明書の期限切れ、まだ有効でない証明書、端末の日付の大幅なずれは、検証エラーの原因になります。まず端末のシステム日時を確認してください。
- 信頼チェーン:名前が正しくても、証明書チェーンが完全とは限りません。サーバー証明書チェーンの問題は設定の管理者に確認してください。Passwordを変更しても解決しません。
- 未指定の場合:SNIが指定されていない場合は、まず元の設定の説明を確認してください。別のドメインを推測で入力したり、どの接続でも空欄でよいと決めつけたりしないでください。
同じ設定にWebSocketのHostとTLSのSNIが含まれている場合は、それぞれ個別に確認してください。前者はHTTPリクエストに関する情報、後者はTLSハンドシェイクに関する情報です。同じ値になることはありますが、同じ項目ではありません。「統一して見えるように」という理由で両方を上書きしないでください。
Allow Insecure:検証を省略して問題を覆い隠さない
Allow Insecureは通常、通常の証明書検証要件を満たさないTLS接続を許可する設定です。有効にしても通信が暗号化される場合はありますが、サーバーの身元を確実に確認できたことにはなりません。暗号化と身元確認は別の要件です。後者が欠けると、中間者による介入への防御が弱まります。
証明書エラーが出たら、まずSNI、端末の日時、証明書の有効期間、信頼チェーンを確認してください。設定の説明に特殊な証明書が必要と明記されている場合は、接続できるようになったというだけで正しい設定と判断せず、証明書の扱いを設定の管理者に確認してください。
トラブルシューティングでは、一度に変更する項目を1つにして、変更前の値を記録してください。SNI、Port、Password、Allow Insecureを同時に変更すると、その後アクセスできても原因を特定できません。特に、問題のある接続の設定をすべてのTrojan項目にコピーしないでください。
- ポートに接続できない:まずAddress、Port、現在のネットワークから到達できるかを確認します。証明書のスイッチを切り替えても、待ち受けていないポートが使えるようにはなりません。
- Passwordが一致しない:元の設定とPasswordを照合してください。TLS検証を緩めても、サーバー側の認証結果は変わりません。
- 証明書が一致しない:名前、日時、証明書チェーンを確認し、設定の管理者が原因を特定できるようエラー情報を残してください。
接続できないときの確認方法:問題の層ごとに切り分ける
Homeで接続がオンになっていても、ローカルで接続処理が始まったことを示すだけです。接続先でTrojan認証が成功したことや、Webページの通信がその接続を通っていることまでは確認できません。まず正しい項目が選択されているか確認し、エラー情報と実際のリクエスト結果を合わせて判断してください。次の表は確認の手がかりであり、個々のエラーに対する唯一の説明ではありません。
| 確認できる症状 | まず確認する項目 | 次に行うこと |
|---|---|---|
| 接続がタイムアウトする | アドレス解決、ポート、ネットワーク経路、サーバーの状態 | AddressとPortを再確認します。利用可能な別のネットワークでも同じリクエストを実行し、結果の違いを記録してください。 |
| 証明書またはTLSエラーが表示される | SNI、端末の日時、証明書チェーン | 元のエラーメッセージを残し、名前を確認したうえで、サーバー証明書について設定の管理者に確認します。 |
| ハンドシェイク直後に切断される | Password、サーバー側の認証、通信方式の設定 | Passwordを再度コピーし、通信方式、Host、Pathなど、お手元の設定と項目ごとに照合してください。 |
| 一部のWebサイトだけ接続できない | Global Routing、ルールの適用先、DNS | 一時的にProxyに切り替えて比較し、その後Configに戻って実際に適用されたルールを確認してください。 |
Configでは、WebサイトによってDOMAIN-SUFFIXなどのドメインルールでDIRECTに指定されている場合や、IP-CIDR、GEOIP、末尾のFINALポリシーが適用される場合があります。そのため、「そのWebサイトが引き続き直接接続される」ことだけでTrojanの設定ミスとは判断できません。まず実際に適用されたポリシーを確認してから、接続設定を変更するか判断してください。ルールの問題とプロトコルの問題は分けて対処します。
調査に必要な情報を伝える際は、現在のネットワーク、選択中のGlobal Routingの設定、エラーメッセージ、変更した項目を記載してください。Password、サブスクリプションURL内のトークン、その他の個人用接続情報は伏せてください。スクリーンショットやログを共有する前にも、これらの情報が含まれていないか確認します。
よくある質問:設定を保存したあとに確認すること
Portは必ず443にする必要がありますか?
いいえ。Homeで対象の項目を編集し、お手元の設定に記載されたPortを確認してください。サーバーが8443で待ち受けている場合は8443を入力します。よく使われるポート番号に変更しても、サーバーの待受設定は変わりません。
SNIにはAddressをそのまま入力できますか?
お手元の設定と証明書名で許可されている場合に限ります。AddressがIPアドレスの場合や証明書名と異なるドメインの場合は、Addressを機械的にコピーせず、設定で明示されたSNIを使ってください。
Allow Insecureを有効にすると接続できます。このまま使い続けてもよいですか?
まず証明書検証を有効に戻し、SNI、システム日時、証明書チェーンを確認してください。この現象は証明書検証の確認が必要であることを示していますが、サーバーの身元が信頼できることを証明するものではありません。設定の管理者に原因を確認し、対処してもらってください。
サブスクリプション更新後に手動で変更した設定が元に戻るのはなぜですか?
サブスクリプションを更新すると、リモート側の内容から項目が再生成される場合があります。ご自身が利用しているサブスクリプションの元の設定と管理者からの案内を確認してください。リモート側の内容に誤りがある場合は設定の提供元で修正し、ローカルの項目を何度も変更して対処しないでください。
ネットワークを切り替えたあと自動的に接続が始まります。問題かどうかはどう判断できますか?
Settings → On Demandの有効状態と設定済みの条件を確認し、自動接続が開始されたか判断してください。On Demandは接続を開始するタイミングを制御するもので、誤ったTrojan PasswordやSNIを修正する機能ではありません。自動起動と接続先への接続成功は、それぞれ別に確認してください。