ShadowrocketのTrojan設定方法|Address・Port・Password・SNI・Allow Insecureを解説

TrojanがTLSを使う仕組みを解説し、Add Serverで設定する各項目の意味と入力時の注意点を紹介します。

この記事の概要

この記事は、サービス事業者から提供されたTrojanの接続情報を持ち、Shadowrocketで手動設定する方を対象としています。Address、Port、Password、SNI、Allow Insecureを順に確認し、接続結果から入力ミス、TLS証明書の検証エラー、ルーティング設定の問題を切り分けます。例示するアドレスは形式の説明用で、接続には使用できません。

Trojan接続におけるTLSの仕組み

TrojanはTLSで暗号化された接続を確立します。クライアントは指定されたサーバーのアドレスとポートに接続し、サーバーとのTLSハンドシェイクを完了した後、Trojanプロトコルで認証情報を送信します。そのため、アドレスへの接続、証明書の検証、サーバーによるパスワードの認証は、それぞれ別の確認項目です。Shadowrocketの接続スイッチがオンになっているだけでは、すべての処理が成功したとは限りません。

利用するサービス事業者と接続情報がすでにある場合は、提供された各項目をそのまま入力してください。Trojanというプロトコル名だけでは、すべてのサーバーで同じドメイン、ポート、SNIが使われるとは限りません。特に、表示用の名前やサブスクリプションURLを、実際のサーバーAddressと混同しないようにしてください。

2項目
接続先の設定:AddressとPort
1項目
Trojanの認証:Password
443
TLSでよく使われるポートの例。固定ではありません

たとえば、サーバーがserver.example.com、ポートが443と指定されている場合、クライアントからこのアドレスの443番ポートに接続できる必要があります。ここに記載したドメインは形式の例で、接続可能なサービスを示すものではありません。実際のポートが443以外なら、自己判断で443に変更しないでください。ポートの誤りは通常、認証前に接続を妨げます。一方、パスワードの誤りはTLSハンドシェイク後に判明する場合があります。

Add Serverの各項目を設定する

Homeでサーバーを追加するときは、TypeをTrojanに設定し、手元の接続情報に沿って各項目を入力します。画面の状態によって表示される項目が異なる場合があります。追加の通信パラメーターが記載されている場合は、現在のTrojan設定に該当するものか確認し、別のプロトコルのパラメーターをそのまま使わないでください。

項目入力する値間違えやすい点
Address接続情報に記載されたサーバーのドメイン名またはIPアドレス(例:server.example.com)。サブスクリプションページのURLは入力しません。また、ここにhttps://やポート番号を付けないでください。
Portサーバーが実際に待ち受けているポート。接続情報に443と明記されている場合は、その値を入力します。TLSを使うからといって、ポートが必ず443とは限りません。
PasswordそのTrojanサーバーに対応する認証用パスワード。大文字・小文字、前後の空白、コピー時に混入した改行に注意してください。
SNI接続情報で指定されたTLSサーバー名。指定がない場合は、Addressが証明書に対応するドメイン名か確認してください。SNIはTLSハンドシェイク時に使われる名前で、任意のメモ欄ではありません。
Allow InsecureTLS証明書の検証を緩和する設定です。通常はオフのまま検証してください。オンにしても、誤ったAddress、Port、Passwordは修正されません。

Addressにドメイン名とIPアドレスのどちらを指定するかは、特にTLSの段階で重要です。証明書は通常、ドメイン名に対して発行されます。IPアドレスで接続するよう指定され、別途SNIも案内されている場合は、AddressにIPアドレス、SNIに指定されたドメイン名を入力してください。見た目が似ているという理由でドメイン名を置き換えず、サーバーが実際に受け付ける名前を接続情報で確認してください。

HomeからTrojanを追加して接続を確認する

接続情報に各項目が明記されている場合は、手動で入力できます。利用中のサブスクリプションURLがある場合は、その方式で読み込むこともできますが、追加されたサーバーの情報は元の接続情報と照合してください。サブスクリプションURLをTrojanのAddressに入力しないでください。以下では手動で設定した後、接続が実際に機能しているか確認します。

  1. サーバーを追加する

    Homeを開き、右上の「+」をタップしてAdd Serverに進み、TypeでTrojanを選択します。最初にプロトコルの種類を確認してからほかの項目を入力し、同じ名前のサーバーを別の種類で誤って登録しないようにします。

  2. アドレスとポートを入力する

    接続情報に記載されたホスト名またはIPアドレスをAddressに、対応する数字をPortに入力します。たとえば、接続情報がserver.example.com:443の場合、コロンの前後をそれぞれ別の項目に入力します。

  3. 認証情報を確認する

    そのサーバー専用の値をPasswordに入力します。SNIが明記されている場合は、記載どおりに入力してください。Allow Insecureはオフのままにし、保存後にHomeへ戻って追加したサーバーを選択します。

  4. 接続結果を確認する

    Homeで接続をオンにし、Connectivity Testを実行します。失敗した場合は、まずAddress、Port、Passwordを確認し、次にSNIと証明書情報を確認してください。接続スイッチの状態だけでサーバーが使えると判断しないでください。

  5. ルーティング設定を確認する

    HomeでGlobal Routingを確認します。サーバー単体の接続を切り分ける際は、一時的にProxyを選んでプロキシ接続を確認できます。設定したルールに従って通常利用する場合は、Configに戻してください。Directでは、選択中のプロキシサーバーにリクエストは送信されません。

