Shadowrocketが接続中なのにインターネットにつながらないときの対処法|サーバー・モード・DNS・ルールを確認

接続中なのにWebページが開かない場合は、サーバーの状態、Global Routing、DNS、ルールの適用順を4つの手順で確認します。

この記事の要点

接続スイッチがオンなのは、接続機能が有効になっていることを示すだけです。選択中のサーバーや名前解決、アクセス先のWebサイトが利用できるとは限りません。この記事では、すでにShadowrocketに自分のサーバーまたはサブスクリプションを追加している方を対象に、基本のネットワーク、サーバー、Global Routing、DNS、ルールの順に確認します。変更は一度に一つだけ行い、最後に元の設定へ戻して、テスト時の状態を日常の設定として残さないようにしましょう。

1. まず問題の範囲を確認する(すぐに再インストールしない)

まず、基本のネットワークに問題があるのか、接続をオンにした後に問題が起きるのかを切り分けます。Homeで接続をオフにし、Safariで普段そのまま開けるWebサイトを2つ表示します。次に接続をオンにして、同じページにアクセスします。テスト中は同じWi-Fiまたはモバイル通信を使い、ネットワーク、サーバー、設定を同時に変更しないでください。どの変更が影響したのか判断できなくなります。

  1. 元の設定を記録する

    Homeで選択中のサーバーとGlobal Routingを、Configで現在有効な設定ファイルを記録します。設定ファイルを編集する場合は、先にコピーを保存してください。記録にパスワード、サブスクリプションURL全体、その他の認証情報を含めないでください。

  2. オフにして比較する

    Homeの接続スイッチをオフにして、もう一度Webページを開きます。ネットワークが自動的に再接続する場合は、Settings → On Demandを確認します。テスト中は有効な起動条件を一時的にオフにし、確認が終わったら元に戻してください。

  3. 基本のネットワークを確認する

    接続をオフにしても通常のWebサイトにアクセスできない場合は、まずWi-Fiのログイン認証、モバイルデータ通信の許可、電波状況を確認します。公共Wi-Fiで認証が必要な場合は、システムまたはSafariのログイン画面で認証を済ませてください。

  4. テストするWebサイトを固定する

    そのままアクセスできることが分かっているページと、普段は自分のサーバー経由でアクセスするページを1つずつ選び、表示できたか、タイムアウトしたかを記録します。1つのWebサイトの結果だけで、ネットワーク全体の状態を判断しないでください。

接続をオフにしても失敗する場合は、まず基本のネットワークを確認してください。接続をオンにしたときだけ失敗する場合は、以降の項目を確認します。特定のWebサイトだけ失敗する場合は、サイト側の障害やアクセス制限、ルールの違いも考えられます。システムにVPNの表示があっても、リモートのWebサイトへの接続が確立した証拠にはなりません。

2. サーバーを確認する:テスト結果だけでは利用可能と判断できない

まず、選択中のサーバーで実際のリクエストが完了するか確認します。Home → Connectivity Testでテストを実行し、SERVERリストで選択中のサーバーも確認してください。遅延時間が表示されても、そのテスト条件で応答があったことを示すにすぎません。すべてのドメイン、ポート、アプリの通信が正常に通るとは限りません。

エラー文は、発生した箇所と合わせて確認してください。以下は接続ログに表示されることがある低レベルのエラー例です。実際の文言はプロトコルや失敗した段階によって異なります。同じエラー文だけでは、サービス提供元、DNS、ルールのどれに問題があるかは断定できません。

エラー:connection refused

原因:通常、接続先アドレスの該当ポートで接続が拒否されています。ポートの誤り、サービスが待ち受けていないこと、アクセス制御などが考えられます。

対処:まず、エラーがプロキシサーバーとWebサイトのどちらで発生したかを確認します。次に該当アドレスのポートを確認し、待ち受け状態を利用中のサービス提供元に問い合わせてください。

エラー:i/o timeout

