Shadowrocketの接続タイムアウト・接続失敗の対処法|速度テスト・プロトコル設定・時刻確認

接続タイムアウトは順番に確認しましょう。まず速度テストの結果を確認し、アドレス・ポート・パスワード・プロトコル設定を一つずつ見直してから、iPhoneの日時とタイムゾーンを確認します。

この記事の概要

この記事は、Shadowrocketに利用中のサービス事業者から提供された設定を読み込み済みの方向けです。速度テストのタイムアウト、プロトコルのハンドシェイク失敗、Webページの読み込み失敗を切り分けたうえで、サーバー設定、ルーティング、システム時刻を順に確認します。変更は一度に一項目だけにし、同じリクエストの変更前後の結果を記録しましょう。テストの数値だけで接続全体が正常とは判断できません。

1. まず状況を記録し、テスト失敗とリクエスト失敗を切り分ける

Homeを開き、選択中のサーバーを確認してからConnectivity Testを実行します。テスト方式、表示結果、接続中のネットワークを記録してください。テスト方式を選べる場合は、TCPテストと実際のリクエストによる確認を分けて記録します。テスト結果が示すのは特定の方法で行った疎通確認であり、すべてのWebサイト、プロトコル、ネットワーク環境での接続状態ではありません。

TCPテストで確認できるのは、指定したアドレスとポートへのTCP接続です。ミリ秒単位の数値が表示されても、パスワードが正しいこと、TLS検証が成功すること、接続先のWebサイトにアクセスできることまでは確認できません。Hysteria2はUDPベースのQUICを使用し、WireGuardもUDPを使用します。TCPだけの疎通確認では、実際の通信を検証できません。

確認できた状況考えられること次に確認すること
TCPテストは数値を表示するが、Webページは開かないTCP接続は確立できても、その後の処理で失敗する可能性がある認証、TLS、ルーティング、DNSを確認する
テストはタイムアウトするが、実際のリクエストは成功するテスト方法や接続先が、実際のリクエストと異なる可能性があるテスト方法を記録し、すぐにプロトコル設定を変更しない
同じ設定でWi-Fi接続時だけ失敗するネットワーク経路に問題がある可能性があるモバイル通信に切り替え、同じリクエストを再試行する
特定のWebサイトだけ開かない接続全体の問題とはまだ判断できないそのリクエストのDNS、適用ルール、接続先サービスの状態を確認する

まとめ:実際のリクエストでテスト結果を確認する

同じサーバーと設定を使い、アクセスできることが分かっているHTTPSページで再テストします。テスト結果と実際のリクエストの両方を確認してから、次に変更する項目を判断しましょう。

2. 複数の設定を同時に変えず、決まった順序で再テストする

まず、Shadowrocketの接続をオフにした状態で、iPhoneが現在のネットワークを利用できるか確認します。公共Wi-FiでWeb認証が必要な場合は、接続をオンにする前に認証を済ませてください。その後、以下の順に確認します。利用中のサブスクリプションやサーバー設定は、ご自身のサービス事業者から提供された情報を基準にしてください。

  1. 変更前の状態を記録

    Homeで選択中のサーバー、Connectivity Testの結果、Global Routingの現在の設定を記録し、Wi-Fiかモバイル通信かも控えます。最初に設定をまとめて削除しないでください。

  2. アドレスを確認

    Homeで対象サーバーの編集画面を開き、アドレスとポートを確認します。アドレス欄の前後に余分な空白が入っていないか確認してください。通常のサーバーアドレスにサブスクリプションURLを入力したり、独断でhttps://やパスを追加したりしないでください。

  3. 設定項目を確認

    サービス事業者の情報を見ながら、Type、認証情報、TLS、通信方式の設定を一つずつ確認します。保存後に接続し直し、新しいWebリクエストを実行してください。以前の接続の結果を使って判断しないようにします。

  4. ネットワークを切り替える

    設定を変えずにWi-Fiとモバイル通信を切り替えます。一方のネットワークだけでタイムアウトする場合は、その違いを記録してください。一時的に接続できたことを、パスワードが再確認された証拠とみなさないでください。

  5. 時刻を確認

    iPhoneの「設定」→「一般」→「日付と時刻」を開き、「自動設定」と現在の日付、時刻、タイムゾーンを確認します。修正後に再接続し、同じHTTPSリクエストを再テストしてください。

