遅延テストに数値が表示されても、Webサイトへの接続が正常とは限りません。利用中のサービスやサブスクリプションがあり、Shadowrocketに接続できるのにWebサイトが開けない場合は、失敗したドメイン名とネットワークを記録し、DNSの応答、DNSリクエストの経路、Global Routingの順に確認します。設定を一つずつ比較し、ドメイン不存在、名前解決のタイムアウト、ルールの振り分けミス、Webサイトへの接続障害を切り分けます。
遅延テストが正常でも、確認できるのはテスト先の応答だけ
Shadowrocketの遅延テストと、ブラウザでWebサイトを開く操作は別のものです。テスト方法によって確認できる範囲も異なります。接続先のポートから応答があっても、プロキシ認証、対象ドメインの名前解決、TLSハンドシェイク、Webページのリソース読み込みが成功したとは限りません。HTTPリクエストを含むテストでも、そのテスト先にその時点で接続できたことを示すだけで、実際に開けないWebサイトの確認にはなりません。
この流れはアクセスに必要な主な段階を示したもので、すべてのプロトコルが必ずこの順序で動作するわけではありません。プロキシサーバーのアドレスにドメイン名を使う場合は、その名前も先に解決する必要があります。また、接続先Webサイトのドメイン名をリモート側で解決する場合もあります。まず「サーバーのアドレス」と「Webサイトのアドレス」のどちらで問題が起きているかを切り分けてから、変更箇所を判断してください。
- すべてのWebサイトが開けない:接続が確立しているか、プロキシサーバーのアドレスを解決できるか、現在のネットワークでWeb認証が必要かを確認します。
- 特定のドメインだけ開けない:完全なホスト名を記録し、入力ミス、DNSの応答状態、そのドメインに適用されるルールを確認します。
- ページの文字は表示されるが画像が出ない:画像などのリソースが使う別のドメインも確認します。アドレスバーに表示されたドメインだけでは不十分です。
状況を記録してから、条件を一つだけ変えて比較する
調査中は元の設定を残し、サーバー、DNS、ルールを同時に変更しないでください。以下ではiPhoneを例に説明しますが、iPadでも同じ考え方で確認できます。テストには、ユーザー自身が用意したサーバーとサブスクリプションを使用してください。サブスクリプションを更新できても、配信元のアドレスを読み取れたことを示すだけで、個々のサーバーやすべてのWebサイトに接続できるとは限りません。
- Homeで選択中のサーバー、接続スイッチの状態、Global Routingの選択内容を記録します。Configでは、現在有効になっている構成ファイルを確認します。
- 開けないURLのホスト名、発生時刻、Wi-Fiかモバイル通信か、ブラウザに表示されたメッセージを記録します。記録を共有する前に、サブスクリプションのURL、パスワード、トークンを隠してください。
- 接続をオフにし、現在のローカルネットワークから通常直接アクセスできるWebサイトを試します。それでも開けない場合は、ローカルネットワークやWeb認証を先に確認してください。
- 同じサーバーとWebサイトを使って再接続し、もう一度アクセスします。設定を変更するたびに古いタブを閉じ、新しいタブで試して、既存の接続による影響を減らします。
- 必要に応じてWi-Fiとモバイル通信を一度比較しますが、DNSは同時に変更しないでください。ネットワークを切り替えたときの違いから、ローカルルーターや通信事業者のネットワークの影響を判断できます。
DNS設定ごとの役割
Settings → DNSでアプリのDNS設定を確認し、Configで現在の構成にある[General]を確認します。構成によっては、DNSサーバー、名前解決の方針、ドメインごとの指定結果が同時に関係します。実際に有効な構成を確認してください。入力欄にアドレスがあるだけで、すべてのリクエストがそのアドレスを使うとは限りません。
| 項目 | 役割 | 確認ポイント |
|---|---|---|
| System DNS | 現在のシステムまたはネットワークが提供するDNSを使用します。 | Wi-Fiを切り替えると名前解決の環境も変わることがあります。固定のパブリックDNSアドレスではありません。 |
dns-server | 構成ファイル内のDNSサーバー設定です。 | アドレスの入力ミスや形式だけでなく、リクエストがサーバーに届くかも確認します。 |
| DNS over HTTPS | DNSクエリをHTTPSで送信します。通常はTCP 443を使用します。 | 接続先のエンドポイントにアクセスできることに加え、証明書の検証も必要です。エンドポイントにドメイン名を使う場合は、最初の名前解決も関係します。 |
| 通常のDNS | 通常はUDP 53を使い、状況によってはTCP 53を使います。 | 現在のネットワークが該当する通信を制限していないか、応答がタイムアウトしていないかを確認します。Webサイトが使用するポート443への接続とは別です。 |
[Host] | 指定したホスト名に静的なアドレスを割り当てます。 | 古いアドレスが通常の名前解決を迂回し、ドメイン名を解決できてもWebサイトには接続できない原因になることがあります。 |
たとえば、構成ファイルの次の1行はシステムDNSを使う設定を示します。これは構文の例であり、既存の設定を置き換えるための完全なファイルではありません。変更前に元の値を保存してください。ユーザー自身が利用するサービス事業者から提供された構成の場合は、DNSに関する設定内容を確認してから、一部だけを変更してテストします。
[General]
dns-server = system
結論:名前解決に関する変数は一度に一つだけ変更する
サーバー、Global Routing、対象ドメインをそのままにして、現在のDNS設定とシステムDNSを比較します。設定変更に合わせて障害が再現する場合は、名前解決サービスとリクエスト経路をさらに調べます。
応答状態からDNSエラーを3種類に切り分ける
ブラウザの「サーバーが見つかりません」という表示だけでは、原因を特定できないことがほとんどです。利用できる接続ログや診断結果がある場合は、DNSの応答状態、クエリしたドメイン名、タイムアウトの情報を確認してください。以下は一般的なDNSの状態や診断用語です。Shadowrocketのすべての画面に、これらの文言がそのまま表示されるという意味ではありません。
エラー:NXDOMAIN
原因と対処:名前解決サーバーが、照会されたドメイン名は存在しないと応答しています。まず完全なホスト名と入力ミスを確認し、別の名前解決経路でも比較して、実際に存在しないのか、特定の名前解決サーバーによる異常な応答なのかを切り分けます。
エラー:SERVFAIL
原因と対処:名前解決サーバーがクエリを完了できませんでした。上位DNSサーバーの障害や検証エラーなどが考えられます。ドメイン名と発生時刻を記録し、利用可能な別の名前解決経路で再テストします。繰り返し発生する場合は、記録を利用中のサービス事業者に提示してください。
エラー:timeout
原因と対処:制限時間内にクエリへの応答がありませんでした。DNSサービスのアドレスと通信経路を確認し、同じ設定のままWi-Fiとモバイル通信を切り替えて、特定のネットワークだけでタイムアウトするか調べます。
「AAAAレコードがない」状態と「ドメイン名が存在しない」状態は区別してください。AAAAはIPv6アドレス、AはIPv4アドレスに対応します。ドメインにAレコードしかなくても、必ずしも問題ではありません。アドレスが返されているのに、その後の接続が止まる場合は、DNSを繰り返し変更せず、アドレスファミリーの到達性、ルーティング、TLSを確認します。
- A、AAAA、その他のどのタイプを照会したか記録し、異なるクエリ結果をそのまま比較しないようにします。
- プライベートアドレスや想定と異なるアドレスが返された場合は、アドレスの見た目だけで判断せず、ローカルネットワークの用途と静的マッピングを確認します。
- 「HTTPSのURLをIPアドレスに置き換える」方法だけで検証しないでください。証明書、SNI、仮想ホストが元のドメイン名に依存している場合があります。
Global RoutingでDNSの問題とルールの問題を切り分ける
Home → Global Routingで、Configは現在の構成に従って通信を処理し、Proxyは対象の通信をプロキシ経由にし、Directは対象の通信を直接接続します。モードを切り替えると原因の特定に役立つことがありますが、DNSだけを切り替える操作ではありません。接続先への経路やリモートで名前解決される可能性なども変わる場合があります。
- まずConfigの状態で障害を再現し、ドメイン名と適用されたルールまたはポリシーを記録します。
- 同じサーバーを使ったまま、一時的にProxyへ切り替えて同じドメインにアクセスします。開けるようになった場合は、Configの振り分けルールと選択中のポリシーを優先して確認します。ただし、これだけでDNSが正常だとは断定できません。
- 現在のローカルネットワークから通常直接アクセスできる接続先は、一時的にDirectで比較できます。接続先自体にローカルネットワークからアクセスできない場合、Directで失敗してもDNS設定に問題があるとは限りません。
- 比較が終わったら元のモードに戻します。Sceneを使用している場合は、現在のシーンで実際にどの接続動作が選ばれているかを確認し、シーンの変化が比較に影響しないようにします。
以下はルール構文の例です。example.comは例示用のドメインで、診断サービスではありません。DOMAIN-SUFFIXはドメインのサフィックス、IP-CIDRはアドレス範囲、GEOIPはIPアドレスの地理情報、FINALは前のルールに一致しなかったリクエストに適用されます。ルールは上から順に確認されます。アドレス関連のルールでは名前解決の結果も関係する場合があるため、最後の行だけを見て判断しないでください。
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
no-resolveは、該当するアドレスルールとの照合のために追加のドメイン名前解決が行われるのを防ぐ指定です。「すべてのDNSの問題を修復する」設定ではありません。ドメインが前のルールによって利用できない経路に送られている場合、DNSだけを変更しても結果は変わらないことがあります。まず適用されたルールを確認し、そのルールのポリシーや順序を調整してください。
よくある質問:キャッシュ、サブスクリプション、接続の復旧
DNSを変更してもWebサイトが開けないのはなぜ?
まず、変更した設定が現在有効な構成に反映されているか確認し、接続を再確立して新しいタブでWebサイトを開きます。アプリやシステムにキャッシュや古い接続が残っていることがあります。アドレスが返されているのに接続できない場合は、DNSアドレスを追加し続けるのではなく、ルール、外向き接続、TLSを確認してください。
サブスクリプションを更新できれば、DNSに問題はない?
いいえ。サブスクリプションのアドレス、プロキシサーバー、接続先Webサイトでは、異なるドメイン名や通信経路が使われることがあります。Homeでサブスクリプションの更新結果とサーバーの状態をそれぞれ確認し、開けないホスト名を個別に調べてください。すでにある構成は保持し、更新によって新たなテスト条件が加わらないようにします。
Wi-Fiだけで失敗する場合、サーバーを変更するべき?
サーバーとDNSはそのままにして、モバイル通信に切り替えて再テストします。そのWi-Fiだけで失敗する場合は、Web認証、ルーターが提供するDNS、ネットワークの制限を確認してください。原因が分かるまでは、プロトコルとサーバーを同時に変更する必要はありません。
証明書エラーもDNSの問題?
必ずしもそうではありません。証明書エラーは通常、TLSの確認段階まで進んだことを示します。デバイスの日時、対象ドメインと証明書の一致を確認してください。誤ったアドレスに名前解決された結果、証明書エラーが起こることもありますが、証明書の検証を無効にして問題を隠さないでください。
復旧後は同じ条件で再テストする
Webページを一度開けただけでは、そのときに成功したことしか分かりません。復旧後は、最初に失敗したネットワーク、元の対象ドメイン、普段使うモードで再テストし、ページ内の関連リソースもすべて読み込まれるか確認します。トラブル対応では、変更した設定の数ではなく「どの条件を変えたら復旧したか」を記録することが重要です。
- 動作設定を元に戻す:一時的に切り替えたGlobal Routingを元に戻し、必要に応じてSettings → On Demandも元の設定に戻します。
- 構成を確認する:Configで正しいファイルが有効になっていることを確認し、テストのために追加した静的マッピングや一時ルールが不要になった場合は削除します。
- 調査記録を残す:ネットワークの種類、失敗したドメイン名、DNSの応答状態、変更内容、再テストの結果を記録します。利用中のサービス事業者に共有するときは、認証情報を隠してください。
- 次に調べる箇所を見極める:正しいアドレスが返され、DNSも正常に応答しているのに接続できない場合は、サーバーの稼働状況、接続先ポート、TLSを確認します。すべての障害を名前解決のせいにしないでください。
結論:失敗した段階に応じて次の確認箇所を決める
応答がなければDNSリクエストの経路を、存在しないという明確な応答があればドメイン名を、アドレスが返されていれば接続とルールを確認します。各手順で比較結果を記録すれば、設定を何度も上書きせずに原因を絞り込めます。