原因:指定された処理が待ち時間内に完了していません。通信経路でのパケット損失、リモート側から応答がないこと、通信パラメーターの不一致などが考えられます。

対処:サーバーのパラメーターは変更せず、別の利用可能なネットワークで再テストします。特定のネットワークだけで失敗する場合は、そのネットワークの制限を確認してください。

エラー:no such host

原因:該当するホスト名を利用可能な形で名前解決できていません。まず、サーバーのドメインとWebページのドメインのどちらで失敗したかを確認します。

対処:ドメイン名の入力に誤りがないか確認し、後述の手順でDNSの基本設定に戻します。サーバーのドメイン自体が無効な場合は、現在の接続パラメーターを確認してください。

3. Global Routingを確認する:モードを切り替えて切り分ける

Global Routingはリクエストの振り分け方法を決める機能で、利用できなくなったサーバーを修復するものではありません。Home → Global Routingで現在の選択肢を記録し、ProxyとConfigを一時的に切り替えて比較します。テスト後は元の選択肢に戻し、診断操作によってすべてのリクエスト経路を変えたままにしないでください。

モード切り分け時の意味確認する項目
Proxy通常のリクエストをプロキシ経由にして、ルールによる振り分けの影響を比較します。Homeで正しいサーバーが選択されているか、接続パラメーターが有効か。
Directプロキシサーバーを使わず、直接接続でアクセスします。現在の基本ネットワークから接続先に直接アクセスできるか。失敗してもサーバーが利用できないとは限りません。
Config現在有効な設定ファイルのルールとポリシーに従ってリクエストを処理します。Configで実際に有効なファイル、ルールの順序、ポリシーの接続先。
Scene設定済みのSceneに従って、実際の接続方法を決定します。現在のSceneでどのルールに一致するかを確認します。Sceneと表示されているだけで、すべてのリクエストがプロキシ経由になるとは限りません。

判断の目安:Proxyで成功したらConfigを確認

同じネットワーク、サーバー、接続先でProxyなら成功し、Configでは失敗する場合は、現在の設定ファイルにあるルール、ポリシー、DNSの違いを優先して確認します。サーバーのパラメーターをすべて変更するのは後にしてください。

On Demandは接続を開始するタイミングを制御する機能で、Global Routingによるリクエストの振り分けを行うものではありません。接続をオフにした後に自動でオンになる場合は、まずSettings → On Demandを確認します。接続中なのに一部のWebサイトだけ失敗する場合は、On Demandを何度も切り替えるのではなく、モードと該当リクエストを確認してください。

4. DNSを確認する:サーバーのドメインと接続先のドメインを切り分ける

DNSを確認する際は、まずどの名前の名前解決に失敗したかを特定します。サーバーアドレスがドメイン名の場合は、接続の確立前に名前解決が必要になることがあります。接続先のWebページがドメイン名の場合は、そのリクエストがどの経路で名前解決されるかも関係します。前者の失敗はサーバーに接続できない原因になり、後者の失敗は一部のWebサイトだけに影響する場合があります。

53
従来のDNSで一般的に使われるポート。UDPまたはTCPを使用します。
853
DNS over TLSで一般的に使われるポート。
443
DNS over HTTPSで一般的に使われるHTTPSポート。

ポートに接続できても、正しく名前解決できるとは限りません。暗号化DNSでは、名前解決サービスのアドレスに到達できることと、TLS検証が正常に行われることも必要です。ドメイン名を使う名前解決サービスでは、最初の名前解決が別途必要になる場合もあります。よく分からない名前解決先を複数まとめて設定すると、確認項目が増え、原因を特定したことの証明にもなりません。

  1. Configで現在有効なファイルを確認し、編集画面を開いて[General]内の既存のdns-server設定を確認します。元の値を先に保存し、設定全体をそのまま上書きしないでください。
  2. DNSを手動で変更した直後に問題が起きた場合は、まず以前に使えていた設定へ戻します。比較が必要な場合は、設定ファイルのコピーでdns-server = systemを使い、システムの名前解決経路をテストできます。これは切り分けの基準であり、すべてのネットワークに適した最終設定ではありません。
  3. テスト用の設定を保存して有効にしたら、再接続して新しいWebリクエストを送信します。ブラウザーが既存の接続やキャッシュを再利用する場合があるため、一度更新するだけでは新しい設定が反映された証拠になりません。
  4. [Host]に手動のドメインマッピングがある場合は、古いアドレスを参照していないか確認します。DNS設定を元に戻しても、設定ファイルに個別に指定した静的マッピングは自動で削除されません。

