ShadowrocketのTrojan設定方法|Password・SNI・証明書検証ガイド

TrojanがTLSを使う仕組みを解説し、Add ServerのAddress、Port、Password、SNI、Allow Insecure各項目の意味と、入力ミスによるハンドシェイク失敗の症状を紹介します。

この記事のポイント

ShadowrocketのHomeに、すでに利用しているTrojanの設定を追加する際は、まず接続先のアドレスとポートを確認し、次にPassword、SNI、証明書検証をチェックします。本記事では、利用者自身がサービスと設定情報を用意していることを前提に、手動入力、インポート後の確認、ハンドシェイク失敗時の切り分け手順を説明します。例示するドメインは各項目の説明用で、接続先としては利用できません。

Trojanの接続手順:TLS確立後にPasswordを認証

Home → Add ServerでTypeにTrojanを選ぶと、接続先サービスの情報を入力できます。一般的なTrojan接続では、まずAddressで指定したホストのPortに接続し、TLSハンドシェイクを行った後、暗号化された通信路で認証情報を送信します。Passwordが正しくても証明書が正しいとは限らず、証明書が有効でもアカウント認証の成功は保証されません。それぞれ個別に確認してください。

443
TLSでよく使われるポート番号。実際の値は手元の設定に従ってください
1–65535
Portに入力できる数値の範囲。プロトコル名やパスは入力しません
3段階
接続先へ到達 → TLSハンドシェイク → Trojan認証

設定情報に443とあっても、それだけでサービスが利用可能とは判断できません。また、ほかのポートを自動的にこの値へ変更しないでください。TLSは別のポートでも利用できます。同様に、あるポートでTCP接続が成立しても、ネットワーク経路と待ち受けサービスに到達できる可能性があることを示すだけで、そのポートで適切なTrojanサービスが動作している証明にはなりません。

Add Serverの項目ガイド:アドレス、ポート、Passwordの入力方法

Homeの右上にある追加ボタンからAdd Serverを開き、まずTypeをTrojanに設定してから、手元の情報を各項目に入力します。以下のconnect.example.comとtls.example.comは説明用の予約ドメインです。表は入力形式を示すもので、接続テスト用の設定ではありません。画面の言語やフォームの配置によっては、SNIがTLS関連の項目内に表示されます。項目の意味を確認しながら入力してください。

項目入力する内容確認ポイント
TypeTrojan接続先サービスの種類と一致させます。
Address利用中のサービスのドメイン名またはIPアドレス(例:connect.example.com)https://、ポート番号、Webページのパスは付けません。
Portサービス提供元が指定した数値(例:443)Addressとは別に入力し、全角数字は使用しません。
PasswordTrojanサービス用の完全なPassword大文字と小文字を区別します。前後の空白やコピー時に混入した改行も確認してください。
SNI手元の設定で指定されているTLSホスト名(例:tls.example.com)ホスト名を入力します。URL、パス、ポート番号は入力しません。
Allow Insecure通常はオフのままにします証明書検証を無効にして、ホスト名、有効期間、証明書チェーンの問題を回避しないでください。

Passwordに貼り付けたら、文字数で判断せず、元の設定情報と照合してください。TrojanのPasswordはApp Storeの購入情報でも、自分で生成するUUIDでもありません。サービス提供元のWebサイトにログインするパスワードしかない場合は、対応する接続設定を入手してください。Webサイトのログインパスワードをそのまま入力してはいけません。

Addressにドメイン名を入力すると、接続前にそのドメインを名前解決する必要があります。IPアドレスを入力すれば該当するアドレスへ直接接続しますが、TLSのホスト名検証が不要になるわけではありません。ドメイン名の証明書を使うサービスにIPアドレスで接続する場合も、手元の設定に従って正しいSNIを指定してください。IPアドレスを証明書のドメイン名として入力することはできません。

SNIと証明書検証:接続先と検証する名前は異なる場合があります

SNIにサービス提供元が指定したホスト名を入力すると、TLSハンドシェイクでその名前が送信され、接続先は対応する証明書やサービスを選択できます。Addressは「どこに接続するか」を指定し、SNIはTLSサービスに「どのホスト名へ接続するか」を伝えます。一般的なTLS設定では、このホスト名が証明書の本人確認にも使われます。両方に同じ値を使うことはよくありますが、必ず一致するとは限りません。

証明書検証を有効にする

推奨

Allow Insecureはオフのままにし、正しいSNIを指定して、システムの信頼機能で接続先の証明書を検証します。証明書の期限切れ、ホスト名の不一致、信頼されていない証明書が原因の場合は、設定または接続先の証明書を修正してください。

適した用途:日常的な接続、設定が正しいかの確認

証明書検証をスキップ

Allow Insecureをオンにすると証明書検証が緩和され、接続先の本人確認が弱まります。Password、Port、通信方式の誤りは修正されず、接続できたことだけで設定が正しいとは判断できません。

適した用途:既存設定に伴うリスクの違いを確認する場合。通常の修正方法としては推奨しません

要点:検証を回避せず、まずSNIを修正

証明書のホスト名が一致しない場合は、まずSNIを手元の設定および証明書に含まれるドメイン名と照合します。名前が正しいのに失敗する場合は、デバイスの時刻、証明書の有効期間、サーバーの証明書チェーンを確認してください。

