Shadowrocket
プロトコルの種類と設定項目
まずサーバーが対応するプロトコルを確認し、認証・通信方式・ルールの役割を把握しましょう。プロトコル名は速度の順位を示すものではなく、実際の接続テストの代わりにもなりません。
ShadowrocketはiPhone、iPad、Mac、Windows、Android、Linuxに対応しています。iPhone / iPad版はApp Storeで$2.99の買い切り、Mac(Appleシリコン・Intel)、Windows、Android、Linux版は無料です。システム要件はApp Storeの掲載内容をご確認ください。入手方法とインストール時の確認事項はアプリの入手をご覧ください。パソコン・Android版のインストーラーは当サイトの/dl/から入手できます。
このページは、ご自身のサブスクリプションまたはサーバー情報をお持ちの方向けに、Add Serverで種類を選ぶ方法、設定項目の読み方、プロトコル層のトラブルの切り分け方を解説します。初めて接続する場合は、まずクイックスタートに沿って読み込み・選択・確認を済ませてから、各プロトコルの説明をご覧ください。ここでは同じ操作手順を繰り返しません。
プロトコルの選び方:接続を階層ごとに見る
手元の情報から選択肢を確認する
プロトコル選びで最初に確認するのは名称の比較ではなく、サーバーで実際に利用できる方式です。サブスクリプションには通常、種類、アドレス、ポート、認証情報が含まれています。読み込んだら、まず元の設定を保管し、項目を一つずつ確認しましょう。手動で追加する場合は、Add Serverでサーバー側と同じ種類を選びます。同じアドレスをShadowsocksからTrojanに変更しても、サーバー側のプロトコルは変わりません。完全な設定情報が一つある場合は、認証項目を書き換えずに、まずその設定で接続を確認してください。
接続には少なくとも四つの階層があります。端末からサーバーへのネットワーク到達性、プロトコルの認証、データを運ぶ通信方式、そしてどのリクエストをその接続に流すか決めるルールです。アドレスやポートの誤りは到達性の問題、パスワードやUUIDの誤りは認証の問題、WebSocketのパス不一致は通信方式の問題、サイトに想定したポリシーが適用されない場合はルールの問題が考えられます。それぞれ別に失敗するため、「接続がオン」という表示は接続サービスが起動したことを示すだけで、すべてのリクエストが正常に届いた証拠にはなりません。
プロキシプロトコル、通信方式、暗号化は別の設定項目
Shadowsocks、VMess、VLESS、Trojanは、それぞれ異なるプロキシプロトコルの設計を示します。TCP、UDP、WebSocketはデータの運び方に関係し、TLSは接続時の認証と暗号化を担います。これらの機能が一つにまとめられている種類もあれば、外側に別途設定する種類もあります。サブスクリプションに関連する項目が複数あっても、設定が重複しているとは限りません。項目同士の組み合わせを保ち、パスワードを入力したからといってTLSのServer Nameを削除してよいとは考えないでください。
速度も用途ごとに分けて見ましょう。ウェブページを初めて開くときは、名前解決、接続、ハンドシェイク、コンテンツのダウンロードが発生するため、単一のレイテンシテストでは全体を評価できません。大きなファイルのダウンロードでは持続的なスループット、対話型アプリでは往復遅延とジッター、ネットワーク切り替えでは再接続の挙動が重要です。プロトコル変更で変わるのはその一部にすぎず、サーバー負荷、ネットワーク経路、無線電波の状態が主な制約になることもあります。そのため、このガイドではネットワーク条件を無視した速度や消費電力の一律な順位付けは行いません。
| 階層 | 確認する項目 | よくある症状 |
|---|---|---|
| ネットワーク接続先 | アドレス、ポート、TCP / UDPの到達性 | 認証前に接続がタイムアウトする |
| プロトコル認証 | パスワード、UUID、鍵、暗号化方式 | サーバーには到達するが、セッションを確立できない |
| 通信の保護 | TLS、Server Name、パス、Host | 証明書エラーまたは通信のハンドシェイク失敗 |
| リクエストの振り分け | Config、ルールの順序、ポリシー | 一部のリクエストだけ想定どおりに処理されない |
iOSでバッテリー消費の原因を見極める
iOSのバッテリー消費は暗号処理だけで決まるわけではありません。無線通信が頻繁に起動する、接続に失敗して何度も再試行する、バックグラウンドアプリがアップロードを続けるといった状況も、端末の稼働時間を延ばします。計算量が少ない設計のプロトコルでも、ハンドシェイクを繰り返す必要があれば、安定した接続を維持する別の方式より電力を消費することがあります。比較する際は、画面の点灯状態、Wi-Fiかモバイル通信か、テスト時間、動画やダウンロードの同時実行の有無を記録し、端末全体の消費をアプリだけの原因と決めつけないようにしましょう。
ルールモードによってテスト対象も変わります。Global RoutingのConfig、Proxy、Directは、それぞれConfig、Proxy、Directに対応します。Configは現在の設定に従って通信を振り分け、Proxyは対象の通信を選択中のプロキシポリシーに送り、Directは直接接続します。トラブルの切り分けではルールの影響を調べるためにモードを一時変更できますが、一度に変えるのは一項目だけにし、テスト後は元に戻してください。モード変更とプロトコル変更を同時に行うと、改善してもどちらが影響したのか判断できません。
選び方は、まずサーバーとの互換性、次に用途、最後に端末での動作を確認する順が基本です。UDPが必要か、内部ネットワークのアドレスを使うか、ネットワークを頻繁に切り替えるかを確認し、現在利用できる設定を同じ条件でテストしましょう。各種類の概要をすぐに把握したい場合はプロトコル一覧の記事も参考になります。初回の読み込みで問題が起きたときは、設定全体を書き換えるのではなく、クイックスタートに戻って情報が揃っているか確認してください。
Shadowsocks:共通鍵暗号とシンプルな転送
設計の背景と適用範囲
Shadowsocksは、比較的シンプルなプロトコルで暗号化されたプロキシ転送を行う設計です。クライアントが接続先をサーバーに伝え、サーバーが接続先への通信を確立します。基本認証にウェブサイトの証明書は使わず、クライアントとサーバーで共有するパスワードと暗号化方式を主に利用します。この違いを理解すると、設定項目を正しく見分けられます。一般的なShadowsocks設定ではPasswordとMethodの両方が必要です。別プロトコル用のパスワードをそのまま流用したり、ポート番号が同じだからといって異なるサービスを相互に使えると判断したりしないでください。
暗号化方式によって、メッセージ形式や鍵の要件が異なる場合があります。新しい方式と古い方式の違いは単なる「強弱」ではなく、鍵のエンコードや長さ、実装との互換性にも及ぶことがあります。サーバー側で指定された方式をクライアントでも選択してください。該当する項目が見つからない場合は、似た名前の選択肢で代用せず、情報が現在のクライアントに対応しているか確認しましょう。読み込み後も方式名を確認し、特にサブスクリプションの変換時に項目が抜けていないか注意してください。
アドレス、ポート、パスワード、方式を一つずつ確認
Serverにはサーバーのドメイン名またはIPアドレス、Portには実際に待ち受けているポート番号を入力します。通常、アドレスにウェブページのパスは含めません。ポート番号をアドレス欄に混ぜないでください。Passwordは提供された情報をそのまま保存し、コピー時の空白、改行、全角文字に注意します。Methodは具体的な暗号化方式を示す項目で、任意の好みで選ぶものではありません。アドレスの名前解決はできるのに接続に失敗する場合は、ポートと方式も確認してください。ドメインでウェブページが開けることは、プロキシ用ポートが正常である証拠にはなりません。
一部の設定には追加の通信パラメーターがありますが、すべてのShadowsocksサービスで共通して必要なものではありません。手元の情報に明記されている場合にのみ有効にし、対応する名前と値を一致させてください。別の設定で見かけた項目を、現在の接続にも追加するのは避けましょう。余分なカプセル化によって、サーバーが想定するデータ形式が変わることがあります。読み込んだ設定と手入力した設定に違いがある場合は項目ごとに比較しますが、元の情報を失わないよう、まず読み込み済みの項目を参照用に残してください。
| 項目 | 意味 | 確認方法 |
|---|---|---|
| Server / Port | サーバー接続先 | ドメイン名と待受ポートを確認し、ウェブページのパスは含めない |
| Password | 認証および鍵導出に関する情報 | 全体をコピーし、空白と文字コードを確認する |
| Method | 暗号化方式とメッセージ形式の取り決め | サーバー側の指定と完全に一致させる |
| UDP | データグラムの転送機能 | サーバー、ネットワーク、用途の要件を確認する |
TCPで接続できても、UDPが使えるとは限らない
ウェブ閲覧はTCPで完了することが多い一方、リアルタイム通信、一部の名前解決、QUICを使うアプリではUDPが必要になる場合があります。ShadowsocksでTCPとUDPを転送するには、それぞれ条件を満たす必要があります。サーバーが対応していること、ネットワークで該当する通信が許可されていること、クライアント設定で無効になっていないことを確認してください。ウェブは表示できるのにリアルタイム機能が使えない場合は、この経路を調べましょう。一度ウェブページが開けただけで、あらゆるアプリに適した接続と判断しないでください。逆に、一つのアプリで失敗しても接続全体が使えないとは限りません。
iPhoneやiPadでは、シンプルな転送方式は確認すべきカプセル化の層が少ないことを意味する場合がありますが、常に速く、電力消費も少ないとは限りません。端末のチップによるアルゴリズム処理効率、長時間接続の数、ネットワーク上の再送などで結果は変わります。同じ設定がWi-Fiでは正常でモバイル通信ではタイムアウトする場合は、まず接続先ポートとネットワーク到達性を比較してください。高負荷時だけ明らかに遅くなるなら、サーバー負荷と持続的なスループットも確認します。プロトコル名だけで結論を出すことはできません。
トラブルは「情報が揃っているか」「接続先に到達できるか」「認証情報が一致するか」「必要な用途に対応しているか」の四段階で確認できます。まずサブスクリプションの更新が成功しているかを確認し、次に現在選択中の項目を確認します。項目を編集したものとは別の設定をテストしていないかにも注意してください。認証エラーならパスワードと方式、タイムアウトならアドレス、ポート、現在のネットワークを確認します。一部のリクエストだけ異常な場合は、ルールとUDPを調べましょう。設定を複数同時に試行錯誤せず、原因と結果の関係を明確に保てます。
手元のサーバーがShadowsocksのみに対応しているなら、設定が完全に一致した接続をそのまま使えばよく、プロトコル名を変える必要はありません。複数の利用可能な設定をお持ちの場合は、同じ接続先と近い時間帯で、ウェブの初回表示、持続的な通信、バックグラウンド待機時の動作を比較しましょう。「軽量」「高速」といった評価をプロトコルに付けるより、どの段階で改善したかを記録するほうが、ネットワーク条件が変わった後の判断にも役立ちます。
VMessとVLESS:認証と通信方式を分けて確認
似た項目があっても、同じプロトコルとは限らない
VMessはユーザー認証とプロトコル独自のデータ保護機能を組み合わせており、設定にはUUID、暗号化オプション、通信方式などが含まれることがあります。VLESSはよりシンプルな認証・転送設計で、プロトコル自体は同等のコンテンツ暗号化を担わず、通常は適切な外部のセキュリティ機構と組み合わせます。どちらもUUIDを使い、TCPやWebSocketと組み合わせる場合がありますが、項目の形が似ているだけで、種類を混同してよいわけではありません。サーバーがVLESSと指定している場合、VMessを選んで同じUUIDを入力しても設定は一致しません。
この設計ではプロトコルと通信方式を組み合わせられるため、さまざまな構成に対応できる一方、確認する項目も増えます。情報を読む際は、すべてを一続きの項目一覧として扱わず、「プロトコルの種類」「ユーザー認証」「下位の通信方式」「TLSによる保護」の四つに分けましょう。どれかの情報が不足している場合は、元の情報提供元に確認してください。ドメイン名やポート番号から推測しないでください。よく使われるセキュアウェブ用ポートであっても、それだけではTLSの有効化を証明できません。
UUID、暗号化、時刻の条件
UUIDはプロトコル上のユーザーを識別する値で、任意のメモではありません。コピー時は全体を正確に保ち、表示名、サブスクリプションのURL、別の認証情報をこの欄に入力しないようにします。VMessの暗号化関連オプションは、提供された設定に従ってください。古い設定に追加の認証パラメーターがある場合も、元の値を保持し、過去のガイドにある固定値をすべてのサービスに適用できる標準値とみなさないでください。一般的な例に合わせるより、読み込み結果をサーバーの実際の設定に一致させることが重要です。
端末の時刻が認証や外部証明書の検証に影響する場合もあります。認証に失敗したら、まずシステムの日付、時刻、タイムゾーンが正常か確認し、その後UUIDや関連項目を調べてください。エラーを回避するためにシステム時刻をむやみに変更しないでください。サブスクリプションの更新直後に問題が起き、古い項目では接続できる場合は、プロトコルの種類と認証項目が変わっていないか比較します。読み込みに成功したという表示は、クライアントが情報を解析できたことを示すだけで、接続先が認証情報を受け入れたことまでは示しません。
WebSocketのHostとPathは役割が異なる
WebSocketはプロキシのデータを運ぶ通信方式の一つです。Pathはサーバーがアップグレード要求を受け付けるパスを示し、通常は先頭のスラッシュと大文字・小文字をそのまま保持する必要があります。HostはHTTPリクエストのホスト名を示します。接続先のアドレスと同じ場合も異なる場合もあり、具体的な構成によって変わります。パスの入力漏れ、Server欄へのパスの誤入力、Hostの不一致などがあると、下位のTCP接続は確立していても、通信のハンドシェイクを完了できないことがあります。
TLSのServer Nameはさらに別の項目で、主にハンドシェイク時のサーバー名通知と証明書名の検証に使われます。Hostが正しくてもServer Nameが正しいとは限らず、その逆も同様です。手元の設定に三つの値が明記されている場合は、それぞれ個別に入力し、すべてをサーバーのIPアドレスに統一しないでください。IPアドレスで接続しながら、証明書検証にはドメイン名を使う構成も可能ですが、元のサーバー設定が対応している必要があります。クライアント側で値を作り上げてはいけません。
| 項目グループ | よくある設定内容 | 誤りがある場合の影響 |
|---|---|---|
| プロトコルの識別 | VMess / VLESS、UUID | 種類または認証の不一致 |
| データ保護 | プロトコルの暗号化オプション、TLS | 双方のセキュリティ設定が一致しない |
| 通信方式 | TCP / WebSocket、Path | 想定された通信を確立できない |
| 名前に関する項目 | Host、Server Name | ルーティングまたは証明書検証の異常 |
追加のカプセル化による実際の影響を理解する
iOSでは通信レイヤーの追加により、ハンドシェイク、ヘッダー、バッファー処理の負荷が増える場合がありますが、実際の影響は接続が再利用されるか、通信がどれくらい続くかによって異なります。短いウェブリクエストは最初のハンドシェイクの影響を受けやすく、長時間のダウンロードでは回線のスループットが制約になりやすいでしょう。VLESSのプロトコル上の役割がシンプルだからといって、あらゆるVLESS構成があらゆるVMess構成より速いとは限りません。サーバー、TLS、通信方式が異なる場合、比較結果に表れるのはプロトコル単体ではなく接続全体の差です。
構成の比較が意味を持つのは、複数のサーバー設定をすでにお持ちの場合です。まずルールモードと接続先を固定し、正常に動作する設定を基準として残します。その後、初回リクエスト、連続したリクエスト、ネットワーク切り替え後の復旧をそれぞれ確認してください。WebSocketの構成だけが失敗する場合はPathとHostを確認します。TLSを使うすべての構成で証明書エラーが出る場合は、システム時刻とServer Nameを優先して確認しましょう。問題を特定の項目グループに絞ることで、認証、通信方式、ルールの問題が同時に広がるのを防げます。
Trojan:TLSを確立してからプロトコル認証を行う
証明書の識別情報とユーザーパスワードを分けて考える
TrojanはTLS接続の内側にプロキシセッションを確立します。まずTLSで保護された通信路を作り、その中でプロトコル認証と接続先の情報を送信します。ここには異なる二つの識別情報があります。証明書は接続先サーバーの検証に使い、Passwordはクライアントにアクセス権があることを示します。パスワードが正しくても証明書名の誤りは解決できず、証明書が有効でもサーバーがパスワードを受け入れたとは限りません。すべてをパスワードの誤りと決めつけず、ハンドシェイクの順序に沿って確認してください。
この方式ではTLSが多くのセキュリティ上の役割を担うため、サーバー名、証明書の有効期限、端末の信頼条件が特に重要です。ただし、TLSの設定項目をすべて手入力する必要があるという意味ではありません。サブスクリプションには通常、必要な設定が含まれています。まず読み込んだ設定を維持し、エラーに応じて不足している項目を確認しましょう。情報が揃っていない状態で名前を次々に試すと、別のサーバー接続先に到達して、原因がさらに分かりにくくなることがあります。
Server、Server Name、証明書チェーン
Serverはネットワーク接続で実際にアクセスするアドレス、Server NameはTLSハンドシェイクと名前検証で重要な役割を果たす情報です。ドメイン名で接続する場合は同じ値になることがよくありますが、IPアドレスで接続する場合も、Server Nameには元のドメイン名を保持する必要があることがあります。証明書の検証には有効期限と信頼チェーンも関わるため、名前が正しいだけでは不十分です。証明書の期限切れや中間証明書の設定不備がある場合は、クライアントのパスワードを何度も変えるのではなく、サーバー側を修正する必要があります。
端末の時刻のずれ、ネットワークの認証ページ、誤った名前解決によって、似たようなTLSエラーが発生することがあります。公共Wi-Fiのウェブ認証が済んでいないと、接続が認証ページに転送される場合があります。名前解決で誤ったアドレスが返されると、そのサービスとは無関係の証明書を持つサーバーに接続する可能性もあります。こうした問題では、まずネットワーク自体が正常に使えることを確認し、次にドメインの名前解決結果とServer Nameを調べましょう。接続先を確認する前に、認証情報を追加で送信したり、信頼する範囲を広げたりしないでください。
認証、通信方式、用途への対応範囲
TrojanのPasswordは大文字・小文字や記号も含めて正確に保持してください。サブスクリプションのURL全体をそのまま入力してはいけません。手元の情報で追加の通信方式が指定されている場合は、それもサーバー側と一致させます。一般的なTrojanでよく使われる通信方式を理由に、設定で明示された項目を削除しないでください。読み込み後は種類、アドレス、ポート、パスワード、TLS名の五項目を確認し、続けてほかの通信パラメーターを確認します。この順序で、よくある構成ミスを先に除外できます。
UDPが使えるかどうかは、サーバーの対応状況、クライアント設定、実際のネットワーク条件によって決まります。ある種のデータを転送できるプロトコルでも、すべてのアプリで同じ動作をするとは限りません。リアルタイム通信は遅延やジッターの影響を受けやすく、長時間のダウンロードはサーバーの上り帯域幅に左右されやすいものです。通常のウェブ閲覧はできるのに特定のリアルタイムアプリで問題がある場合は、その用途を個別にテストしてください。ウェブの成功を用途全体のテストの代わりにしたり、問題を隠すためにタイムアウト値をむやみに大きくしたりしないでください。
iOSで接続の再利用と再接続を確認する
TLSハンドシェイクではデータ交換と計算が発生するため、初回接続と、その後の安定した通信では負荷が異なります。短い接続を頻繁に作る場面ではハンドシェイクの回数が応答時間や電力消費に影響することがあります。一方、長時間接続を維持する場面ではこの負荷が分散され、回線品質のほうが重要になる傾向があります。関連する接続再利用の仕組みをサーバーとクライアントが使うかどうかでも結果は変わります。テストでは初回表示と連続アクセスを別々に記録し、確立済みセッションの速度を初回接続の性能と混同しないでください。
Wi-Fiからモバイル通信に切り替えると、端末のアドレスや到達経路が変わり、既存のTCP接続は再確立が必要になることがあります。切り替え後も長時間復旧しない場合は、現在の処理を止めて新しいネットワークが正常か確認してから、再接続にかかる時間を測ってください。すぐに設定を消去する必要はありません。バックグラウンドで接続に失敗し続けると、再試行と無線通信の稼働時間が増えて、バッテリー消費が増えることがあります。この場合はまず失敗の原因を調べ、暗号処理を消費の原因と決めつけないでください。
すでに安定して使えるTrojan設定をお持ちの場合、日常利用では証明書検証と認証の設定を正しく保ち、サブスクリプション更新後に意図せず上書きされていないか確認することが重要です。ほかのプロトコルと比較する場合は、ネットワーク経路、接続先、テスト時間をできるだけ揃え、接続全体を比較していることを明記します。プロトコルの説明はトラブルの特定に役立ちますが、サーバーの稼働状況や接続先への到達性の確認に代わるものではありません。
HTTPとSOCKS5:プロキシへの接続と接続先への通信を区別
二つの汎用プロキシが想定する用途
HTTPプロキシはウェブリクエストの転送を想定した方式です。クライアントからプロキシにリクエストを送るほか、CONNECTを使って接続先までのトンネルを作ることもできます。SOCKS5はより汎用的なプロキシネゴシエーションプロトコルで、接続先のアドレスとポートを指定します。通信内容がウェブである必要はありません。どちらもShadowrocketのサーバータイプとして選べますが、種類の名前だけから、接続先が暗号化されている、あらゆる用途に対応する、ほかのプロトコルと同じ認証方式を備えている、と判断することはできません。
「プロキシサーバーまでの接続」と「プロキシサーバーからウェブサイトまでの接続」は区別が必要です。接続先のウェブサイトがHTTPSを使う場合、保護されるのは該当するTLSセッション内の通信内容です。それだけでは、端末からプロキシ接続先までのすべてのネゴシエーション情報が外部TLSで保護されているとは限りません。通常のHTTPやSOCKS5接続先を、暗号化トンネルと同じものとして扱わないでください。手元のサービス説明に基づいて、接続先が保護されているか、信頼できないネットワークでも使えるかを確認しましょう。
HTTP CONNECTとHTTPS接続先は別のもの
HTTPプロキシ経由で安全なウェブサイトに接続する場合、通常CONNECTで接続先への通信路を要求し、その中を通して接続先のTLSデータを送ります。CONNECTに対応していることと、プロキシ接続先自体がTLSを使うことは別の概念です。接続先によっては利用できるポートが制限され、一般的なウェブページは表示できても、ほかの用途では失敗する場合があります。その場合はサービスで許可されている範囲を確認してください。接続先のドメインを何度も変更したり、クライアントのルールが必ず誤っていると決めつけたりしないでください。
手元の情報でTLS保護付きのHTTPプロキシ接続先が明示されている場合は、指定された種類と証明書名の設定を使用してください。逆に、ポート番号を一般的なセキュアポートに変えただけで、通常の接続先が安全な接続先に変わるわけではありません。認証方式も一致させる必要があります。ユーザー名とパスワードは対応する項目に入力し、アドレスに連結して読み込もうとしないでください。サービスに特定の認証制限がある場合は、クライアントとサーバーがそれをサポートするか確認します。
SOCKS5のアドレス形式とUDPの条件
SOCKS5ではIPアドレスまたはドメイン名を指定できますが、名前解決をどちら側で行うかは、クライアントのリクエスト処理とDNS設定によっても変わります。端末ですでにドメイン名をIPアドレスに解決していれば、プロキシにはIPアドレスが送られることがあります。ドメイン名を保持した場合は、接続先のサーバー側で処理される可能性があります。「SOCKS5はドメイン名に対応」と書かれているからといって、すべての名前解決が接続先で行われるわけではありません。特定のドメインに接続できないときは、DNSとプロキシリクエストの両方を確認し、同じ問題として扱わないようにしましょう。
SOCKS5の仕様にはデータグラム転送の仕組みとしてUDP ASSOCIATEがありますが、サーバー側が実装しているか、許可しているか、ネットワークからUDP転送先に到達できるかを、それぞれ確認する必要があります。TCP CONNECTのみ使える接続先でもウェブ閲覧には十分な場合がありますが、リアルタイムアプリの要件を満たさないことがあります。用途でUDPが必須なら、手元のサービスが対応していることを説明で確認してから、実際の用途でテストしてください。TCPのレイテンシテストが一度成功しても、UDPの機能は確認できません。
| 確認項目 | HTTP | SOCKS5 |
|---|---|---|
| 主なネゴシエーション方式 | リクエスト転送またはCONNECT | 接続先のアドレスと接続コマンド |
| 接続先までの暗号化 | 接続先が別途TLSを使うかどうかによる | 基本プロトコル自体は通信内容を暗号化しない |
| ユーザー認証 | 接続先が対応する方式を設定 | 接続先の指定に従ってユーザー名とパスワードを入力 |
| UDP | 通常のCONNECTから対応状況を判断できない | 対応する仕組みにはサーバーとネットワークの両方が必要 |
適した用途とiOSでのテスト方法
この二つの種類は、既存の組織内ネットワーク、テスト環境、特定業務のプロキシで使われることがあります。選ばれる理由は既存設備との互換性であることが多く、プロトコル名による性能上の利点とは限りません。利用許可のあるアドレスと認証情報をすでにお持ちの場合にのみ設定してください。接続先が特定のネットワーク内でしか到達できないなら、そのネットワークから離れた後に失敗するのは構成上の制限であり、スマートフォンの設定が原因とは限りません。同じ情報を繰り返し読み込む前に、まず接続可能な範囲を確認しましょう。
iOSでは、プロトコルのネゴシエーションがシンプルだからといって、全体の消費電力が必ず少なくなるわけではありません。接続先が同時接続数を制限している、セッションを頻繁に終了する、アプリが対応していない用途を何度も再試行する、といった状況でも無線通信の稼働時間は増えます。ウェブ閲覧とUDPを使う用途を分けて比較し、失敗が特定の接続先に集中していないか確認しましょう。権限、接続先の保護、用途への対応を確認してから、現在の場面に適しているか判断してください。一度だけ接続できる状態を狙って認証を無効にしたり、証明書検証を無視したりしないでください。
WireGuard:鍵による識別、トンネルアドレス、ルーティング範囲
まずネットワーク層のデータを扱う仕組みと理解する
WireGuardはネットワーク層のトンネルとして設計されており、特定の接続先へのプロキシ接続とは考え方が異なります。接続先アドレスのほかに、端末側のアドレス、鍵による識別情報、トンネルに流すアドレス範囲が必要です。アプリで接続を一元管理しても、こうしたネットワーク層の条件はなくなりません。ドメイン名とパスワードだけをもとに設定を組み立てず、完全な設定情報を入手してください。トンネルアドレスやピアの公開鍵がなければ、通常、想定どおりの通信は確立できません。
WireGuardでは公開鍵で通信相手を識別します。端末側の秘密鍵は自分の身元を証明し、ピアの公開鍵は接続先の身元を指定します。これらは入れ替えて使える二つの文字列ではありません。端末側の秘密鍵は外部に漏らさず、サーバー側にはそのクライアントに対応する公開鍵を設定する必要があります。端末に新しい鍵を入力しただけで、サーバーが自動的にその鍵を認識するわけではありません。管理者から設定が提供されている場合は、両者で合意済みの鍵の組み合わせを保持し、むやみに再生成して上書きしないでください。
Endpoint、Address、Allowed IPs
Endpointはトンネルの接続先を示し、通常はホスト名とUDPポートで構成されます。Addressはトンネル内で端末側に割り当てられるアドレスで、サーバーのグローバルアドレスではありません。WireGuard本来の意味では、Allowed IPsは宛先のルーティング範囲と、ピアに許可するアドレス範囲の両方に関係します。アプリへの統合後の具体的な処理は、アプリの設定も踏まえて確認してください。それぞれの役割を理解していれば、「ハンドシェイクには成功したのにアクセスできない」場合を切り分けやすくなります。認証のハンドシェイクが成功しても、すべての接続先に正しい経路があるとは限りません。
組織内ネットワークにアクセスする場合は、対象のネットワーク範囲が提供された設定と一致し、サーバー側に転送経路と戻り経路がある必要があります。端末が接続中のWi-Fiと接続先の内部ネットワークでアドレス範囲が重複していると、ルートの選択に曖昧さが生じることもあります。この場合、鍵を何度も変えても解決しません。まず宛先アドレスが実際にどの経路へ向かうか確認してください。IPv6を使う場合も、対応するアドレスとルートがあるか確認します。IPv4が使えるからといって、もう一方のアドレス空間も使えるとは限りません。
| 項目 | 役割 | 注意事項 |
|---|---|---|
| Private Key | 端末側の識別情報 | 秘密に保ち、公開のトラブル記録に載せない |
| Public Key | 接続先の識別情報 | 端末側の公開鍵とサーバーの公開鍵を区別する |
| Endpoint | リモートネットワークの接続先 | UDPアドレスとポートに到達できるか確認する |
| Address / Allowed IPs | トンネルアドレスと許可範囲 | ネットワーク範囲、戻り経路、アドレスの重複を確認する |
Keepaliveとモバイル通信のバランス
WireGuardはUDPを使います。モバイル端末がアドレス変換装置を経由して接続先にアクセスする場合、アイドル状態のマッピングが期限切れになることがあります。Persistent Keepaliveは、定期的なパケットを送ってそのマッピングを維持するための機能の一つで、帯域幅を増やすものではありません。Keepaliveの頻度を上げると無線通信が増え、頻度を下げると一部のネットワークでアイドル後の復旧に時間がかかる可能性があります。手元の設定に従い、アイドル後に復旧できない問題が実際にある場合に限って調整を検証してください。すべての端末に共通する固定間隔を当てはめないでください。
ネットワークを切り替えると、下位の通信経路のアドレスが変わることがあります。WireGuardには条件が整えばピアのアドレス変更に対応できる仕組みがありますが、実際の動作は新しいネットワークでのUDP到達性、アドレス変換、サーバー側のポリシーにも左右されます。Wi-Fiでは使えてモバイル通信では接続できない場合は、まずUDPの到達性を比較し、その後モバイル通信事業者のネットワークと接続先の制限を確認しましょう。アドレス変更への対応機能があっても、あらゆる切り替えで接続が中断しないとは限りません。一度すぐに復旧できたからといって、どのネットワークでも接続を維持できると判断しないでください。
MTUとDNSを分けて確認する
トンネルのカプセル化ではパケットの一部がヘッダーに使われます。経路で運べる実効サイズとMTUの設定が合わないと、小さなリクエストは通るのに大きな応答が止まることがあります。ただし、パケットロスやサーバー側の問題でも同じ症状が起きるため、変更前に元の値を保存し、一度に一項目だけ変えて同じリクエストを再テストしてください。ネット上のMTU値を共通の正解とみなしたり、ウェブページが開かないからといってすぐに極端に小さくしたりしないでください。不必要にスループットが低下するおそれがあります。
DNSはドメイン名からアドレスを取得し、ルーティングはデータの送信先を決めます。トンネルを使う場面では同時に関係することがありますが、役割は異なります。既知の内部アドレスには直接アクセスできるのに名前では失敗する場合は、まず内部DNSとその接続経路を確認してください。内部ネットワークへの接続が必要な場合は、プロトコルの速度テストよりアドレス設計の確認が重要です。通常のウェブ閲覧では、Shadowrocketの実際のポリシーに従ってリクエストが想定した接続に流れているかを確認します。
Hysteria2:QUIC、UDP経路、帯域幅の設定
設計上の特徴は通信の挙動であり、速度を一律に保証するものではない
Hysteria2はQUICを基盤としてプロキシ通信を行います。QUICはUDP上で動作し、暗号化、接続管理、複数のデータストリームを組み合わせるため、通常のTCP通信とは異なる挙動をします。この設計は、高遅延やパケットロスのある環境で異なる性能を発揮することがありますが、物理的な帯域幅の制約をなくしたり、あらゆる無線ネットワークで速度が上がることを保証したりするものではありません。サーバーとネットワークがUDPに対応しているか、輻輳制御に関する設定が適切かどうかも結果に影響します。
複数のデータストリームを使う場合も、適用範囲を理解しておきましょう。ストリーム間で通信層の一部のブロッキングの影響を抑えられる場合がありますが、同じ接続上のストリームはネットワークリソースと輻輳状態を共有します。無線回線が深刻に混雑しているとき、QUICに変更しただけで帯域幅が増えるわけではありません。比較の際にサーバーや接続先も同時に変えると、結果をプロトコルの差に結び付けにくくなります。まず手元のサービスがHysteria2に対応していることを確認し、ほかの利用可能な設定と同じ条件で比較してください。プロトコル名を性能改善のスイッチとして扱わないでください。
認証、証明書、オプション項目をグループごとに確認
基本情報には通常、サーバーアドレス、ポート、認証情報、TLS関連の名前が含まれます。認証文字列はサーバー側と一致させ、Server Nameと証明書検証の設定も正しく保ってください。下位の通信にUDPを使っていても、TLSによる識別情報の検証はなくなりません。認証に失敗する場合は認証項目を、証明書の検証で問題がある場合は名前、時刻、信頼チェーンを確認します。確認手順は異なるため、名前の不一致をパスワード変更で解決しようとしないでください。
一部のサービスには、追加の難読化関連項目があります。サーバー側で明示的に有効化され、対応する情報が提供されている場合にのみ入力してください。クライアント側だけでオプションを有効にすると、サーバーが従来の形式どおりにデータを処理できなくなります。サブスクリプションを読み込んだ後に接続できない場合は、元の情報と項目を一つずつ比較し、変換時や手動編集時に設定が抜けていないか確認してください。別の接続の追加項目を流用したり、初期値からサーバーの実際の設定を推測したりしないでください。
帯域幅の項目は購入枠ではなく、大きいほどよいわけでもない
設定によっては、アップロードとダウンロードの帯域幅を指定する項目があり、輻輳制御の挙動に影響する場合があります。これらはクライアントが利用できる帯域幅の枠を示すものではなく、値を大きくすれば速度が上がるわけでもありません。実際より高く見積もるとキューやパケットロス、ジッターが増えることがあり、低く見積もるとスループットが制限される可能性があります。影響はネゴシエーションやサーバー側のポリシーにも左右されます。手元の設定情報を確認し、実際の回線に見合った値を使いましょう。モバイル通信の瞬間的な最大速度を、継続して使える能力とみなさないでください。
入力時には単位と方向も確認してください。アップロードは端末から外部への送信、ダウンロードは端末が受信する通信です。画面や情報源によって単位が異なることがあるため、数値だけをコピーして同じ意味だと思い込まないでください。値を調整する場合は、安定したネットワークで何度か継続的に通信し、少しずつ変更して結果を記録します。短いファイルを一度テストするだけでは、主に接続確立やキャッシュの影響を見ている可能性があります。帯域幅の設定を判断するには不十分で、長時間利用時の電力消費も分かりません。
iOSでスループット、発熱、復旧を個別に確認する
スループットが高いと、データ処理、無線通信、アプリの動作も増えます。処理を早く終えられても、短時間の消費電力は高くなることがあります。電力消費を比較するときは、タスクの終了時刻、画面の状態、端末温度も記録してください。ある時点でのバッテリー残量の減り方だけで判断しないようにしましょう。モバイル通信で高負荷の状態が続き、明らかに発熱する場合は、まずテスト負荷を下げ、電波状況を確認してください。電波が弱く再送が繰り返されると端末全体の消費電力が増えるため、プロトコルの計算だけを原因とみなさないでください。
Wi-Fiでは使えるのに別のネットワークでタイムアウトする場合は、同じアドレスとポートへのUDP経路を確認します。小さなリクエストは通るのに継続通信が不安定な場合は、パケットロス、輻輳制御の設定、パケットサイズに関する問題を調べましょう。ネットワーク切り替え後に復旧できるかどうかは、実際の端末でテストする必要があります。QUICに特定の機能があるからといって、あらゆるクライアントとサーバーの組み合わせで接続が維持されるとは限りません。頻繁に移動する使い方では、切り替えテストを独立した確認項目にしましょう。
手元のHysteria2サービスが現在の用途に適しているかは、実際の結果で判断します。ウェブ閲覧は安定しているか、長時間の処理は時間内に完了するか、リアルタイム通信にジッターがないか、バックグラウンドで接続が繰り返し再試行されていないかを確認してください。ウェブページの初回表示を改善したい場合は、まずDNSとTLS設定の問題を除外します。継続的なダウンロードが制限される場合は、経路とサーバーの能力を調べましょう。単位やサーバーの条件が分からないまま設定値を何度も大きくするより、症状に合わせてテストするほうが効果的です。
利用場面ごとの確認:プロトコル、DNS、ルールを分けてトラブル対処
同じ条件で基準となる結果を取る
プロトコルを比較する目的は、実際の用途に役立てることです。普段のウェブ閲覧では初回応答と連続表示、ファイル転送では安定したスループットと途中切断、リアルタイム通信では遅延・ジッター・UDPの動作、内部ネットワークへの接続ではアドレス設計・DNS・戻り経路を確認します。複数の設定をお持ちの場合は、まず用途を完了できる設定を基準として選び、ほかの設定と比較してください。すべての設定で失敗する場合は、テスト環境が整っていない可能性を考え、プロトコルについて結論を出す前に現在のネットワークと接続先を確認しましょう。
有効な比較にするには、端末、ネットワーク、接続先、ルールモード、テスト時間をできるだけ揃え、バックグラウンドの大容量通信を停止し、初回接続かどうかを記録します。各設定を数回テストし、最良の一回ではなく一般的な結果を参考にしてください。Connectivity Testは、明らかに到達できない項目を見つけるのに役立ちますが、ウェブ閲覧の全体的な体験を示すものではなく、UDP、内部ネットワーク、長時間接続の正常性も証明しません。接続テスト、実際のアクセス、継続的なデータ転送を分けて確認することで、差がどの段階で生じたのか分かります。
Global Routingの三つのモードで条件を切り分ける
Configは現在の設定ルールに従って接続ポリシーを決めます。Proxyは対象の通信をプロキシ経由にし、Directは直接接続します。Configで問題が起きてもProxyでは正常な場合は、パスワードをすぐに変えるのではなく、ルールとポリシーの参照先を確認しましょう。Proxyが必要な二つのモードでどちらも失敗する場合は、接続先、認証、通信方式を調べます。Directでのテストはローカルネットワークの基準を確認するもので、直接接続で到達できない接続先があるからといって、プロキシプロトコルに問題があるとは限りません。
以下の例では、ドメインのサフィックスに応じたポリシーの選択、アドレス範囲に対する直接接続、その他のリクエストに対する最終ルールの基本構造を示します。例はShadowrocketの.confルールであり、接続可能なサーバー設定ではありません。認証情報も含まれていません。PROXYは実際の設定内に有効なポリシーが必要です。読み込みや編集の前にバックアップを取り、現在のConfigで編集対象のファイルが選択されていることを確認してください。ルールは通常、上から順に照合されます。上位にある広すぎる条件によって、下位の具体的な条件が適用されない場合があります。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY
ドメインルールは適切な段階でクライアントがドメイン情報を把握できることを前提とし、IPルールはアドレスに一致させます。両者を単純に置き換えることはできません。ウェブサイトが複数のリソース用ドメインを使う場合や、アプリがIPアドレスを直接使う場合もあるため、「トップページに想定したポリシーが適用された」からといって、関連するすべてのリクエストが同じになるとは限りません。GEOIPの結果も、アドレスデータベースや接続先アドレスの変更に影響されます。特定のウェブサイトだけをプロキシ経由にしたい場合は、指定サイトだけをPROXY経由にするルールの解説を参照し、用途に合わせて条件を追加してください。
症状に応じて確認する階層に戻る
完全なタイムアウトでは、まずネットワーク、アドレス、ポートを確認します。明確な認証エラーならパスワード、UUID、鍵の組み合わせを調べます。TLSエラーではシステム時刻、Server Name、証明書を確認してください。ハンドシェイクは成功するのに用途を実行できない場合は、接続先への到達性、DNS、UDP、ルーティングを調べます。一つのドメインだけで失敗するなら、まず既知の別の接続先をテストします。すべてのドメインで失敗し、既知のIPアドレスには到達できる場合は、DNSを重点的に確認しましょう。一度に変更する設定グループは一つにし、結果を記録してください。複数の推測を同時に設定へ反映しないでください。
| 利用場面 | 優先して確認する項目 | 避けたい決めつけ |
|---|---|---|
| ウェブページの初回表示が遅い | DNS、ハンドシェイク、初回接続、接続先の応答 | レイテンシの値だけでページ全体の読み込みを判断する |
| リアルタイム通信に問題がある | UDP、ジッター、ルール、アプリの要件 | ウェブが正常なら、すべての用途も正常だと考える |
| 内部ネットワークの名前で接続できない | 内部DNS、ネットワーク範囲、戻り経路 | プロトコルの認証情報だけを変える |
| バックグラウンドのバッテリー消費が増えた | 再試行、Keepalive、アプリの動作、電波状態 | 端末全体の消費電力をすべて暗号化のせいにする |
再現できる記録を残してから、プロトコル変更を検討する
トラブルの記録には、端末のネットワーク、接続先の種類、Global Routingのモード、エラーが発生した段階と条件を含めてください。サブスクリプションのURL、パスワード、秘密鍵を公開する必要はありません。スクリーンショットやテキストを共有する前に、認証情報と個人を特定できる情報を削除し、再現に役立つプロトコルの種類と機密性のない項目だけを残しましょう。サブスクリプションの更新後に問題が起きた場合は、種類、通信方式、名前に関する項目を比較します。新しい設定が使えると確認できるまでは、元の項目を残し、動作する基準を失わないようにしてください。
最終的な選択では互換性と再現性のある結果を重視します。用途を完了できること、ネットワーク切り替え後に復旧すること、継続利用中に異常な再試行がないことは、テストで一度だけ記録した最高値より参考になります。読み込みや接続でよくある問題はクイックスタートのトラブル対処、画面に出る用語は用語の早見表、機能の動作は機能ガイドをご覧ください。サーバー側の認証、証明書、ルーティング範囲に関する問題は、手元の情報を提供した相手に該当設定を確認してください。関係のない項目をクライアント側で次々に変更しないようにしましょう。