保存前に、各項目を元の接続情報と並べて照合してください。特に全角記号、コピー時に入った空白、ドメイン末尾の余分なスラッシュを確認します。同じサーバーをすでにサブスクリプションから読み込んでいる場合、問題の切り分けのために何度も複製を作る必要はありません。サブスクリプションの項目と手動設定のAddress、Port、TLS関連項目を比べると、違いを見つけやすくなります。

SNIとAllow Insecure:証明書検証の確認方法

SNIはTLSハンドシェイク時に送信されるサーバー名で、サーバーはこれをもとに適切な証明書を選択できます。クライアント側では、受信した証明書が信頼でき、指定した名前と一致するかも検証されます。そのため、正しいIPアドレスに接続できても、証明書の検証に成功するとは限りません。SNIの誤り、証明書の期限切れ、サーバー側の証明書設定の不備などが、TLS関連の接続エラーにつながることがあります。

Allow Insecureは証明書検証の厳格さに関する設定で、接続の問題を何でも解決するスイッチではありません。オンにした場合にだけ接続できるなら、証明書とサーバー名が一致しているか、さらに確認が必要です。それだけで元の設定が正しいとは判断できません。まず利用中のサービス事業者にSNIと証明書の設定を確認し、対応方法を判断してください。エラーを回避する目的で、確認していない設定を長期間使わないようにしましょう。

Allow Insecure:オフ

推奨

通常どおりTLS証明書と対応するサーバー名を検証します。検証に失敗した場合は、Address、SNI、デバイスの時刻、サーバーの証明書設定を確認してください。

用途:日常的な接続、初回の設定確認

Allow Insecure:オン

証明書検証の要件が緩和され、名前の不一致や証明書の異常が見過ごされる可能性があります。サーバーアドレスを変更する設定でも、Trojanのパスワードを代替する設定でもありません。

用途:リスクを把握したうえで、明確な切り分け目的で一時的に比較する場合

確認の順序:まずサーバー名を確認し、その後スイッチを検討する

TLS証明書の検証エラーが発生したら、まずAddressが接続情報と一致しているか、SNIが指定されたドメイン名か、デバイスの時刻が正しいかを確認します。それでも解決しない場合は、Allow Insecureを先に変更するのではなく、サーバーの証明書を確認してください。

SNIとPasswordの役割も区別しましょう。前者はTLS接続と証明書名の確認に使われ、後者はTrojanの認証に使われます。SNIを変更してもパスワードの誤りは解消せず、パスワードを再入力しても期限切れの証明書は修復できません。失敗した処理に対応する項目を確認すれば、複数の項目を同時に変更するより原因を特定しやすくなります。

接続できない場合の症状別チェック

切り分けでは、一度に変更する項目を1つにして、変更前後のConnectivity Testの結果を記録してください。まずデバイス自体がネットワークに接続できることを確認し、その後、対象サーバーの接続情報が現在も有効か確認します。サーバーを利用中のサブスクリプションで管理している場合、更新後に接続情報が変わることがあります。更新後の項目を確認し、古い手動設定と新しい情報を混在させないでください。

設定直後に接続タイムアウトが表示される

まずAddressにサブスクリプションURLを入力していないか、Portが接続情報と一致しているかを確認し、現在のネットワークからサーバーに接続できるか調べてください。接続段階でタイムアウトする場合、Passwordを何度変更しても、到達できないアドレスやポートの問題は通常解決しません。

証明書またはTLSのエラーが表示される

デバイスの時刻、SNIの入力、Addressに対応するドメイン名を確認してください。IPアドレスで接続している場合は、別途SNIが指定されていないか接続情報を確認します。Allow Insecureはオフのままにし、利用中のサービス事業者にサーバー証明書の状態を確認してください。

TLS接続はできるのに利用できない

Passwordを再度貼り付け、大文字・小文字、前後の空白、改行の混入を確認してください。次にHomeで正しいTrojanの項目を選択し、Connectivity Testを実行します。接続スイッチの状態だけで判断しないでください。

サーバーを選択しているのに、Webサイトへ直接接続される

HomeでGlobal RoutingがDirectになっていないか確認してください。一時的にProxyへ切り替えてサーバーを確認し、その後Configに戻って実際に適用されるルールを確認できます。ルール内のDIRECTやREJECTも、個々のリクエストの処理に影響します。

サブスクリプション更新後に手動設定と違いがあるのはなぜ?

手動で保存した項目は、別のサブスクリプション項目が変更されても自動では同期されません。更新後のサーバーのAddress、Port、Password、SNIを照合し、どちらの項目でテストしているか確認してください。サブスクリプションの読み込みと更新には、自分がすでに持っているURLのみを使用してください。

一部のWebサイトだけにアクセスできず、Connectivity Testが正常な場合、原因はTrojanの接続情報とは限りません。Global RoutingがConfigの場合、設定内のDOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALなどのルールによって、リクエストごとにPROXY、DIRECT、REJECTへ振り分けられることがあります。該当するルールとポリシーを確認してください。Proxyへの切り替えはルーティングの問題とサーバー接続の問題を切り分けるために使い、ルールを継続的に確認する代わりにはしないでください。

ShadowrocketはApp Storeで提供される買い切り型アプリで、開発者はShadow Launch Technology Limitedです。アプリの購入と接続サービスは別のものです。iPhoneやiPadなどの対応システム要件は、App Storeのページをご確認ください。Home、Config、Settingsの基本操作を続けて学ぶ場合は、まずサイト内の入門ガイドを参照し、その後この記事に戻ってTrojanの各項目を確認してください。

Shadowrocketの入手先を確認する

まずApp Storeで正規の配信元を確認する方法を読み、入門ガイドでサーバーの追加と接続確認の基本手順を学びましょう。

正規配信の確認ページへ 使い方を見る
App Storeで正規配信を確認