3. アドレス、ポート、プロトコル設定を一つずつ確認する

Homeのサーバー編集画面を開き、まずプロトコルの種類がサービス事業者の指定と完全に一致していることを確認してから、各項目を照合します。ポートはサーバー側が指定する接続先です。ポートが443でも、HTTPSやTLSが利用できるとは限りません。よく使われるポートだからという理由で、元のポートを独断で変更しないでください。

プロトコル重点確認項目よくある間違い
Shadowsocksサーバー、ポート、暗号化方式、パスワード、サーバー側で指定されたプラグイン設定パスワードだけをコピーし、暗号化方式やプラグイン設定を見落とす
VMessUUID、暗号化設定、サーバー側で指定された通信方式とTLS設定UUIDを別の認証項目に入力する、または通信方式の設定を見落とす
VLESSUUID、通信方式、サーバー側で指定されたTLS、Reality、flowの設定同じUUIDなら、どの通信方式やセキュリティ設定とも組み合わせられると思い込む
Trojanパスワード、TLS、サーバー名、通信設定アドレスに接続できることだけで、証明書に対応するサーバー名を確認しない
Hysteria2認証情報、TLSサーバー名、サーバー側で指定された難読化設定TCPテストの結果だけでUDP経路も使えると判断する
WireGuardローカル秘密鍵、ピアの公開鍵、Endpoint、インターフェースアドレス、ルーティング範囲秘密鍵とピアの公開鍵を取り違える、またはUDPの到達性を確認しない

TLSサーバー名と実際の接続先アドレスは異なる場合があります。接続先アドレスはリクエストの送信先を決め、サーバー名はTLSのネゴシエーションと証明書の識別に使われます。WebSocketではHostとPathもアプリケーション層のリクエストに関係します。それぞれ同じ値の場合もありますが、似ているからといって置き換えないでください。

4. エラーに応じて原因を絞り込み、すべての失敗を同じ方法で対処しない

接続失敗の前後に表示されたログを記録し、最初に現れたエラーと対象を確認します。以下はネットワークやTLSのログに表示されることがあるエラー例です。失敗のたびに同じ文言が表示されるとは限らず、ログの一行だけでサーバー側の障害と断定することもできません。

エラー:i/o timeout

原因と対処:処理の途中で、制限時間内に読み書きが完了しなかった可能性があります。名前解決、ネットワーク経路、接続先の応答などが考えられます。まずエラーの対象を確認し、設定を変えずにネットワークを切り替えて、同じリクエストを再テストしてください。

エラー:connection refused

原因と対処:接続先または中継機器が接続を明示的に拒否しています。ポートで待ち受けていない場合や、接続が拒否された場合によく発生します。サービス事業者が指定したアドレスとポートを確認し、接続先の状態を事業者に問い合わせてください。

エラー:certificate has expired or is not yet valid

原因と対処:証明書の有効期間と端末の時刻が合っていないか、接続先の証明書が実際に期限切れになっている可能性があります。まずiPhoneの時刻を正しく設定してください。時刻に問題がないのに失敗する場合は、証明書をサービス事業者に確認してもらい、検証をスキップするのではなく原因を修正します。

エラー:no such host

原因と対処:対象のドメイン名を有効なアドレスに解決できていません。まずドメイン名の入力を確認し、サーバーのドメインと接続先Webサイトのドメインのどちらで名前解決に失敗したかを切り分けます。その後、現在の設定のDNSとネットワーク接続を確認してください。

同じエラーが続いても、待ち時間を延ばすだけでは解決しません。まず、どの段階で失敗したかを確認します。サーバーのドメイン名を解決できない場合はアドレスとDNS、TLSネゴシエーションまで進んだ場合は時刻、サーバー名、証明書、認証に失敗した場合はプロトコル設定を確認してください。発生段階によって確認箇所は異なります。