5. ルールを確認する:最初に一致するルールからFINALまで

Configモードでは、ファイルが存在するかどうかだけでなく、実際に有効なルールを確認します。通常、ルールは上から順に照合されるため、上位の大まかなルールが一致すると、下位の詳細なルールが適用されないことがあります。まずConfigで有効なファイルを確認し、次に[Rule]内で失敗するドメインに関係するルールと最終ポリシーを確認してください。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT

このコードは構文を示す例であり、日常利用の設定全体を置き換えるものではありません。example.comは例示用のドメインです。PROXYには利用可能なプロキシポリシーが必要です。設定ファイルで名前付きポリシーを使っている場合は、Homeのリストだけでなく、そのポリシーで実際に選択されているサーバーを確認してください。

ルールを修正するときは一度に一か所だけ変更し、同じ接続先で再確認してください。Proxyモードでも失敗する場合、FINALをプロキシに変えるだけではサーバーの認証エラーは解決しません。Configモードだけで失敗する場合は、一致したルールとそのポリシーを優先して確認します。テスト後、残す必要のない一時ルールは元に戻してください。

6. よくある質問と確認後の作業

確認後は、認証情報を含む設定ファイル全体ではなく、再現可能な症状を記録してください。ネットワークの種類、サーバーのプロトコル、Global Routing、接続できない対象、エラーが起きた段階を記録すると、「スイッチはオン」という情報だけより原因を絞り込みやすくなります。利用中のサービス提供元に問い合わせる場合は、パスワード、UUID、秘密鍵、サブスクリプショントークンを削除してください。

Connectivity Testで遅延が表示されるのに、Safariでページを開けないのはなぜですか?

テスト先とWebページの接続先が異なる場合があり、ルールやDNSの経路も異なることがあります。Homeで同じサーバーを選んだまま、Global Routing → Proxyで比較し、その後Configに戻って接続できないドメインに関係するルールを確認してください。遅延時間の数値だけで、すべての通信が使えると判断しないでください。

サブスクリプションの更新に成功すれば、サーバーも必ず正常ですか?

いいえ。Homeでサブスクリプションの更新に成功したのは、サブスクリプションの内容を取得できたことを示すだけです。更新後、現在選択されているサーバーが引き続き有効かを確認してからConnectivity Testを実行してください。既存のパラメーターが変更されていた場合は、利用中のサービス提供元に新しいパラメーターを確認します。サブスクリプションURLをサーバーアドレスとして入力しないでください。

Wi-Fiだけ接続できず、モバイル通信では使える場合は?

サーバーとGlobal Routingを固定し、2つのネットワークをそれぞれテストします。まずWi-Fiの認証を済ませ、そのネットワークのDNSとアクセス制限を確認してください。同じパラメーターがそのWi-Fiだけで失敗する場合は、設定や認証パラメーターを同時に書き換えるのではなく、ネットワークの違いを優先して調べます。

Proxyに切り替えたら使えるようになりました。このまま使い続けてもよいですか?

原因の切り分け結果として利用できますが、自分の振り分け要件に合っているか確認してください。Configに戻り、失敗するドメイン、ポリシーの接続先、FINALを確認します。ルールによる振り分けが必要な場合は、設定を修正してからConfigに戻してください。一時的な比較結果を、そのまま最終設定にしないでください。

App Storeでダウンロード