この記事の要点

ShadowrocketでTrojanを設定する際は、まずサービス提供元から受け取ったAddress、Port、Password、SNIを確認し、TLS証明書の検証とトランスポート設定をチェックします。必要な接続情報が手元にあり、サーバーを手動追加・修正したい方向けの手順です。順に確認すれば、アドレスの誤り、認証失敗、証明書エラー、ルールによる振り分けの問題を切り分けられ、設定を何度も変えて試す必要がありません。

TrojanとTLS:接続と認証を区別する

Trojanは通常、TLS接続の中でプロキシリクエストを送信します。接続時は、まずサーバーのアドレスとポートに接続し、TLSハンドシェイクと証明書検証を行ってから、PasswordでTrojan認証を行います。TLS証明書の検証とPassword認証は別の段階です。パスワードが正しくても証明書名の不一致は解消されず、証明書が有効でもパスワードが正しいとは限りません。

手動設定では、手元にあるサーバー情報を基準にしてください。サブスクリプションリンクはサービス提供元から取得します。すでにサブスクリプションを利用している場合は、ノード名からプロトコルを推測せず、インポートした項目を確認しましょう。名前に「TLS」や「443」が含まれていても、それだけでTypeをTrojanにする根拠にはなりません。

443
TLSでよく使われるポートであり、Trojan専用の固定ポートではありません
1–65535
Portに指定できる範囲。実際の値はサーバー設定によって異なります
4項目
まずAddress、Port、Password、SNIを確認

Add Server:サーバー情報を順に入力

追加する前に、サーバー側で指定されたトランスポート方式を含め、必要な情報をそろえてください。以下では手動追加の手順を説明します。画面の言語によって表示が異なる場合があるため、英語の画面項目名はそのまま記載しています。サービス提供元からサブスクリプションリンクを受け取った場合は、Subscribeからインポートしてください。リンク全体をAddressに入力しないでください。

  1. 追加画面を開く

    Homeを開き、右上の「+」をタップしてAdd Serverを表示し、TypeでTrojanを選択します。先にTypeを決めてから各項目を入力し、別のプロトコル用の認証情報を誤って入力しないようにしましょう。

  2. 接続先を入力する

    Addressにサービス提供元から指定されたホスト名またはIPアドレスを、Portに対応するポート番号を入力します。たとえば、Addressがedge.example.com、Portが443です。これは入力形式の例であり、実際に接続できるサーバーではありません。

  3. 認証情報を入力する

    TrojanのパスワードをPasswordにそのまま入力し、大文字・小文字、記号、前後の空白を確認します。サブスクリプションURL内のtoken、メモ用の名前、WebサイトのログインパスワードをTrojanのパスワードとして入力しないでください。

  4. TLSを確認する

    サービス提供元が指定した値をSNIに設定し、Allow Insecureはオフのままにします。トランスポート関連の項目も指定されている場合は、一つずつ確認してください。ポートが443だからといって、必要な設定を省略できるわけではありません。

  5. 保存して接続をテストする

    画面の保存操作でHomeに戻り、追加した項目を選択して接続を有効にします。まず接続状態と、アクセスできることが分かっているページを確認し、問題がなければ普段使うConfigの振り分けを確認します。

Address、Port、Password、SNIの入力ルール

Addressは接続先を指定し、SNIはTLSハンドシェイクでサーバー名を通知します。両者が同じ場合もありますが、必ず一致するとは限りません。特にAddressがIPアドレスの場合、SNIにも同じIPを入力すればよいとは限りません。サービス提供元から指定された証明書名や関連情報を使ってください。

項目 入力する値 よくある誤り
Address サーバーのホスト名またはIPアドレス(例:edge.example.com) https://やパス、クエリパラメーターを含める、または共有リンク全体を貼り付ける
Port サーバーが実際に待ち受けているポート(例:443、またはサービス提供元が指定した値) TLSを使うという理由だけで443に変更する、または全角数字を入力する
Password Trojan認証用パスワード。受け取った値をそのまま入力 改行が混入する、記号を誤って削除する、または別のプロトコルの認証情報をパスワードとして入力する
SNI サービス提供元が指定したTLSサーバー名(例:tls.example.com) URLやポート、パスを入力する、または証明書と関係のないドメイン名に変更する

SNIは接続先サイト名を自由に置き換える項目ではなく、HTTP Hostとも異なります。WebSocketなどのトランスポートを使う場合、Host、Path、SNIはそれぞれ別の階層の設定です。いずれもドメイン名やパスに見えても、設定情報に従って個別に入力してください。基本的なTrojan設定でWebSocketが必須とは限りません。独自にトランスポートを追加しないでください。

