まず現在使えているDNS設定を基準として残し、必要に応じてリゾルバーや通信方式を選びましょう。Shadowrocketで自分の設定を使っている方向けに、システムDNS・カスタムDNS・DoHの違い、設定の確認手順、名前解決の失敗・ルールの適用・接続失敗を切り分けて解説します。
リゾルバーのアドレスとDNSの通信方式を分けて考える
DNSは、ドメイン名をIPアドレスなどのレコードに変換する仕組みです。システムDNSは、現在のネットワークやシステム設定から取得したDNS設定を指します。カスタムDNSは、使用するリゾルバーを指定する設定です。DNS over HTTPS(DoH)は、DNSクエリをHTTPSで送信する通信方式です。そのため、カスタムDNSとDoHはどちらか一方を選ぶものではなく、指定したリゾルバーへの問い合わせにDoHを使うこともできます。
選ぶ際は、まず「どのリゾルバーに問い合わせるか」と「どの経路で問い合わせるか」を確認します。リゾルバーを変更すると応答するアドレスが変わる場合があり、通信方式を変更するとクエリの経路や保護方法が変わります。どちらもWebサイト自体のHTTPS設定を変更するものではなく、接続先への接続を保証するものでもありません。
| 方式 | 通信経路 | まず確認する項目 |
|---|---|---|
| システムDNS | 現在のシステムから取得したDNS設定を使用します。実際の問い合わせ経路はトンネルや設定の影響を受けます。 | Wi-Fiとモバイル通信を切り替えたときに、応答結果やローカルネットワークのドメインが変わるか。 |
| カスタムDNS | 指定したリゾルバーに問い合わせます。通常のDNSでは、一般にUDPまたはTCPの53番ポートを使用します。 | アドレスに到達できるか、ポートが利用可能か、ローカルネットワークのドメインを解決する必要があるか。 |
| DNS over HTTPS | DNSメッセージをHTTPSでリゾルバーのエンドポイントに送信します。 | URL全体、証明書、エンドポイントのドメイン名を最初に解決できるか、実際の通信経路。 |
判断の基本:使える設定を基準にし、変更は一度に一つ
現在のネットワークで正常に名前解決できる場合は、まずシステムDNSでの結果を記録します。リゾルバーを固定したい場合はカスタムDNSに変更し、問い合わせを暗号化したい場合はDoHを検証します。リゾルバー、Global Routing、プロキシ設定を同時に変更すると、どの変更が結果に影響したか判断できません。
DNSの問い合わせとWebサイトへの接続は別々に確認する
一般的なドメインへのアクセスでは、アプリが接続先のアドレスを取得してから接続を確立します。実際にはキャッシュが使われたり、アプリ自体やプロキシ側で名前解決したりする場合があります。毎回すべての処理が端末上で行われるとは限りません。
切り分けでは、「名前解決の結果が返ったか」と「結果を取得した後に接続できたか」を分けて記録します。アドレスが返っていれば、その問い合わせには応答があったということです。ただし、そのアドレスが現在の通信経路で使えるか、接続先のポートに到達できるか、TLS接続が成功するかは、別途確認が必要です。ブラウザーでページを開けないというだけでは、DNS障害とは判断できません。
ポートに到達できることは、確認項目の一つにすぎません。DoHには正しいHTTPSパスと有効な証明書も必要です。通常のDNSアドレスのポートを53から443に変えても、自動的にDoHサービスになるわけではありません。また、DoHが暗号化するのはリゾルバーのエンドポイントまでの問い合わせ通信です。リゾルバーから問い合わせ内容が見えなくなるわけではなく、すべての通信が自動的にプロキシ経由になるわけでもありません。
変更前にバックアップし、DNS処理に現在の設定が関与しているか確認する
ShadowrocketのHomeで現在の接続状態とGlobal Routingを確認し、Settings → DNSでDNS設定を確認します。さらにConfigで現在使用中の構成ファイルを確認してください。構成ファイル内のDNS項目も実際の動作に影響する場合があります。Settingsにアドレスを入力しただけでは、最終的にどのリゾルバーが使われているか判断できません。具体的な項目や選択肢は、アプリ内の表示を確認してください。
- 現在の値を記録する。DNS項目、現在の構成名、Global Routingの選択内容を記録します。構成ファイルを変更する前にコピーを保存し、必要に応じて個別に戻せるようにします。
- 基準となる状態を確認する。現在のネットワークで、正常にアクセスできることが分かっている公開ドメインを開きます。ローカルネットワークのリソースが必要な場合は、実際に使用しているローカルドメインも比較対象にします。
- DNSだけを変更する。すでに利用しており、使用が認められているリゾルバーの設定を使い、サーバーやルール、プロトコルのパラメーターは同時に変更しません。
- 接続を再確立する。保存後に接続をいったん切断して再接続し、改めてアクセスします。既存の接続やキャッシュに以前の結果が残る場合があるため、ページを一度更新しただけで判断しないでください。
- ネットワークごとに確認する。実際に使用するWi-Fiとモバイル通信のそれぞれで検証します。Settings → On Demandを設定している場合は、テスト中に自動再接続が発生していないかも確認してください。
通常のDNS設定で確認する項目
- アドレス形式
- リゾルバーのIPアドレス
- ドキュメントの例
192.0.2.53- 一般的なポート
- UDP / TCP 53
- 確認するポイント
- 到達可能性、ローカルネットワークの名前解決の必要性、実際の通信経路
192.0.2.53はドキュメント用の例示アドレスです。実際のリゾルバーとしては使用できません。
DoH設定で確認する項目
- アドレス形式
- 完全なHTTPS URL
- ドキュメントの例
https://dns.example.com/dns-query- 一般的なポート
- HTTPS 443
- 確認するポイント
- パス、証明書、エンドポイントの初期名前解決、到達可能性
例示用のエンドポイントでは名前解決できません。実際には、利用中のDNSサービスから提供された完全なURLを使用してください。
DoHのエンドポイントにドメイン名を使う場合、HTTPS接続を確立する前にそのドメイン名のアドレスを取得する必要があります。これは初期名前解決またはbootstrapと呼ばれます。エンドポイントを解決する唯一の方法が、まだ確立されていない同じDoH接続に依存しないようにしてください。現在の設定にこの依存関係がある場合は、同じURLを何度も入力し直すのではなく、初期名前解決の設定を確認します。証明書の名前照合に失敗する可能性があるため、エンドポイントのドメイン名を安易にIPアドレスへ置き換えないでください。
DNSとルールによる振り分けの関係:アドレスが返ってもルール適用とは限らない
Home → Global RoutingのConfigは、現在の構成ルールに従って通信を処理します。ProxyとDirectは異なる全体ルーティングの選択肢であり、それぞれのテスト結果をConfigでのルール検証の代わりにはできません。Sceneを使用している場合は、そのSceneで実際に有効なルーティング設定も先に確認してください。DNSの問い合わせ経路と、接続先に適用されたポリシーは別々に確認します。
ドメインルールは利用可能なドメイン情報をもとに照合し、IPルールは接続先のアドレスをもとに照合します。IPによる判定が必要な通信では、名前解決の結果が後続のルール適用に影響する場合があります。ただし、すべてのルールで端末上のDNS問い合わせが必要という意味ではありません。アプリが直接IPアドレスに接続する場合、照合対象となる元のドメイン名が存在しないこともあります。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN-SUFFIX,example.com,PROXYは、example.comとそのサブドメインに一致するルールで、指定されたポリシーに従って処理します。IP-CIDR,192.0.2.0/24,DIRECT,no-resolveは、アドレス範囲を指定するルールの例です。no-resolveは、このルールとの照合のためにドメイン名の名前解決を新たに行わないことを示します。GEOIP,CN,DIRECTは、IPアドレスの国・地域データベースに基づいて照合します。ドメイン名の文字列で判定するものではありません。FINAL,PROXYは、前のルールに一致しなかった場合に適用されるフォールバックです。ルールの順序は結果に影響し、通常は上から順に確認されます。
ここでの説明は構文の概要です。例に使ったドメイン名やIPアドレス範囲はドキュメント用で、そのまま使える完全な設定ではありません。DNS変更後にアクセス先が別のIPルールに一致した場合は、まず応答アドレスを比較し、その後ルールの順序を確認してください。一つのドメインを直すために、すべてのルールを削除しないでください。リゾルバーへの問い合わせもプロキシ経由にする場合は、「プロキシ接続前の名前解決が必要なのに、その名前解決が同じプロキシに依存する」という循環依存がないかも確認します。
現象ごとに原因を切り分け、すべてのタイムアウトをDNSの問題と決めつけない
再テストのたびに、現在のネットワーク、問い合わせたドメイン名、応答またはエラー、その後の接続結果の4点を記録します。比較時は構成と接続先をそろえ、キャッシュにも注意してください。HomeのConnectivity Testは接続状況を確認する手掛かりになりますが、一度の遅延測定はダウンロード速度ではなく、すべてのドメインが正常に解決できる証明にもなりません。
DoHに変更したら、すべてのドメインがタイムアウトする場合は?
まず元のDNS設定に戻し、基準となる状態に復旧するか確認します。その後、Settings → DNSに入力したURL全体、エンドポイントのドメイン名が解決できるか、端末の時刻が正しいか、現在のルーティングでエンドポイントへの接続が妨げられていないかを確認してください。通常のWebページを開けても、指定したDoH経路が使えるとは限りません。
公開Webサイトは開けるのに、自宅のローカルドメインにアクセスできない場合は?
まず端末が対象のローカルネットワークに接続していることを確認し、システムDNSとカスタムDNSでの結果を比較します。一般向けのリゾルバーは通常、LAN内のプライベートなレコードを把握していません。公開リゾルバーを次々に切り替えるのではなく、必要なローカルDNSの経路を維持してください。また、通常のDNS名と.localを使うmDNS名は区別して確認します。
IPアドレスは返っているのにページが読み込み中のままです。DNSの問題ですか?
まず、その接続に適用されたルールとポリシーを確認し、続いて接続先のタイムアウトやTLSエラーを調べます。AレコードとAAAAレコードの両方が返っている場合は、IPv4とIPv6の経路がどちらも使えるか確認してください。一方のアドレス経路だけが失敗している場合、リゾルバー全体が機能していないとすぐに判断すべきではありません。
設定を変更したのに、結果が変わらないように見えるのはなぜですか?
設定を保存して接続を再確立し、開いているページを閉じてから再アクセスしてください。同時に、Configに関連するDNS設定が残っていないか確認します。アプリ内蔵のDoH、システムやアプリのキャッシュ、既存の長時間接続などにより、一度の更新では新しい設定が反映されたように見えない場合があります。該当するリクエストの記録も確認してください。
NXDOMAINは、リゾルバーがドメイン名は存在しないと応答したことを意味します。「応答が届かなかった」タイムアウトとは異なります。SERVFAILは、リゾルバーが処理を完了できなかったことを示し、上流サーバー、DNSSEC検証、その他の名前解決障害が原因の可能性があります。まずドメイン名の入力を確認し、同じドメインを基準となるDNS経路で問い合わせた結果と比較してください。異なるエラーをすべて「ネットワークが遅い」とひとまとめにしないでください。
検証後は、元に戻せる設定記録を保管する
最終的な選択は、実際のアクセス要件に合わせて決めます。システムDNSは現在のネットワークとの比較に適しています。リゾルバーを固定する方法は、問い合わせ先を明確に管理したい場合に向いています。DoHは、HTTPSでの問い合わせが必要で、エンドポイントに正常に接続できる環境に適しています。いずれの方式を使う場合も、一度の問い合わせ時間だけで判断せず、公開ドメイン、ローカルドメイン、現在のルールによる振り分けをあわせて確認してください。
- 設定の入手元を記録する。リゾルバーの設定値と用途を記録します。公開するスクリーンショットには、個人用のアドレス、認証情報、サブスクリプションの内容を表示しないでください。
- 自動更新を確認する。既存のサブスクリプションの更新とローカル構成の変更は別の操作です。更新後は関連設定を再確認し、更新による変化をDNSの不安定さと取り違えないようにします。
- 元に戻す手順を残す。元のDNS値とGlobal Routingの選択内容を記録します。問題が起きた場合は、まず基準の設定に戻してから一つずつ再テストします。
- 変更は一度に一つずつ検証する。ルールとDNSの両方を調整する場合は、2回に分けて保存とテストを行い、それぞれの結果を変更内容に対応させます。
ShadowrocketはAppleプラットフォーム向けのクローズドソースの有料アプリで、主にiPhoneとiPadで使用できます。その他のデバイスとの互換性とシステム要件は、App Storeの掲載内容をご確認ください。アプリは買い切りで、アプリの購入と通信サービスは別です。この記事は、利用者が自分の設定を用意していることを前提としています。ノードやサブスクリプションの提供・販売・推奨は行っていません。