公式マニュアル・プロトコル技術リファレンス
Shadowrocket
プロトコルの設定と選び方
まずサーバーが実際に対応しているプロトコルを確認し、次に通信方式、認証情報、証明書を確認します。プロトコル名だけで速度や消費電力は判断できません。
- Shadowsocks
- VMess / VLESS
- Trojan
- HTTP / SOCKS5
- WireGuard
- Hysteria2
このページは、すでにサブスクリプションまたはサーバー情報をお持ちの方向けのリファレンスマニュアルです。初めて設定を追加し、VPN構成を許可して接続する場合は、まず使い方ガイドに沿って基本操作を完了してください。設定項目や通信方式の違いを確認したり、プロトコルの問題を特定したりする際は、該当する章をご覧ください。当サイトではノード、サブスクリプション、接続サービスの提供・販売・推奨は行っていません。
ShadowrocketはAppleプラットフォーム向けのクローズドソースの有料アプリです。主な利用端末はiPhoneとiPadで、入手先はApp Storeのみです。システム要件はApp Storeの掲載内容をご確認ください。アプリの買い切り購入と接続サービスの利用料金は別です。アプリを購入しても、サーバーアドレスや認証情報は発行されません。正規の配信元、デベロッパ、アプリIDの確認方法はApp Storeでの入手方法をご覧ください。
- 選定の前提サーバーが対応済み
- 設定項目の出典手元の設定情報
- テスト方法一度に変更するのは1項目
01 / 階層ごとの確認
プロトコル・通信方式・ルールの役割
まず4つの異なる要素を区別する
Add Serverでプロトコルを選ぶのは、クライアントとサーバーが認証情報や通信データをどのようにやり取りするかを指定するためです。アドレスとポートは接続先を指定します。TCP、WebSocketなどの通信方式は、データをどのように運ぶかを決めます。TLSは、その接続でサーバーの身元を確認し、データを保護する方法を定めます。各項目は関連していますが、役割は異なります。Typeの名前を変更しても、サーバーが別のプロトコルに対応するわけではありません。
ルールによる振り分けは、別の判断の流れにあります。Global RoutingでConfigを使う場合、クライアントは現在の設定に従って、リクエストをどのポリシーに振り分けるか判断します。リクエストがプロキシに渡された後、選択したサーバーのプロトコルが通信に使われます。ルールが正しくてもサーバー認証が正しいとは限らず、サーバーに接続できても、すべてのドメインが想定したポリシーに一致するとは限りません。切り分けでは「どの経路を選んだか」と「その経路で接続できるか」を分けて記録し、関係のない項目を何度も変更しないようにします。
接続先アドレス、サーバー名、アクセス先ドメインを混同しない
サーバーアドレスは、クライアントが最初に接続する宛先で、ドメイン名またはIPアドレスを指定します。TLSのServer Nameは通常、サーバーの身元確認やハンドシェイク時の名前通知に使われます。WebSocketのHostとPathは、それぞれ通信方式のリクエスト情報です。設定によっては同じ値を使いますが、異なる場合もあります。いずれもドメイン名を入力できるからといって、すべて同じ値に置き換えないでください。元の設定情報を項目ごとに照合し、サーバー側で指定された大文字・小文字やパスの形式を維持してください。
ユーザーが最終的にアクセスするWebサイトは、さらに別の接続先です。プロキシサーバーがそのサイトに接続するからといって、サイト名をクライアントのServer Nameに入力するわけではありません。同様に、サーバーへの接続時に行う名前解決と、プロキシ接続後にWebサイトへアクセスするときの名前解決は、異なる経路を通る場合があります。Webページが開かない一方でConnectivity Testに結果が表示される場合は、すべての名前解決やリクエストが成功したと判断する前に、テストがどの区間を確認したのかを調べてください。
接続モードから確認範囲を絞る
Global RoutingのConfig、Proxy、Directを切り替えると、ルールによる振り分け、プロキシ経由、直接接続の違いを確認できます。ここでいう「プロキシ」は、システム上のすべての通信が必ず同じ経路を通るという意味ではありません。ローカルネットワーク、除外設定、アプリの動作も実際の設定に応じて確認してください。接続モードの切り替えは診断手段であり、誤ったパスワード、証明書、ポートを修正するものではありません。確認後は必要な元のモードに戻し、一時的なテスト設定を常用しないようにします。
| 階層 | 決まる内容 | 主な確認項目 |
|---|---|---|
| ルール | リクエストの振り分け先 | Config、ルールの順序、最終ポリシー |
| プロトコル | 認証とデータ交換の形式 | Type、パスワード、UUID、鍵 |
| 通信方式 | プロトコルデータの運び方 | TCP、UDP、Host、Path |
| TLS | 外側の暗号化と身元確認 | Server Name、証明書、端末時刻 |
以下は.confのRuleセクションの例です。振り分け順序を示すもので、サーバー設定ではなく、サブスクリプションの代わりにもなりません。1行目は指定したドメインとそのサブドメイン、2行目は該当するアドレス範囲に一致し、最後の行は一致しなかったリクエストを処理します。例のPROXYには、実際に利用できるプロキシポリシーを設定する必要があります。ルールをコピーする前に、現在の設定で使われているポリシー名と用途を確認してください。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY
ルールは上から順に照合され、一致するとそこで終了します。範囲の広いルールを先に置くと、後続の詳細なルールが適用されなくなることがあります。プロトコルの問題を切り分ける際はルールの順序も同時に変更しないでください。出口と通信方式の両方が結果に影響し、原因を特定できなくなります。キーワードの範囲についてはルールキーワードと照合順序をご覧ください。初回接続は、引き続き使い方ガイドの手順に沿って進めてください。
まず現在の設定を記録し、変更するのは一度に1項目だけにします。名称が同じでも項目を置き換えられるとは限らず、テスト結果が出ても実際の通信経路全体を確認できたとは限りません。
02 / 共通鍵暗号を使うプロキシ
Shadowsocks:暗号化方式とパスワードはセットで確認
セッションの階層をシンプルにする設計
Shadowsocksは、プロキシ転送と共通鍵暗号を組み合わせた設計です。クライアントとサーバーは、指定された暗号化方式と鍵情報に基づいてデータをやり取りします。標準的なTLSセッションを確立してからプロキシ認証を行う方式とは異なり、基本設定では通常、アドレス、ポート、暗号化方式、パスワードを指定します。設定項目が少なくても、値を自由に入力できるわけではありません。各項目がサーバーによるデータの識別に関わるため、どれかが一致しないと接続初期に通信が終了する場合があります。
この設計を理解すると、利用上の範囲も把握しやすくなります。Shadowsocksは主にプロキシリクエストを処理するもので、完全なプライベートネットワークを自動的に構築するわけではありません。また、暗号化を行うからといって、Webサイトの証明書検証が含まれるわけでもありません。WebサイトがHTTPSを使う場合、アプリケーション層の保護はWebサイトとの接続が担い、クライアントからプロキシサーバーまでの区間はShadowsocksの方式に従って処理されます。階層ごとの保護を区別すれば、プロトコルを選んだだけで証明書やアクセス先Webサイトの警告を無視できると誤解せずに済みます。
Methodは単独で切り替える速度設定ではない
既存の設定を読み込んだら、まず暗号化方式を確認します。方式によって認証、鍵導出、データのカプセル化が異なるため、名前が新しそうだからといってクライアント側だけで変更することはできません。AEAD方式は機密性と完全性を同時に扱いますが、世代の異なるプロトコルでは鍵の形式やハンドシェイクの仕様も異なる場合があります。サーバーで指定された方式をクライアントでも使ってください。対応状況は、アプリで選択できる方式と手元のサーバー情報を確認してください。
パスワード欄に、任意の短い文字列を入力できるとは限りません。方式によっては特定形式でエンコードされた鍵を使い、別の方式ではパスワードから鍵を導出します。末尾の等号を削除したり、空白を追加したり、エンコード済みの文字列をデコードして貼り直したりしないでください。手入力では前後の空白、全角記号、改行に注意します。QRコードや共有リンクから読み込んだ場合は、一覧のメモ名だけでなく、解析後の各項目を確認してください。メモは自由に変更できますが、認証情報はメモから推測できません。
TCPで接続できてもUDP経路が使えるとは限らない
Webリクエストとリアルタイムアプリでは、異なる通信方式を使う場合があります。サーバーのTCPポートに到達できても、同じポートでUDP転送が有効とは限らず、現在のネットワークで該当データの送受信が許可されているとも限りません。Webページは開くのに音声通話やリアルタイム機能に問題がある場合は、まずサーバーが必要なUDP転送に対応しているか確認し、次にクライアントの設定とネットワーク経路を調べます。この現象だけでパスワードの誤りと判断しないでください。パスワードが完全に間違っていれば、基本的なプロキシリクエストも通常は完了しません。
既存の設定には、追加の通信方式や難読化の項目が含まれることもあります。これらはすべてのShadowsocksサーバーで必要な項目ではなく、別の設定を参考にして追加してはいけません。サブスクリプションから読み込んだ設定は動作するのに、手動で作り直すと失敗する場合は、暗号化方式、パスワード、アドレス、ポート、追加項目を2つの設定で比較してください。Global Routingを何度も切り替えても解決にはなりません。これらの項目を使う前提は、サーバー側が該当機能を有効にしていることです。クライアントの設定だけでサーバーに対応機能を追加することはできません。
iPhoneで性能の違いを考える
Shadowsocksの実際の処理負荷は、使用する暗号化アルゴリズム、端末のハードウェア、通信データ量によって変わります。外側のハンドシェイクが少ない設計は短時間の接続で有利な場合がありますが、実際のWeb閲覧には名前解決、Webサイトからの応答、複数のリソース取得も含まれます。プロトコルの階層数だけで表示速度を判断できません。長時間のデータ転送では、スループットがサーバーの帯域、無線電波、アクセス先Webサイトによって制限される場合もあります。ボトルネックが暗号化処理にない場合、方式を変更しても通信速度が自動的に上がるわけではありません。
消費電力を比較する際は、接続方法と無線環境も含めて確認します。電波が弱いと、再送や無線モジュールの稼働がアルゴリズムの違いより目立つことがあります。頻繁なテストやサブスクリプションの更新も通信量を増やします。比較する際は同じネットワーク、同じタスク、ほぼ同じ画面状態にそろえ、接続を維持するだけの状態と継続的なダウンロードを区別してください。システムのバッテリー統計に表示されるアプリの割合を、そのままプロトコルの消費電力とみなすことはできません。集計期間やバックグラウンド処理が一致しているとは限らないためです。
Shadowsocksを使い続けるのに適しているのは、サーバーが対応方式を明示しており、設定項目がそろっていて、実際の通信でも問題がない場合です。調整が必要なら、まず設定値の整合性を確認し、次に名前解決と通信方式を確認します。共有リンクのプレフィックス、エンコード、パスワード部分を特定できない場合は、共有リンクとサブスクリプションの形式を参考に、情報の種類を確認してください。共有リンク全体をパスワード欄に入力したり、サブスクリプションURLをサーバーアドレスとして使ったりしないでください。
03 / 認証と外側の通信
VMessとVLESS:似た設定項目、異なる仕様
UUIDが同じでもプロトコルは同じとは限らない
VMessは、本人確認、データのカプセル化、プロトコル独自のセキュリティ処理を組み合わせており、一般的な設定ではUUIDでユーザーを識別します。一方、VLESSはより軽量なプロトコル層を採用し、VMessと同じペイロード暗号化機能をプロトコル自体では提供しません。通常は外側のセキュアな通信方式で接続を保護します。両者の設計上の目的は異なるため、UUIDだけを残してTypeをVMessからVLESSに変更しても、サーバーが引き続き認識するとは限りません。
どちらも別の通信方式と組み合わせて使われることが多く、アプリの設定項目が多い理由の一つになっています。プロトコルの種類は認証と形式を定め、外側の通信方式はデータの運び方を定め、TLSなどの仕組みは該当する接続を保護します。実際のサーバーは、特定の組み合わせだけに対応している場合があります。手元の情報にプロトコルと通信方式が明記されている場合は、両方を維持してください。アドレス、ポート、UUIDしかない場合は、設定を復元する情報が不足している可能性があります。元の設定から残りの条件を確認してください。
まず認証情報、次に通信方式を確認
UUIDは文字とハイフンの構成を含めて、そのまま保持してください。メモ、サブスクリプションのグループ名、サーバーのドメイン名をUUID欄に入力してはいけません。VMessの設定には、セキュリティ方式や互換性のための旧式の項目が含まれることがありますが、古い情報にある追加の認証項目を新しい設定にそのまま入力する必要はありません。古い説明画像と同じにするためだけに数値を追加しないでください。現在のサーバー情報とアプリで実際に選べる項目を基準にし、対応できない場合は同じプロトコルの設定情報かを確認してください。
WebSocketを使う接続では、Pathはサーバーが接続を受け付けるパスで、通常は先頭にスラッシュが付きます。Hostはリクエストのホスト情報です。パスの大文字・小文字を区別するか、クエリ部分を含むかは、サーバーの設定によります。パスを空にしたり最後の部分だけを残したりすると、プロキシ通信ではなく通常のWebページが返されることがあります。アドレスを認識でき、ポートにも到達できるのに接続がすぐ終了する場合は、まずこの項目がサーバーの設定と一致しているか確認してください。
TLSの有効化、Server Name、証明書の検証は、それぞれ個別に確認してください。ドメイン名で接続する場合、サーバーアドレスと証明書名は一致することがあります。指定したアドレスで接続する場合でも、Server Nameには証明書の対象ドメインを入力する必要があるかもしれません。TCPで接続できたからといって身元確認を省略したり、名前の誤りを隠すために検証を無効にしたりしないでください。元の設定に追加のセキュリティ機能やFlowなどの条件がある場合は、双方がその組み合わせに対応していることを確認します。プロトコル名だけから対応状況を推測しないでください。
外側の通信方式によって接続の負荷が変わる
WebSocketはプロキシデータを追加の層でカプセル化し、対応するサーバー構成と組み合わせられますが、ハンドシェイクやフレーム処理が加わります。TCPを直接使う場合は階層が少なくなることがありますが、サーバーの接続先とネットワーク経路に別の条件が求められます。すべての端末に当てはまる優劣はありません。理論上は階層が少なくても頻繁に失敗する組み合わせより、設定が完全で安定して動作する組み合わせのほうが、日常利用に適していることがあります。
パケットロスが発生する環境では、信頼性のある通信層を重ねることで待ち時間やバッファリングが増えることがありますが、実際の影響は接続の再利用やサーバーの実装にも左右されます。WebSocketだから遅い、VLESSだから消費電力が少ないとは限りません。iPhoneで長い接続を1つ維持する場合と、多数の短い接続を何度も作り直す場合では、ハンドシェイクの負荷が異なります。ネットワーク切り替え後の復旧状況も、無線モジュールの稼働時間に影響します。名称で優劣を決めず、同じタスクを繰り返して評価してください。
問題が発生した段階を特定する
すべての通信が失敗する場合は、まず選択中のSERVERが編集中の設定と同じか確認し、次にプロトコル、ポート、UUIDを確認します。一部のサイトだけが使えない場合は、ルールの一致、名前解決、アクセス先の状態を個別に確認してください。ネットワークを切り替えた後だけ問題が起きる場合は、接続をいったん停止して再接続し、以前のセッションの復旧が原因かを確認します。すぐに認証情報を書き換えないでください。同じ設定で以前は接続できていたという事実も、切り分けに役立つ情報です。
VLESSのプロトコル層が軽量でも、接続全体にかかる負荷がなくなるわけではありません。TLS、通信方式、再接続、実際のリクエストも速度や消費電力に影響します。
手動設定を、項目を試しに入力し続ける作業にしないでください。確実な方法は、設定がそろった元の記録を読み込み、動作する状態を基準として残したうえで、各項目がアプリの画面にどう反映されているか確認することです。サブスクリプションの更新で項目が変わった場合は、更新前後の記録を比較し、古い設定の一部を新しい設定に混ぜないでください。設定ファイルの振り分けとサーバーの設定情報も分けて管理します。構成については.confの各セクションの役割をご覧ください。
04 / TLSによる身元確認
Trojan:TLS接続内でパスワード認証
先に安全な接続を確立し、その後プロキシ情報をやり取り
TrojanはTLSで保護された接続を確立し、その中で認証とプロキシリクエストをやり取りする設計です。標準的なセキュア通信の機能とプロキシプロトコルを組み合わせているため、パスワードが正しいだけでは十分ではありません。証明書、名前、外側の接続も一致する必要があります。この順序を理解することが重要です。TLSのハンドシェイクに失敗している場合、プロキシのパスワードを変更しても解決しません。ハンドシェイク後に認証を拒否された場合、証明書名を何度変更しても、間違ったパスワードは修正されません。
この設計は、共通鍵でプロキシのペイロードを直接保護する方式とは異なります。TLSではサーバーが検証可能な身元情報を提示し、接続に必要なパラメーターをネゴシエートします。保護されるのはクライアントからサーバーまでの区間であり、アクセス先Webサイト自体のHTTPS検証を置き換えるものでも、サーバーからWebサイトまでのすべての動作を保証するものでもありません。エラーを読むときは、プロキシサーバーの証明書の問題か、ブラウザーに表示されたアクセス先Webサイトの証明書の問題かを区別してください。両者は別の接続です。
Server Nameは証明書に対応した値を指定
サーバーアドレスは接続先の入口を指定し、Server Nameは通常、TLSでの名前通知と証明書検証に使われます。既存の設定でアドレスを使って接続しつつ、TLSにはドメイン名を指定していても、必ずしも誤りではありません。サーバーがそのドメイン名の証明書を使っている可能性があります。反対に、アクセス先Webサイトの名前に変更しても意味はありません。どの名前が証明書の対象か、元の設定で何を指定しているかを確認してください。見慣れたドメイン名かどうかで判断しないでください。
証明書の検証結果は、有効期限、信頼チェーン、名前、端末の時刻に左右されます。端末の日付が大きくずれていると、本来有効な証明書も異常と判定される場合があります。サーバーの証明書が更新された場合や中間証明書チェーンが欠けている場合も、クライアントが接続を拒否することがあります。証明書エラーが出たら、自動日時設定、サーバー情報、証明書の状態を確認してください。安全でない接続を許可する設定を通常の修復方法にしないでください。元の設定を復元するのではなく、身元確認の前提を変えてしまうためです。
パスワードと追加項目も一つずつ確認
Trojanのパスワードはサーバーの認証情報であり、端末のロック解除用パスワードでもApp Storeの購入情報でもありません。貼り付ける際は全体を保持し、末尾に改行が入らないようにします。パスワードに特殊文字が含まれる場合、共有リンクのエンコードやデコードによって表示が変わることがあります。読み込み後は実際の設定項目を確認し、エスケープ済みの文字列を手動で再度エスケープしないでください。メモにTrojanと書かれているだけでは、リンクの内容とクライアントのTypeが一致しているか確認できません。
既存のサーバー構成には追加の通信方式が含まれる場合があり、サーバー側も同じ設定になっている必要があります。説明がないのにWebSocketを追加したり、Pathを変更したり、用途の分からないネゴシエーション値を入力したりしないでください。外側の接続先で特定のHost、Path、ハンドシェイク条件が必要な場合、いずれかが欠けると、別のサービスがリクエストを受け取ることがあります。同じドメイン名の通常のWebページが開いても、そのことからプロキシの認証経路やポートが正しく設定されているとは判断できません。
ハンドシェイク、接続の再利用、バックグラウンド動作の違い
TLSハンドシェイクでは暗号処理とネットワーク上の往復が発生するため、新しい接続を作る際に負荷がかかります。確立済みの接続で後続データを運べるか、どのように再利用するかはプロトコルと実装によって異なります。Webページを時々開く使い方では、継続的なスループットより接続確立までの時間が目立つことがあります。長時間の動画再生やデータ転送では、ハンドシェイクはタスク全体の一部にすぎません。Connectivity Testの一度の数値だけで、動画全体の視聴感や一日のバッテリー消費を判断しないでください。
iOSのバックグラウンド通信は、アプリのタスク、システムのスケジューリング、現在のネットワークにも左右されます。頻繁に切断して再接続するとハンドシェイクが増える一方、多数のリクエストを長時間維持すると無線モジュールが稼働する時間が長くなる場合があります。適切な設定とは、常時接続または常時切断のどちらかに決めることではなく、実際の使い方に合わせて接続を管理することです。On Demandは接続を開始する条件を制御しますが、Trojanのパスワードや証明書を変更するものではなく、ハンドシェイクの負荷を自動的になくす設定でもありません。
サーバーが有効な証明書、明確なパスワード、必要な設定情報を提供している場合、Trojanは標準的なTLSによる身元確認を前提とした選択肢になります。選ぶ際は、証明書の状態を確認できるか、エラーを段階ごとに切り分けられるかを重視してください。TLSという名称だけで品質を判断してはいけません。証明書の問題とドメイン名解決の問題は、表面上似た症状になることがあります。DNS名前解決のトラブル対処も参照し、どの段階で失敗しているか確認してください。
05 / 汎用プロキシインターフェース
HTTPとSOCKS5:転送機能は通信経路の暗号化を意味しない
アプリのプロキシ需要から生まれた2つの方式
HTTPプロキシは、HTTPリクエストの中継を目的に発展しました。CONNECTメソッドを使って指定した宛先へのトンネルを確立することもできます。SOCKS5はより汎用的なプロキシネゴシエーション方式で、クライアントからサーバーに宛先アドレスとポートを伝えます。利用できるコマンドや認証方式は、双方の対応状況によって決まります。どちらもプロキシの入口になりますが、リクエストの意味やハンドシェイク形式が異なります。アドレスとポートが同じでも、HTTPの入口をSOCKS5として追加すれば互換性があるとは限りません。
これらのプロトコルは、ユーザーが管理するネットワークや、汎用プロキシインターフェースを明示的に提供するサーバーでよく使われます。主な機能はプロキシ転送であり、最新の暗号化トンネルと同等の通信経路保護が標準で備わっているわけではありません。TLSの有無、認証方法、アクセス可能な宛先はそれぞれ確認が必要です。CONNECTを許可するHTTPプロキシでも、ポートやアクセス範囲に制限がある場合があります。そのため、Webページが表示できても、すべてのアプリや宛先が利用できるとは限りません。
HTTPSサイトとセキュアなプロキシは別のもの
HTTPプロキシを経由してHTTPSサイトにアクセスする場合、CONNECTで確立したトンネル内でWebサイト独自のTLS通信を行えます。これによりサイトのコンテンツをエンドツーエンドで保護できることがありますが、クライアントとプロキシ間のプロキシハンドシェイクやその他のメタデータまで、HTTPSだけですべて暗号化されるわけではありません。「Webサイトとの接続にTLSを使うこと」と「プロキシの入口への接続にTLSを使うこと」は分けて確認してください。既存の設定で指定されている種類をクライアントでも選びます。
SOCKS5も暗号化通信と同じものではありません。ユーザー名とパスワードによる認証は利用者を識別するもので、認証情報や後続のデータが自動的に暗号化されることを意味しません。パスワードを設定したから通信経路全体が暗号化されたと考えないでください。また、ネットワーク環境を把握しないまま、重要な認証情報を普通のメモとして共有しないようにします。現在の用途に適しているかは、基盤となるネットワーク、外側の保護、サーバー側のアクセス制御を合わせて判断してください。
認証、名前解決、UDPはそれぞれ別の要素
HTTPプロキシではユーザー名とパスワードが必要な場合もあれば、別のアクセス制限が設けられている場合もあります。SOCKS5にも独自の認証ネゴシエーションがあります。認証に失敗した場合は、まずサーバーが要求する方式を現在の設定で使えるか確認し、その後に入力内容を調べてください。TCP接続が確立しても認証に成功したとは限りません。ポートに到達できるのは接続初期の段階にすぎないためです。サーバーによる認証拒否と接続タイムアウトは異なります。前者は認証情報を、後者はアドレス、ポート、ネットワーク経路も確認してください。
宛先ドメインをどこで名前解決するかは、接続可能性とトラブル対処の方向に影響します。SOCKS5はリクエストでドメイン名またはアドレスを指定できますが、どちらが使われるかはクライアントの名前解決方法やリクエスト元によって異なります。プロトコル名だけから、すべての名前解決がサーバー側で行われると判断しないでください。特定のドメインだけ失敗し、アドレスでのアクセスは成功する場合は、名前解決の経路と結果を確認します。テストのためにドメインをアドレスに置き換える際は、HTTPSの証明書名や仮想ホストの動作が変わることにも注意してください。
SOCKS5の仕様にはUDP関連の仕組みがありますが、実際のプロキシ入口で有効になっている、または転送が許可されているとは限りません。通常のHTTP CONNECTも、汎用UDP経路として扱うべきではありません。リアルタイムアプリを使う場合は、元のサーバー情報に必要な機能が記載されているか確認してください。Webページが正常なのにリアルタイム機能に問題がある場合、HTTPとSOCKS5を交互に切り替えることを定番の対処にしないでください。必要なサーバー側の対応が異なるため、誤った切り替えで新たなハンドシェイクの問題が生じることがあります。
利用を続けるかどうかの判断
汎用インターフェースの利点は、仕様が明確で、管理された環境では対応するサービスがすでに用意されていることが多く、既存のネットワーク設計に沿って使える点です。一方で、セキュリティ保護、認証、転送範囲を別の仕組みで補う必要がある場合があります。選定する前に、用途が少数のWebリクエスト、特定アプリの転送、より広範な通信のどれに当たるかを確認し、サーバーで実際に許可されている範囲を調べてください。プロトコル名が短いから速い、または省電力とは限りません。
iPhoneやiPadでの実際の負荷は、接続数、サーバーの応答、無線ネットワークにも左右されます。プロキシ層が少ないと処理がシンプルになる場合がありますが、宛先の制限によって再試行が頻発すると、全体の通信量が増えることもあります。同じ宛先へのタスクを使って、名前解決、認証、コンテンツ読み込みの結果をそれぞれ記録してください。設定一覧のテスト結果だけでは実際の用途で使えるか判断できません。よくある症状と確認手順はよくある質問をご覧ください。
06 / ネットワーク層トンネル
WireGuard:鍵、アドレス、ルーティングをまとめて理解
パスワードだけを置き換えるプロキシではない
WireGuardはネットワーク層の暗号化トンネル向けに設計されており、公開鍵による身元確認と固定された暗号設計を使ってピア間の接続を確立します。1回のプロキシ宛先だけを指定するプロトコルとは異なり、トンネル内のアドレス、接続相手、通信を許可するアドレス範囲も設定します。そのため、設定にアドレス範囲や鍵が含まれるのは無駄な項目ではなく、ネットワークの関係を記述するために必要です。通常、サーバーアドレスとパスワードだけではWireGuardの設定を復元できません。
この設計は、トンネルの構成が明確なネットワークに適していますが、双方でアドレスとルーティングの認識を一致させる必要があります。ShadowrocketでWireGuardを出口として使う場合も、クライアント側のルール選択とWireGuard設定内のアドレス制約を区別してください。前者はリクエストをその出口に渡すかどうかを決め、後者は該当する通信をトンネルで受け取り転送する方法に影響します。両方の制約がある場合、片方だけを確認すると矛盾した結論になることがあります。
Private KeyとPublic Keyは相互に置き換えられない
Private Keyはこの端末の身元情報にあたるため、適切に保管してください。Public Keyは相手側がその身元を識別するために使います。クライアントはサーバーの公開鍵を知る必要があり、サーバーにはクライアントに対応する公開鍵を設定する必要があります。サーバーの公開鍵を端末のPrivate Key欄に入力してはいけません。文字の見た目が似ていても、鍵を相互に置き換えられるわけではありません。設定にPreshared Keyがある場合は追加の共有情報です。双方で一致させる必要があり、根拠なく追加したり、片側だけ変更したりしないでください。
トンネル内アドレスはサーバーの公開アドレスではありません。前者はトンネル内のネットワーク構成に使い、後者はUDPデータを実際に受信するEndpointを指定します。アドレスを入力する際は、元の設定にあるプレフィックス長を維持してください。トンネル内アドレスをEndpointに誤って入力すると、クライアントが現在のネットワークから接続先に到達できない場合があります。ポートもEndpointの構成要素であり、一般的な例から推測してはいけません。元の設定でドメイン名を使っている場合は、接続前にそのドメインを名前解決できる必要があります。
Allowed IPsと接続維持設定の範囲
Allowed IPsは、ピアに関連する許可アドレス範囲を指定し、ルーティングや送信元の制約にも関わります。実際の表示や動作は実装によって異なります。範囲が狭すぎるとトンネル経由でアクセスする必要がある宛先を除外することがあり、広すぎると既存のネットワーク設計と競合する場合があります。「すべて使えるようにする」ために、元の値を無造作に置き換えないでください。プライベートアドレスにアクセスする場合は、ローカルネットワークに重複するアドレス範囲がないかも確認します。アドレスの重複で通信経路が誤ることはありますが、鍵の認証失敗とは別の問題です。
Persistent Keepaliveは必要に応じてNATのマッピングを維持する機能で、特に端末が一部の変換装置の背後にあり、相手からのデータを受信する必要がある場合に使われます。間隔を短くするほど確実になる汎用設定ではありません。間隔が短すぎると、アイドル状態でもデータ通信が増え、モバイルネットワークでは無線の休止に影響することがあります。元の設定で指定されていない場合は、まずマッピングの期限切れによる復旧問題が実際にあるか確認し、ネットワークの状態に応じて設定してください。決まった間隔を無条件に追加しないでください。
MTUと「一部のWebページが止まる」問題
トンネルではデータのカプセル化によるオーバーヘッドが加わるため、実際の経路で扱えるパケットサイズを考慮する必要があります。MTUが適切でないと、小さなリクエストは通る一方で、大きな応答や特定のサイトで読み込みが止まることがあります。その場合、すぐに鍵を変更せず、まず経路とカプセル化の条件を確認してください。MTUの調整は元の値を基準に再現性のあるテストを行い、小幅な変更ごとに記録します。根拠なく数値をコピーすると、問題を見えにくくしたり、別のネットワークで断片化や効率低下を招いたりすることがあります。
WireGuardはUDPを使うため、ネットワークが該当する通信の往復を許可していることが前提です。Wi-Fiとモバイルネットワークを切り替えると、Endpointやマッピングの状態が変わり、復旧の状況もネットワークの方針に左右されます。UDPで接続できない場合、Persistent Keepaliveを追加しても、遮断された経路が使えるようにはなりません。まずEndpoint、ポート、ネットワークの状態を確認し、その後ハンドシェイクと実際の通信を確認します。クライアントが接続中と表示されても、トンネル内のルーティングが成功したとは限りません。
速度と消費電力の面で、簡潔なプロトコル設計が処理上有利なことはありますが、端末全体の負荷にはユーザー空間での処理、無線通信、接続維持、実際の通信量も含まれます。あらゆる状況でアプリケーション層のプロキシより優れているわけではありません。すでにネットワークで鍵とアドレスが正しく設定されている場合は、その構成に沿って使えます。一般的なプロキシの共有リンクを読み込むためだけにWireGuardへ変更する必要はありません。選定は項目数や知名度ではなく、サーバーの対応状況とネットワークの目的を優先してください。
07 / QUICと輻輳制御
Hysteria2:スループットを検討する前にUDPを確認
変動するネットワーク経路を考慮した通信設計
Hysteria2はQUICを基盤とするプロキシ通信方式です。QUICは通常UDP上で動作し、安全なハンドシェイクや信頼性のあるデータ転送などの機能を組み合わせます。設計の目的は、単にパスワード項目を減らすことではなく、遅延やパケットロスが変動する環境でデータ送信を制御することです。UDPは下位の通信方式であり、アプリに渡されるデータがすべて信頼性のないものになるわけではありません。QUICはUDP上で信頼性のあるストリームを提供できるため、下位のパケットと上位の通信上の意味を分けて理解してください。
この特性から、状態が変化しやすい経路で試す価値がある一方、すべてのネットワークで標準の選択肢になるわけではありません。ネットワークが該当するUDP経路を許可し、サーバーがHysteria2の接続先を提供している必要があります。ネットワークの制限でその経路が使えない場合、帯域幅の数値を変えても接続できるようにはなりません。アクセス先Webサイトの速度制限が原因であれば、輻輳制御方式を変更しても制限は解消されません。
認証、証明書、追加項目も必須条件
基本設定にはサーバーアドレス、ポート、認証情報、TLS関連の情報が含まれます。認証文字列は元の設定と一致させてください。サーバーが特定形式の組み合わせを使う場合は、ユーザー名とパスワードに分割しないでください。Server Nameはサーバーの証明書と構成に合った値を指定します。その用途は前述のTLSの章と同じです。端末時刻、証明書の信頼チェーン、名前が一致しないとハンドシェイクに失敗する場合があり、送信速度を上げても解決しません。
一部の設定には追加の難読化情報が含まれますが、サーバー側で該当機能を有効にしている場合に限り必要です。追加パスワードが間違っていると、サーバーが初期データを正しく識別できないことがあります。別の設定にこの項目があるからといって、すべてのHysteria2設定に追加しないでください。読み込み後は設定項目全体を確認し、似た名前だけで互換性を判断せず、共有された設定情報がHysteria2用か確認します。プロトコルの世代が異なると、認証やカプセル化の仕様も異なる場合があります。
帯域幅の設定値は速度測定の結果ではない
設定によっては上りと下りの帯域幅を指定できます。これらの値は送信動作や輻輳制御方式に影響することがありますが、サーバーが保証する速度ではありません。数値を大きくしても、無線の容量やサーバーの回線容量は増えません。かえってキューの滞留、パケットロス、再送が起きる場合があります。項目が必要か、サーバーとどう調整するかは、既存のサーバー構成とアプリで選択できる設定を確認してください。例の数値をすべてのネットワークに最適な値として使わないでください。
帯域幅の設定を評価する場合は、上りと下りを分け、ほかの通信への影響も確認します。大きなファイルの転送が速く見えても、同時にWebページの表示が遅くなる場合は、総合的な使い勝手が改善したのではなくキューが滞留している可能性があります。モバイル回線の容量は場所や混雑状況によって変化するため、固定の設定であらゆる条件に対応するのは困難です。元の設定を保存し、控えめで検証可能な変更を一度に1方向だけ行い、同じタスクを繰り返してください。
パケットロス、ネットワーク切り替え、消費電力
QUICのストリーム機能は、ストリーム間で待ち時間が生じる一部の状況を減らせますが、無線経路のパケットロスに伴う負荷をなくしたり、信頼性のあるストリームが欠落データをすべて回避したりするものではありません。輻輳制御はフィードバックをもとに送信を調整し、結果はサーバーの実装やネットワークの状態にも左右されます。そのため、「UDPを使うから常に速い」とは限りません。あるネットワークでUDPの品質が悪い場合、実際の用途では従来のTCP経路のほうが安定することもあります。決めつけずにテストしてください。
iPhoneで高いスループットを維持する場合、無線通信と端末の温度が重要な要因になることがあります。積極的な送信で再送が増えると通信量が増え、頻繁な再接続ではハンドシェイクの回数も増えます。消費電力を比較する際は、電波状況、端末温度、タスクをそろえてください。一方のプロトコルで長時間速度を測り、別のプロトコルではアイドル状態という比較は避けます。端末の発熱中やネットワーク切り替え直後の短時間の結果は、そのときの条件を示すものであり、プロトコルの消費電力を固定的に順位付けする根拠にはなりません。
特定のネットワークでHysteria2だけが失敗し、同じサーバーが提供する別の確認済み接続先は使える場合は、まずUDP経路、ポート、証明書を確認し、その後に認証情報と追加項目を確認してください。DNS、ルール、帯域幅を同時に変更すると、原因を特定できなくなります。接続できてもWebページの読み込みに問題がある場合は、アクセス先の名前解決、ルールの一致、実際のリクエストを続けて確認します。この章では選定と診断の方法を説明しており、特定の接続速度を保証するものでも、サーバー側の設定情報に代わるものでもありません。
まず設定値が正しい状態を基準として保存し、継続的な通信を確認します。申告された帯域幅が大きくても、実際に利用できる帯域幅が大きいとは限りません。
08 / 選定と再確認
既存の条件に合うものを選び、実際の通信で確認
まずサーバーが対応していない組み合わせを除外
プロトコルを選ぶ際は、名前を比較する前に、既存のサーバーが実際に提供している接続先を整理します。Shadowsocksの設定情報しかない場合は、まず指定された方式を確認します。WireGuardの設定がそろっている場合に初めて、トンネル内アドレスや鍵を検討できます。サブスクリプションに複数の種類が含まれていても、すべての設定でサーバー、経路、通信条件が同じとは限りません。比較結果にはサーバー構成全体の違いが反映されることがあり、すべてをプロトコルだけの違いとみなすことはできません。
次に、実際の用途を明確にします。主にWebサイトを閲覧する場合は、初回表示、名前解決、短い接続の動作を重視します。継続的なデータ転送では、安定したスループットと端末温度を確認します。リアルタイムアプリではUDPや該当する転送機能への対応も必要です。既存のプライベートネットワークに接続する場合は、1回の遅延時間よりアドレス設計とルーティングが重要になることがあります。あらゆる用途を網羅する順位を追うのではなく、検証できるタスクに沿って選んでください。
| 既存の条件 | 優先して確認する項目 | そこから推測できないこと |
|---|---|---|
| Shadowsocksの接続先 | 方式、パスワード、UDP対応 | アルゴリズム名だけですべての速度が決まる |
| VMess / VLESSの接続先 | UUID、通信方式、TLS、パス | 同じUUIDを異なるプロトコルで使える |
| Trojanの接続先 | パスワード、証明書、Server Name | ポートに到達できれば認証も成功している |
| HTTP / SOCKS5の接続先 | 認証、保護方式、転送範囲 | パスワードを設定すれば通信経路全体が暗号化される |
| WireGuardの設定 | 鍵、Endpoint、アドレス、ルーティング | ハンドシェイクに成功すればすべてのアドレスに到達できる |
| Hysteria2の接続先 | UDP、TLS、認証、送信設定 | 指定した帯域幅が実際のスループットになる |
再現可能なテスト手順を作る
現在正常に動作している設定を保存し、テスト中にどのSERVERを選択しているか確認します。ネットワーク、Global Routingのモード、アクセス先を固定し、関係のない大容量通信は停止してください。まず基本的な接続を確認し、次に実際のWebサイトやアプリを開き、最後に継続的なデータ転送を行います。各回について、成功したか、初回の応答に問題があったか、しばらくして切断されたかを記録します。単独の最小遅延値を追う必要はありません。偶然の最良結果より、繰り返し観察できる現象のほうが参考になります。
消費電力をテストする際は、アイドル状態で接続を維持する場合と、継続的に利用する場合を分けてください。画面の明るさ、電波の状態、タスクの時間をできるだけそろえ、端末の温度も確認します。システムのバッテリー統計は確認の手がかりであり、実験室の電力計ではありません。集計時間にはほかのバックグラウンド処理が含まれ、割合は全体の消費電力にも左右されます。条件をそろえられない場合は「現在のタスクで観察された動作」として記録し、特定のプロトコルの固定的な性質として扱わないでください。
失敗した段階に応じて切り分ける
まったく接続できない場合は、まずサーバーアドレスの名前解決とポートへの経路を確認し、次にプロトコル、認証情報、外側の通信方式を調べます。証明書エラーが明確に表示される場合は、名前、端末時刻、信頼チェーンを確認します。認証が拒否される場合は、パスワード、UUID、鍵の対応を確認してください。接続後、一部の宛先だけ失敗する場合は、ルールの一致、DNSの結果、アクセス先の状態を調べます。しばらくして接続が切れる場合は、ネットワーク切り替え、マッピングの期限切れ、継続的な大容量通信との関連を記録します。毎回パスワードから入力し直さないようにしてください。
Connectivity Testの結果は、実行されたテストの範囲を示すもので、すべての用途を確認するものではありません。テスト結果が出てもWebページが開かない場合は、複数のドメインを比較し、名前解決と最終ポリシーを確認してください。Configでのみ失敗する場合は、一時的にProxyモードと比較し、ルールによる振り分けが関係するかを判断できます。比較後は元の設定に戻し、有効性を確認できた変更だけを残してください。手順を追って設定する場合はクイックスタートガイドに戻り、複数の画面で一度に設定を変えないでください。
記録を残し、設定のずれを防ぐ
サブスクリプションの更新で接続先、設定項目、メモが変更される場合があります。更新後に問題が起きた場合は、まず設定が置き換わったか、現在どの設定を選択しているかを確認してください。サブスクリプションから作成された設定を手動で編集していると、次回の更新で変更が上書きされることもあります。機密情報を含めずに、項目の種類と発生した現象を記録できます。ただし、パスワード、秘密鍵、認証情報を含むサブスクリプションURLを公開のトラブル相談に載せないでください。画面のスクリーンショットを共有する前にも、これらの情報が写っていないか確認します。
最終的には、用途が明確で、設定の根拠をたどることができ、実際の通信で確認済みの構成を残してください。説明できない試行設定を大量に蓄積しないようにします。プロトコルは通信形式、通信方式はデータの運び方、TLSは該当する階層の保護、ルールは出口の選択を担い、どの要素もほかの役割を代替しません。購入や復元については購入済みアプリの復元方法、接続時の症状についてはよくある質問をご覧ください。設定ファイルの構造については、関連する解説記事を参照してください。この役割分担に沿って確認すれば、根拠のある範囲に変更を限定できます。