SNIを空欄にしても、どの接続先でも検証に通るとは限りません。既定の名前がどう選ばれるかは設定によって異なります。SNIが明示されているサービスでは、指定された値をそのまま使用してください。証明書がtls.example.comだけを対象としている場合、SNIを別のWebサイトのドメイン名に変更しても、そのWebサイトの証明書として認識されるわけではありません。

手動追加と初回確認:保存後、実際に使う接続先を確認

HomeでAdd Serverの入力を終えたら保存し、追加した項目を選択して接続を確認します。疑わしい項目を一度に一つだけ変更し、結果を記録してください。Password、SNI、Portを同時に変更すると、どの変更が効果をもたらしたか判断できません。初回接続時にシステムの案内が表示された場合はVPN構成の追加を許可し、その後Shadowrocketに戻って接続状態を確認します。

  1. Typeを選択

    Home → 右上の追加ボタン → Add Server → Typeの順に開き、Trojanを選択します。手元の情報でプロトコルの種類を確認し、ほかのプロトコルの設定をこのフォームに流用しないでください。

  2. 接続情報を入力

    手元のホスト名をAddress、サーバーのポート番号をPort、完全なPasswordをPasswordに入力します。アドレスからURLのスキームを取り除き、ポート番号は別の項目に入力してください。

  3. TLSを確認

    SNIまたは対応するTLSホスト名の項目に、手元の設定値を入力します。Allow Insecureはオフのままにし、通信方式の設定も指定されている場合は合わせて確認してください。

  4. 保存して選択

    保存後にHomeへ戻り、追加したTrojanの項目を選択してGlobal Routingを確認します。切り分け中は一時的にProxyを選ぶと、ルールによるテスト経路への影響を抑えられます。

  5. 確認後に元へ戻す

    通常のアクセスを一度行い、接続ログで実際の宛先、使用された接続先、エラーが発生した段階を確認します。確認後はGlobal Routingの元の設定と自動接続の設定に戻してください。

Global RoutingでConfigを使う場合、リクエストは現在の設定内のルールに照合され、DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALなどによって異なるポリシーが適用されることがあります。ページが開いても、追加したばかりのTrojanを経由したとは限りません。Directは直接接続するための設定であり、Directで接続できても、そのTrojanの項目が利用できる証明にはなりません。Sceneも実際の設定内容を確認し、Proxyと同じものだと決めつけないでください。

ハンドシェイクに失敗したときの確認方法:ネットワーク、TLS、認証の順に切り分ける

接続ログにエラーが表示されたら、まず名前解決、接続、TLSのどの段階で失敗したかを確認し、該当する項目を修正してください。以下はよく見られる症状であり、特定の表示が必ず一つの原因だけで起きるわけではありません。具体的なメッセージはシステムや接続先の応答によって異なる場合があります。遅延の数値や一度のタイムアウトだけでPasswordの誤りと判断しないでください。

確認された症状まず確認する項目次に行うこと
ドメインを名前解決できず、接続先に到達していないAddressの入力、使用中のネットワークのDNSまずホスト名を名前解決できることを確認します。Passwordを変更したり、証明書検証をオフにしたりしないでください。
接続がタイムアウトする、または拒否されるAddress、Port、接続先の待ち受け状態、ネットワーク経路手元の設定に記載されたポートを確認し、別の利用可能なネットワークでも試してください。TLS関連の項目を続けて変更しないでください。
証明書のホスト名が一致しないという表示SNIと証明書に含まれるドメイン名サービスで指定されたホスト名に戻し、スキーム、パス、余分な空白が入っていないか確認してください。
証明書の期限切れ、または信頼されていないという表示デバイスの時刻、証明書の有効期間、証明書チェーンシステムの時刻を確認し、証明書の問題を利用中のサービス提供元に伝えてください。証明書検証は有効のままにします。
TLSの後に接続がすぐ終了する、または認証に失敗するPassword、Type、サービスの稼働状況、通信方式の設定元の設定情報をもう一度確認してください。接続が終了しただけでは、Passwordの誤りとは断定できません。
接続は確立するが、指定したWebページが開かない実際に選択している接続先、ルールのポリシー、宛先のDNS、接続先からのアクセスまず該当リクエストの実際の経路を確認し、ルールの問題と接続先サイトの問題を切り分けてください。

不具合を報告する際は、エラーが発生した段階、ネットワークの種類、機密情報を除いた項目の差分を伝えてください。Password、完全な共有リンク、サブスクリプションURLに含まれるtokenは機密情報です。スクリーンショットと一緒に公開送信しないでください。利用中のサービス提供元に問い合わせる場合は、「使えない」とだけ伝えるより、証明書エラーや接続切断の具体的な症状を説明すると原因を特定しやすくなります。

設定をインポートした後に確認すること:上書きと更新元

Homeで既存の共有リンク、QRコード、サブスクリプションからTrojanをインポートした場合も、項目の編集画面を開いてType、Address、Port、SNI、Allow Insecureを確認してください。インポートで手入力のミスは減らせますが、接続先の設定が現在も有効であるとは限りません。また、リンクに追加の通信設定がすべて含まれているとも限りません。

ルールによる振り分けと接続の問題を切り分けるには、接続トラブルの確認方法とルールとポリシーの解説もご覧ください。まず個別項目の接続設定が正しいことを確認し、その後、通常使用するConfigのルールで対象リクエストを検証すると、接続先の設定、DNS、ポリシーの選択を別々に確認できます。

App Storeの正規配信ページデベロッパ名とアプリIDを確認