ドメイン名の解決ネットワーク到達性プロトコルのハンドシェイク認証接続先へのリクエスト

5. 接続が確立している場合はGlobal RoutingとDNSを確認する

Home → Global Routingに戻り、現在の選択を記録します。Proxy、Direct、Config、Sceneはリクエストのルーティング方法に関係するもので、異なる接続プロトコルを指すものではありません。システムにVPN接続済みと表示されても、システムのトンネルが確立したことを示すだけです。すべてのリクエストが選択中のサーバーを経由して接続先に届いたとは限りません。

Configモードでは、Ruleセクションのルールが上から順に適用されます。先にあるDOMAIN-SUFFIX、IP-CIDR、GEOIPのルールがリクエストの経路を決める場合があります。FINALはそれ以前のルールに一致しないリクエストを処理するため、ルールの末尾に置きます。同じ接続先がProxyでは使えてConfigでは失敗する場合、すぐにパスワードを変えるのではなく、適用されたルールと対応するポリシーを確認してください。

6. 最後にシステム時刻を合わせ、確認内容を記録する

iPhoneの「設定」→「一般」→「日付と時刻」を開き、「自動設定」を確認します。日付、時刻、タイムゾーンに誤りがある場合は正しく設定し、端末の実際の時刻も確認してください。証明書の検証には時刻が使われます。タイムゾーンの表示を変えるだけでは、端末の時計は修正されません。VMessなど、時刻に関係する認証方式を使うプロトコルも、大きな時刻のずれによって影響を受ける場合があります。

時刻を正しく設定しても接続できない場合は、必要最小限の情報をまとめてサービス事業者に問い合わせます。発生時刻とタイムゾーン、ネットワークの種類、プロトコル、テスト方法、個人情報を伏せたエラーの一部、ネットワーク切り替え後の結果を記録してください。パスワード、秘密鍵、UUIDの全文、サブスクリプションURL全体は送らないでください。

速度テストに数値が出るのに、Webページを開けないのはなぜ?

まず、その数値がどのテストで表示されたかを確認します。Home → Global Routingに戻ってモードを記録し、Proxyで比較用のリクエストを一度実行してください。それでも失敗する場合は、プロトコルの認証情報とTLS設定を確認します。TCP接続が確立しても、その後の認証や接続先へのアクセスが成功したとは限りません。

Wi-Fiでタイムアウトし、モバイル通信では正常です。パスワードを入力し直す必要はありますか?

まず現在のパスワードは変更せず、Wi-FiのWeb認証が完了していることを確認します。同じサーバーとリクエストで再テストしてください。Hysteria2やWireGuardの場合は、そのネットワークでUDP通信が可能かどうかも確認します。設定を何度も入力し直すより、ネットワークごとの差をサービス事業者に伝えるほうが原因の特定に役立ちます。

サブスクリプションの更新に成功すれば、すべてのサーバーに接続できますか?

いいえ。更新成功は、サブスクリプションの内容を取得して処理できたことを示すだけです。Homeに戻ってサーバーを一つ選び、テスト結果と実際のリクエストをそれぞれ確認してください。サブスクリプションに含まれるアドレスや認証設定も、サービス事業者による確認が必要な場合があります。

システムのVPN設定を先に削除したり、再購入したりする必要はありますか?

タイムアウトの調査を始める際に、この二つを最初の対処にしないでください。システムのトンネルを確立できる場合は、まずアドレス、プロトコル、ルーティング、時刻を確認します。システムの許可設定やトンネルの確立自体に問題がある場合は、初回接続ガイドで許可の手順を確認してください。

まとめ:一つずつ変更し、再テストして修正を確認する

一項目を修正したら再接続し、同じリクエストを数回続けて実行して、元のエラーが再発しないことを確認します。その後、一時的に変更したルーティングやOn Demandの条件を元に戻してください。一度成功しただけでは手がかりにすぎず、問題が起きた状況での再テストが必要です。

App Storeで正規アプリを確認 →