自分のサブスクリプションをすでに読み込み、DNSを調整したい方に向けた内容です。まず名前解決と通信の経路を切り分け、Settings → DNSと現在有効なConfigを確認します。その後、同じドメイン・同じネットワークで一度に一項目だけ変更し、結果を比較します。systemを維持する場合、独自のDNSアドレスを指定する場合、DoHがタイムアウトしたときに確認すべき箇所がわかります。
1. DNSを変更する前に接続状況を確認
ShadowrocketはAppleプラットフォーム向けの有料アプリで、主にiPhoneとiPadで利用できます。入手先はApp Storeのみです。製品ページでデベロッパのShadow Launch Technology LimitedとアプリID 932747118を確認できます。アプリは買い切りで、システム要件やユニバーサル購入の対応状況はApp Storeの記載をご確認ください。アプリの購入と通信サービスの契約は別です。この記事では、利用中のサービス事業者とサブスクリプションがあることを前提に説明します。
DNSはドメイン名をIPアドレスに変換するもので、その後の接続成功を保証するものではありません。ウェブページが開かない原因は、名前解決のタイムアウトだけでなく、アドレス取得後の接続先ポート、プロキシ接続、TLSハンドシェイクの失敗なども考えられます。問題をDNSだけに限定しないよう、まず現在の設定を記録しておきましょう。
- Homeで現在使用している接続先を確認します。テスト中は同じ接続先を使い、サブスクリプションの更新やプロトコルの切り替えは行わないでください。
- 現在のGlobal Routingの選択内容を記録します。Configを使っている場合は、現在有効なConfigも記録し、比較中は同じ状態を保ちます。
- Settings → DNSの現在の設定を記録し、有効なConfigの
[General]にdns-serverがすでに設定されていないか確認します。 - Settings → On Demandを確認します。テスト中は接続状態を一定に保ち、自動接続の条件が変わって比較できなくなるのを防ぎます。
2. システムDNS・カスタムDNS・DoHの違い
「システムDNS」は現在のネットワークが提供する、またはシステムが管理するリゾルバーを使う方法です。「カスタムDNS」は通常、リゾルバーのアドレスを明示的に指定します。DNS over HTTPS(DoH)は問い合わせの転送方式を指します。カスタムアドレスにDoHを使うこともできるため、この3つは完全に独立した方式ではありません。
| 方式 | 入力形式 | 適した状況 | 確認ポイント |
|---|---|---|---|
| システムDNS | system | 現在のネットワークで名前解決が正常な場合や、LAN内のホスト名にアクセスする場合。 | Wi-Fiを切り替えると、ネットワークが提供するリゾルバーも変わる場合があります。 |
| カスタムDNS(従来方式) | 利用可能であることを確認したリゾルバーのIPアドレス | リゾルバーを固定する必要があり、接続中のネットワークからアクセスできる場合。 | 通常はUDP 53を使用し、一部の問い合わせではTCP 53を使用します。通信自体は暗号化されません。 |
| DoH | 完全なHTTPSエンドポイント | 利用可能なDoHサービスのアドレスがあり、HTTPSで接続できる場合。 | 通常はTCP 443を使用します。ホスト名、証明書、パス、初期名前解決を確認してください。 |
DoHが暗号化するのは、デバイスと選択したDNSサービス間の問い合わせ通信です。リゾルバーから問い合わせ内容が見えなくなるわけではなく、ウェブ通信の経路が自動で変わることもありません。接続開始までの処理が増える場合もあります。速度はネットワーク、キャッシュ、エンドポイントの状態によって異なるため、名称だけで速いとは判断できません。
要点:名前解決が正常なら、まず現在の設定を維持
現在の名前解決でタイムアウトや不自然な応答が発生する場合、または問い合わせの転送方式を変更する必要がある場合に限り、DNSだけを変更してください。ルーティングモードや接続先を同時に変更しないでください。
3. SettingsとConfigでDNSを設定する
Settings → DNSで現在のDNS設定を確認します。システムの名前解決を使う場合はsystemを指定します。従来型DNSを使う場合は、利用できることを確認済みのリゾルバーアドレスを入力します。DoHの場合はサービス提供元が案内する完全なHTTPSエンドポイントを入力してください。正しいパスを含め、ウェブサイトのトップページやサブスクリプションのアドレスをDNSアドレスとして入力しないでください。
現在のConfigでdns-serverが明示的に設定されている場合は、Configで有効な設定を開き、[General]を確認してください。以下の2つのカードは入力形式を説明するためのものです。例示のアドレスは文書用に予約されており、利用可能なDNSサービスではありません。実際の設定にそのまま保存しないでください。
従来型DNSの入力形式
- 確認場所
- Settings → DNS
- システムによる名前解決
system- アドレス形式の例
192.0.2.53- 設定項目
dns-server
192.0.2.53は文書用の例示アドレスです。実際には、アクセスできることを確認したリゾルバーを使用してください。
DoHの入力形式
- アドレス形式の例
https://dns.example.com/dns-query- 通信要件
- HTTPSと有効な証明書
- パスの指定
- エンドポイント提供元が案内する完全なパスを保持
- 事前に必要な条件
- エンドポイントのホスト名を解決でき、接続経路に到達できること
dns.example.comは文書用の例示ドメインです。実際の問い合わせには使用しないでください。
既存のConfigでシステムによる名前解決を明示的に使う場合は、そのConfigの[General]セクションに以下の項目が含まれているか確認してください。例を貼り付けるために同名のセクションを追加したり、既存のルールやほかのパラメーターを削除したりしないでください。
[General]
dns-server = system
- Settingsで変更した内容、または編集中のConfigを保存します。Configで、先ほど確認した設定が有効になっていることも確認してください。
- Homeで接続を切断してから再接続し、変更後の設定で新しい接続セッションを開始します。再接続しても、すべてのアプリのキャッシュが消去されるわけではありません。
- 同じドメインで再テストします。新たなタイムアウトが発生した場合は、DNSアドレスを追加し続けるのではなく、記録しておいた元の値に戻してください。
4. DoHエンドポイントとルールによる振り分けを切り分ける
DoHでドメイン名形式のエンドポイントを使う場合、HTTPS接続を確立する前に、デバイスがエンドポイントのホスト名に対応するアドレスを取得する必要があります。これは初期名前解決と呼ばれることがあります。現在の名前解決に問題があり、新しい設定もDoHエンドポイントの検索に同じ名前解決を必要とする場合、「DoHに変更したらすべてのドメインが開かなくなった」という状況が起こり得ます。まず動作していた名前解決の状態に戻してから、エンドポイントを確認してください。
Global Routingは接続の処理方法を決め、DNS設定は名前解決の結果を取得する方法を決めます。互いに置き換えることはできません。問題を切り分ける際は、以下の違いを確認し、特定のウェブページを開くためだけにConfig全体の処理方法を変えたままにしないでください。
- Config:有効なConfigのルールに従って処理します。
DOMAIN-SUFFIXはドメインのサフィックスで照合します。IP-CIDRとGEOIPはアドレスの判定に関係します。ローカルでの名前解決が必要かどうかは、個々のルール設定や処理経路にも左右されます。 - Proxy:このモードに応じて通信を処理しますが、すべてのDNS問い合わせがプロキシ経由になるとは限りません。DNS設定、エンドポイントへの経路、実際の記録も確認してください。
- Direct:直接接続を行いますが、現在のネットワークのDNSが必ず使えるという意味ではありません。直接接続できるかどうかと、名前解決に成功するかどうかは別々に確認してください。
- Scene:設定したSceneの選択に関係する項目で、DNSの修復機能ではありません。実際に適用されているSceneを確認し、テスト条件が一致しているか判断してください。
5. DNSが反映されたか確認する
確認では、リゾルバーが応答したか、どのアドレスが返されたか、その後の接続が成功したかを分けて考える必要があります。ウェブページが開いたことや、一度だけ応答が速くなったことだけでは、どのリゾルバーが使われたかはわかりません。キャッシュにより、新しいDNS問い合わせ自体が発生していない場合もあります。
- 条件を固定:同じWi-Fiまたはモバイルネットワーク、同じ接続先、同じGlobal Routingの選択内容、同じConfigを使います。まず変更前の状況を記録してください。
- 問い合わせ対象を決める:テストする権限があり、状態がわかっているドメインを使います。まずAを確認し、次にAAAAを確認してください。AAAAの問い合わせ、またはIPv6接続に失敗した場合は、問題を分けて記録します。
- 名前解決の結果を確認:現在の画面にDNS問い合わせツールがあれば、結果、所要時間、エラーを記録します。利用可能なログも確認し、エンドポイントへの接続失敗、名前解決のタイムアウト、証明書エラーがないか調べてください。
- キャッシュを除外:既存の結果はアプリ、システム、またはリゾルバーのキャッシュによるものかもしれません。テストするアプリを終了して再度開くか、自分が管理するドメインで、レコードを設定済みの別名を使ってください。存在しないランダムなドメインを正常な名前解決のサンプルとして扱わないでください。
- 通信を確認:AまたはAAAAの結果を得たら、該当する接続のルートとエラーを確認します。名前解決に成功してHTTPSがタイムアウトする場合は、DNSを繰り返し変更せず、接続先への通信を調べてください。
| 確認された状況 | わかること | 次の手順 |
|---|---|---|
| 問い合わせがタイムアウトし、結果が返らない | 名前解決が完了していません。どの段階で失敗したかは、まだ判断できません。 | 元のリゾルバーに戻し、エンドポイントへの到達性と接続中のネットワークを比較します。 |
| NXDOMAINが返る | リゾルバーが、その名前は存在しないと応答しています。接続のタイムアウトとは異なります。 | 綴り、ドメインのレコード、内部ドメインに必要な名前解決の範囲を確認します。 |
| アドレスは返るが、ウェブページがタイムアウトする | 少なくとも一度、DNSによるアドレス検索は完了しています。 | ルールの適用結果、接続先ポート、その後の接続ログを確認します。 |
| 2回目のアクセスだけ速くなる | キャッシュや接続の再利用が関係している可能性があります。 | 初回と再アクセスをそれぞれ記録し、DoHが必ず速いとは判断しないでください。 |
要点:単に「開かない」と記録するより、エラーが起きた段階を残す
毎回、ネットワーク、名前解決方式、AまたはAAAAの結果、その後の接続エラーを最低限記録してください。リゾルバーを特定できる記録がない場合は、「状況が改善した」とだけ報告し、問い合わせ経路が証明されたとは判断しないでください。
6. DNS設定でよくある問題
DoHに変更したらページが一つも開かなくなりました。まず何を戻せばよいですか?
まずSettings → DNS、または現在のConfigに記録した元の値に戻し、再接続してください。正常に戻ったら、DoH URLのホスト名、完全なパス、初期名前解決、証明書エラーを順に確認します。変更を再び加えるときは一度に一項目だけにしてください。
一般のウェブサイトは開くのに、自宅のデバイス名が解決できない場合は?
その名前が自宅のルーターや内部DNSから提供されているか確認してください。パブリックDNSは通常、LAN内のレコードを知りません。まずsystemに戻して比較してください。内部の名前解決にはmDNSが関係する場合もあるため、デバイス検出の問題をすべて一般的なDNSの問題として扱わないでください。
DNSアドレスを複数入力すれば、必ず安定しますか?
必ずしもそうではありません。リゾルバーごとに応答、応答時間、内部ドメインの解決可否が異なる場合があります。また、入力順に厳密にフォールバックするとも限りません。問題の切り分けでは、まず利用可能と確認したリゾルバーを一つ使い、結果を記録してから、ほかのリゾルバーを追加する必要があるか検討してください。
Settingsを変更したのに、Configを再度有効にすると設定が違うのはなぜですか?
Configに戻り、現在有効なファイルの[General]とdns-serverを確認して、別のリゾルバーが指定されていないか調べてください。Configがリモート更新される場合は、更新後に項目が元に戻っていないかも確認します。実際に反映されていない設定を何度も変更しないよう、変更箇所を記録しておきましょう。