Trojanの設定では、まずAddress、Port、Passwordを確認し、次にTLSのServer Name(SNI)と証明書検証をチェックします。接続先と接続情報をすでにお持ちで、iPhoneやiPadのShadowrocketに入力する方が対象です。順に確認すれば、接続タイムアウト、証明書エラー、認証失敗、ルールの不一致を切り分けられます。すべての不具合をパスワードのせいにしないための確認方法を紹介します。
Trojanの接続手順:まずTLS、その後に認証
標準的なTrojanでは、TLSでクライアントとサーバー間の通信を保護します。Shadowrocketは指定されたAddressとPortに接続し、TLSハンドシェイクとサーバー認証を行った後、暗号化された通信経路でTrojanの認証情報と接続先へのリクエストを送ります。そのため、ポートに接続できてもパスワードが正しいとは限らず、TLSに成功してもサーバー側で認証が通ったとは限りません。
Addressはサーバーへの接続先、SNIはTLSハンドシェイクで指定するサーバー名です。通常の認証では、証明書が指定された名前に対応しているかも検証します。これらの値には関連がある場合もありますが、互いに置き換えることはできません。本文中のドメイン名とポート番号は項目の説明用で、接続に使える情報ではありません。実際の値はサービス提供元に確認してください。
ポイント:証明書エラーでは、まず名前を確認
証明書の検証エラーが表示されたら、まずSNI、証明書に記載されたドメイン名、デバイスの日時を確認してください。パスワードを先に変更する必要はありません。パスワードを変えてもTLSのサーバー認証エラーは解消しません。
Add Serverの各項目を設定する
Homeの右上にある「+」をタップしてAdd Serverを開き、TypeでTrojanを選んで各項目を入力します。TLS関連の一部設定は、詳細設定にある場合があります。項目の表示はアプリの現在の画面に従ってください。入力欄をすべて埋めるために、案内されていない値を追加しないでください。
| 項目 | 入力内容 | よくあるミス |
|---|---|---|
| Type | サーバー側のプロトコルに合わせてTrojanを選択します。 | 別のプロトコル用のAddressや認証情報をTrojanの設定欄に入力する。 |
| Address | サーバーのドメイン名またはIPアドレスを入力します。例として、説明用ドメイン edge.example.com を使用します。 |
https://、パス、クエリパラメーターを含むURL全体を貼り付ける。 |
| Port | 指定された値を入力します。説明用のポート番号は 443 です。 |
443以外のポートを勝手に443に変更する、またはAddressにポート番号を含める。 |
| Password | Trojanサービスの認証パスワードを入力します。大文字・小文字や特殊文字もそのまま入力してください。 | サービス提供元のWebサイトのログインパスワードを使う、またはコピー時に空白や改行が入る。 |
| TLS | 標準的なTrojanはTLSを使用します。提供された設定内容に合わせて関連項目を確認してください。 | TLSを自由に無効化できる速度向上のスイッチだと考える。 |
| SNI / Server Name | サービス提供元が指定したTLSサーバー名を入力します。ホスト名のみを入力してください。 | URL全体、接続先Webサイトのドメイン名、または証明書と関係のない名前を入力する。 |
| Allow Insecure | 通常はオフにして、サーバー証明書の検証を有効にします。 | 接続に失敗するたびにオンにして、証明書の問題を見えなくする。 |
Trojanのパスワードは、別のプロトコルで使うUUIDとも、サブスクリプションURL内のtokenとも異なります。URLからインポートする場合は、アプリにURL全体を解析させてください。手入力する場合は、解析後の元のパスワードを使い、URL内のパーセントエンコード文字列をそのままパスワードとして入力しないでください。判断できない場合は、推測を繰り返さず、サービス提供元に項目を確認してください。
追加からテストまで:変更する値は一度に一つ
初回のテストには、必要な情報がすべてそろった設定を使うことをおすすめします。保存前に項目を一つずつ確認し、保存後は通信が実際に選択したサーバーを経由しているか確認してください。Homeの接続スイッチがオンでも、特定のWebサイトへの通信がTrojanサーバーを経由した証明にはなりません。
-
プロトコルを選択
Home → 右上の「+」→ Add Server → Type → Trojan の順に選択します。サーバー名だけでプロトコルを判断せず、設定情報を確認してください。
-
認証情報を入力
フォームに戻り、Address、Port、Passwordを入力します。Addressにプロトコルの接頭辞を付けず、Portは別欄に入力してください。Passwordの前後に空白がないかも確認します。
-
TLSを確認
TLS関連の設定を確認し、指定されたSNI / Server Nameを入力します。Allow Insecureはオフのままにしてください。追加の通信パラメーターが指定されていない場合は、独自に追加しないでください。
-
保存して選択
保存後、Homeに戻り、追加したサーバーを選択します。すでに接続中の場合は、設定を変更した後に接続し直してください。以前の接続状態で新しい設定を判断しないようにします。
-
ルールの影響を切り分ける
Home → Global Routingの現在の設定を記録し、一時的にProxyへ切り替えて、同じ接続先に新しいリクエストを送ります。テスト後は元のルーティング設定に戻してください。
SNI、証明書、Allow Insecureの役割
AddressとSNIが同じとは限りません。たとえば、AddressにサーバーのIPアドレス、SNIに証明書が対応するドメイン名を指定する設定も可能です。ただし、サーバーがその名前で正しい証明書を提示し、クライアントが対応する認証を完了できることが前提です。Webページを開けるという理由だけでそのドメインをSNIに入力しても、Trojan接続が成立するとは限りません。
証明書の検証では通常、信頼できる認証局からの証明書チェーン、有効期限、名前の一致を確認します。デバイスの日付が大きくずれている場合も、検証に失敗することがあります。SNIを指定しても期限切れの証明書が自動で修復されるわけではなく、ネットワーク接続の問題が解決するとも限りません。SNIをむやみに変更すると、サーバーから別の証明書が返されたり、ハンドシェイクを拒否されたりする可能性があります。
Allow Insecureをオフにする
推奨サーバー証明書の検証を有効にします。エラーが発生したら、名前、デバイスの日時、証明書の状態を確認し、サービス提供元に証明書の修正または正しい設定値を依頼してください。
適した用途:日常的な接続、正式に保存する設定
Allow Insecureをオンにする
証明書の検証を緩和する設定であり、証明書を修復するものではありません。TLS通信が続いていても、通信相手の身元を確認できるとは限りません。長期的な解決策として使わないでください。
適した用途:リスクを理解したうえで、管理された環境において証明書検証の問題を短時間で切り分ける場合
ポイント:検証可能な設定を維持する
Allow Insecureをオンにした場合にしか接続できないなら、証明書に関するエラーを記録してサービス提供元に確認してください。この状態を設定完了と見なさないでください。
ALPN、通信方式などの詳細設定も、サーバー側の設定と一致させる必要があります。別の設定例にある h2、http/1.1、WebSocketのパラメーターをそのまま流用しないでください。Trojanの認証、TLS、通信を運ぶ方式はそれぞれ異なる階層です。設定項目を追加すれば互換性が高まるとは限りません。
よくあるトラブル:症状に応じた確認方法
以下は診断の手がかりであり、特定のエラーが特定の原因を示すとは限りません。「接続できない」とだけ伝えるより、エラー全文とテスト条件を記録しておくと役立ちます。サービス提供元への問い合わせでは、Wi-Fiとモバイル通信のどちらを使ったか、どの段階で失敗したかを伝えてください。パスワードやサブスクリプションURL全体は公開しないでください。
パスワードを正確に入力しても接続がタイムアウトするのはなぜ?
まずHomeから対象サーバーを編集し、AddressとPortを確認します。同じリクエストをWi-Fiとモバイル通信でそれぞれ試してください。接続タイムアウトは認証前に発生することがあります。利用するネットワークを変えて結果が異なる場合は、Passwordだけを変更せず、ネットワークから接続先に到達できるかを確認してください。
証明書エラーが出た場合、SNIにはどのドメイン名を入力すればよい?
サービス提供元が指定したTLSサーバー名を入力してください。アクセス先Webサイトのドメイン名ではありません。デバイスの日付と時刻を確認し、名前のつづりも確認します。名前が正しくても証明書を検証できない場合は、証明書の有効期限とチェーンをサービス提供元に確認してください。
遅延の数値は表示されるのに、Webページを開けないのはなぜ?
遅延テストの結果だけでは、Webサイトへの通信が成功するか判断できません。Homeで対象サーバーが選択されていることを確認し、Global Routingで一時的にProxyを選んで新しいリクエストを送ってください。それでも失敗する場合は、遅延の数値だけで設定が正しいと判断せず、TLS、認証、接続先への到達性を確認します。
Proxyではアクセスできるのに、Configに戻すと失敗する場合は?
Configで現在選択されている設定と関連ルールを確認し、リクエストが想定したポリシーに割り当てられているか確認してください。DOMAIN-SUFFIX、IP-CIDR、GEOIP、FINALの条件と優先順も照らし合わせます。DNSの問題も確認し、すぐにTrojanのパスワードが原因だと決めつけないでください。
サブスクリプション更新後に、手動で変更したSNIが元に戻るのはなぜ?
更新によってサーバーの項目がサブスクリプションの内容で再生成されていないか確認してください。比較用に手動設定を一つ残し、サブスクリプションで配信されるSNIとPortをサービス提供元に確認します。サブスクリプションURLはサービス提供元から入手してください。項目を編集する前に元の値を記録し、更新内容と手動変更が上書きし合わないようにします。
設定を保存する前の確認リスト
テスト後は、「パラメーターが正しいこと」と「ルーティングが正しいこと」を分けて確認します。Global RoutingのProxy、Direct、Config、Sceneは、それぞれ異なる基準で通信を処理します。今回Proxyに一時的に切り替えたのはルールの影響を減らすためで、日常的にそのモードを使い続ける必要はありません。普段の設定に戻してから同じリクエストを再度送り、結果が想定どおりか確認してください。
- 接続パラメーター:TypeがTrojanに設定され、Address、Port、Passwordがサービス提供元の案内と一致している。サブスクリプションURLをサーバーのAddressとして入力していない。
- サーバー認証:指定されたSNIを使用し、Allow Insecureはオフになっている。デバイスの日時が正しく、証明書エラーを無視して設定を完了していない。
- ルーティング条件:現在のGlobal Routing設定を確認した。Configを使用する場合は、選択中の設定、ルールの順序、ポリシーの接続先を確認した。
- 更新時の動作:手動で追加した項目とSubscribeからインポートした項目を区別し、サブスクリプションの更新後に変更された項目を再確認した。
- 情報の保護:問題を報告する際は、Password、認証用token、サブスクリプションURL全体を隠し、エラーの種類と必要最小限の機密情報を含まないテスト条件を伝える。
ShadowrocketはAppleプラットフォーム向けのクローズドソースの有料アプリです。主にiPhone、iPadで利用でき、入手先はApp Storeのみです。システム要件と互換性はApp Storeの製品ページをご確認ください。アプリの買い切り価格に接続サービスは含まれません。この記事では、利用者がすでにサービス提供元と接続情報を用意していることを前提とし、接続先やサブスクリプションの提供、販売、推奨は行いません。