確認の順番:まず項目を見直し、接続方式の変更はその後に

AddressがIPアドレスでSNIがドメイン名でも、正常な設定の場合があります。証明書エラーが出たら、まずSNI、端末の日時、サーバー証明書を確認してください。推測したドメイン名にAddressを変更するのは避けましょう。

Allow Insecure:証明書検証は有効のままにする

Allow InsecureはTLS証明書の検証に関わる設定であり、パスワードやポート、ネットワーク接続の問題を直すものではありません。オフの場合、クライアントはサーバー証明書を検証します。オンにすると関連する検証が省略され、接続先サーバーの正当性を確認しにくくなります。通信を高速化する設定でも、接続失敗全般に有効な解決策でもありません。

Allow Insecure:オフ

推奨

TLS証明書の検証を維持します。証明書エラーが出た場合は、有効期間、信頼チェーン、名前の一致、端末の日時を確認し、サービス提供元にサーバー設定を確認してもらいましょう。

適した用途:日常利用、有効な証明書が設定されたTrojan接続

Allow Insecure:オン

証明書検証に関するチェックが省略され、想定したサーバーに接続していることを確認できません。その後接続に成功しても、検証段階に確認すべき点があることを示すだけで、問題が適切に解決したとは限りません。

適した用途:リスクを理解したうえで、管理された環境において証明書検証の問題を短時間切り分ける場合

オンにすると接続でき、オフでは失敗する場合は、オフに戻し、表示された具体的な証明書エラーをサービス提供元に伝えてください。問い合わせ時にPasswordやサブスクリプションリンク全体を送る必要はありません。エラーの文面、発生時刻、個人情報を伏せた項目情報を伝えれば十分です。

保存できても接続できない場合:段階的に確認する

保存できたのは入力フォームが受け付けられたという意味で、接続先が利用可能という意味ではありません。原因を調べる際は一度に一項目だけ変更し、結果を記録してください。Port、Password、SNI、Global Routingを同時に変更すると、接続が回復しても原因を特定できません。

Configは現在の設定とポリシーに基づいて通信を処理するため、ルールが実際にどのポリシーを参照しているかも確認してください。Homeで選択中の項目を見るだけでは不十分です。Sceneは選択したシーンの設定に関わるもので、Proxyの別名ではありません。トラブル時はまず現在のモードを確認し、ポリシー選択の問題をTrojanの入力ミスと取り違えないようにしましょう。

Trojanを手動設定するときによくある質問

サービス提供元からリンクだけを受け取った場合、項目ごとに分けて入力しますか?

まず、サブスクリプションリンクと個別サーバーの共有リンクを区別してください。サブスクリプションリンクはサービス提供元から取得し、Home → 「+」 → Type → Subscribeから追加します。サブスクリプションURLをTrojanのAddressに入力したり、リンク内のtokenをPasswordとして使ったりしないでください。

SNIの指定がない場合、適当なドメイン名を入力してもよいですか?

いいえ。まず、元の接続情報にサーバー名の説明が含まれていないか確認してください。明記されていない場合は、Addressに対応する名前を使うのか、証明書検証にどの名前が必要なのかをサービス提供元に確認しましょう。有名なWebサイトのドメインを試しに入力したり、確認の代わりにAllow Insecureをオンにしたりしないでください。

サブスクリプションの項目を変更しても、更新後に元に戻るのはなぜですか?

サブスクリプションを更新すると、サービス提供元から配信される設定で上書きされることがあります。まず、サブスクリプション元の値に誤りがないか確認してください。比較のために切り分ける場合は、元の項目を残したまま別の項目を手動で作成します。端末上の一時的な変更を、サーバー側で修正済みだと誤認しないようにしましょう。

Shadowrocketを購入したのに、なぜパスワードの入力が必要ですか?

アプリの買い切り購入と、サーバーの利用プランは別です。Passwordは利用中のサービス提供元から発行されたTrojan認証情報であり、App Storeの購入情報ではありません。ShadowrocketはApp Storeで販売されるクローズドソースの商用アプリです。サーバーの利用権とアプリの購入は、それぞれ別に管理されます。

最後に、TypeがTrojanであること、Addressにプロトコルの接頭辞やパスが含まれていないこと、Portがサーバーの指定と一致すること、Passwordがそのままであること、SNIがサービス提供元の指定に合っていること、Allow Insecureがオフであることを確認してください。その後Configに戻ってルールとポリシーを確認すれば、関係のない設定を何度も変更せずに済みます。