自分の接続設定があり、名前解決の問題を調べたい方や、DNSの方式を変更したい方に向けた内容です。まずはシステムDNSを基準に動作を確認し、DNSサーバーを指定する必要があればdns-serverを変更します。暗号化されたDNSクエリを使う場合は、DoHのURLと接続可否を確認してください。変更は一度に一項目に絞り、ドメインへのアクセスと接続状態をそれぞれ確認します。
DNS・ルール判定・接続先を切り分ける
DNSはドメイン名を接続に使うアドレスへ変換します。Shadowrocketでのアクセスでは、ルール判定を経て、ルールに応じた接続先が選ばれることもあります。そのため、「Webページが開かない」原因をDNSだけに絞ることはできません。名前解決に成功していても、選択した接続先への接続に失敗する場合があります。一方、アドレス情報を必要とするルールでは、DNSの結果が判定に影響することもあります。
Homeで接続状態とGlobal Routingを確認します。Proxyは通信を選択中の接続経由にし、Directは直接接続します。Configは現在の設定にあるルールに従い、Sceneはシーン設定に応じて動作します。DNSを変更する前に、現在の状態を記録してください。状態の切り替えとDNS設定の変更を同時に行うと、どちらがアクセス結果に影響したのか判断しにくくなります。
ルールは種類ごとに確認しましょう。DOMAIN-SUFFIXはドメインの末尾、IP-CIDRはアドレス範囲で照合し、GEOIPはIPアドレスの地域判定に関係します。FINALは、それまでに一致しなかったリクエストを処理します。DNSの方式でルールを置き換えることはできません。たとえばdns-serverを別のアドレスに変更しても、FINAL,DIRECTが自動的にProxy接続へ変わるわけではありません。
3つの方式でできること
システムDNSは、最初の切り分けに使う基準として適しています。デバイスが現在のネットワークから受け取っているDNS設定を使うため、サーバーアドレスを手動で管理する必要がありません。Wi-Fiとモバイル通信を切り替えると、上流のDNS環境もネットワークに応じて変わることがあります。特定のネットワークでだけ特定のドメインが開かない場合は、それぞれのネットワークでの結果を記録して比較しましょう。
システムDNSとカスタムDNS
- システムDNS
- 現在のネットワークのDNS設定をそのまま使う
- カスタムDNS
- Configで接続可能なDNSサーバーアドレスを指定する
- 確認するポイント
- 同じドメインがWi-Fiとモバイル通信の両方で開けるか
問題を再現しやすくするには、テストするネットワークとGlobal Routingを固定します。
DNS over HTTPS
- 通信方式
- HTTPS経由でDoHサーバーにDNSクエリを送信
- アドレス
- サーバーが提供する完全なHTTPS URLを使用
- 確認するポイント
- 現在のネットワークからそのURLに接続できるか
DoHが暗号化するのはDNSクエリの通信です。すべての接続先が変わるわけではありません。
カスタムDNSは、DNSサーバーを明示的に指定したい場合や、異なる上流DNSの結果を比較したい場合に適しています。従来のDNSは通常53番ポートを使用します。DoHはHTTPS接続を使い、通常は443番ポートを使用します。ポートの違いは通信方式の違いを示すだけで、ドメインの名前解決に成功するかどうかはポートだけでは判断できません。
選ぶ順番:まず基準を確認し、変更は一つずつ
最初の確認ではシステムDNSを使い、同じドメインにアクセスします。DNSサーバーを固定する必要がある場合にのみdns-serverを設定してください。DoHを使う場合は、DoHサーバーに接続できるかも別途確認します。名前解決の失敗を、すぐに接続ルールの誤りと決めつけないでください。
Configでdns-serverとDoHを設定する
Configで現在使用中の設定を開き、それが有効な設定であることを確認してから、[General]セクションを編集します。変更前の内容を保存し、既存のルールやほかの設定も残してください。設定の提供元によっては手動変更が上書きされる場合があります。すでに利用中のサブスクリプションから設定を更新した場合は、更新後にこのセクションを再確認してください。
- Homeで現在の設定名とGlobal Routingを確認し、繰り返しテストできるドメインを一つ決めます。
- Configを開き、該当する設定の[General]を編集します。まずDNS関連の行だけを変更し、Ruleの内容は同時に変更しないでください。
- 保存後にHomeへ戻り、同じネットワークとルーティング状態で再度アクセスします。失敗した場合は元の値に戻し、設定内容が正しく保存されているか確認してください。
次の例は3種類の設定方法をそれぞれ示しています。置き換えて使う例であり、3つのdns-server行を同じ[General]セクションに重ねて設定するものではありません。システムDNSを使う場合は、次のように記述できます。
[General]
dns-server = system
DNSサーバーを指定する場合は、dns-serverに実際に利用できるDNSアドレスを設定します。以下のアドレスは項目の書式を示す例です。現在のネットワークで使えるかどうかは、実際に接続して確認してください。
[General]
dns-server = 1.1.1.1
DoHを使う場合は、doh-serverにサーバーが提供する完全なHTTPSアドレスを設定します。以下のexample.comは書式を示す例であり、利用可能なDoHサーバーではありません。実際に使う際は、利用できることを確認したアドレスに置き換え、アプリ内の最新の項目説明に沿って記述してください。
[General]
doh-server = https://example.com/dns-query
変更後の確認方法と失敗時の切り分け
確認は2段階に分けます。1段階目はDNSです。同じネットワークで対象ドメインを名前解決し、アクセス可能な結果が得られるか確認します。2段階目は接続です。アドレスが取得できた後、リクエストが想定どおりのルールに従い、正しい接続先に向かうか確認します。Webページを一つ試すだけでは、この2段階を区別できません。ブラウザのキャッシュ、サイトの状態、既存の接続が結果に影響することがあるためです。
- 変更前のネットワーク種別、Global Routing、選択中の設定、対象ドメインを記録します。HomeでConnectivity Testを実行し、接続状態の基準を残してください。
- DNS設定を一項目だけ変更して保存し、いったん切断してから再接続します。まず、以前から安定して開けるドメインにアクセスし、次に問題を調べたいドメインにアクセスして、それぞれの結果を記録します。
- 両方とも失敗する場合は、[General]の記述、DNSアドレス、またはDoH URLへの接続可否を確認します。特定のドメインだけ失敗する場合は、そのドメインに適用されるルールとサービス自体を確認してください。
- 元の設定に戻して同じテストを繰り返します。元に戻した直後に正常になれば、新しい設定をさらに調べる価値があります。戻しても失敗する場合は、接続、ネットワーク、ルールの各段階に戻って変化を確認してください。
IP-CIDRやGEOIP関連のルールでは、DNSの結果とルールの照合順に注意してください。ルールは上から順に評価され、先に一致したルールが後続の処理に影響します。FINALは最後の受け皿であり、すでに一致したルールを修正するものではありません。DNSの項目だけでなく、Configのルールセクションと、HomeでConfigが選択されているかも確認してください。
確認のポイント:同じ条件で再現する
結果を比較するときは、ネットワーク、設定、Global Routing、テスト対象のドメインを固定し、1回につきDNS設定を一項目だけ変更します。Wi-Fiの切り替え、設定の更新、ルールの変更を同時に行うと、結果の原因を特定できません。
よくある質問と注意点
DoHのURLを設定したらWebページが開かなくなったのはなぜですか?
まず、設定したURLが実際のサーバーから提供された完全なアドレスであり、記事中のexample.comの例ではないことを確認してください。次に元のDNS設定へ戻し、同じドメインにアクセスします。元に戻すと正常になる場合は、現在のネットワークからDoHサーバーに接続できるか、設定が使用中のConfigに保存されているかを確認してください。
システムDNSならアクセスできるのに、カスタムDNSでは失敗します。ルールを変更すべきですか?
まずルールは変更しないでください。HomeのGlobal Routingを変えずに、dns-serverに利用可能なアドレスが設定されているか確認し、同じネットワークで再試行します。名前解決に成功しても接続が想定どおりにならない場合に、DOMAIN-SUFFIX、IP-CIDR、GEOIP、FINALの照合順を確認してください。
DNSを切り替えても、以前のWebページが変わらないように見えるのはなぜですか?
いったん切断して再接続し、新しくアクセスしてください。既存の接続やキャッシュによって、以前の状態が表示され続けることがあります。テストでは、まだアクセスしていない対象を一つ選び、安定して開けるドメインと比較しましょう。同じページを何度も再読み込みするだけでは判断できません。
サブスクリプションを更新したら、手動で設定したdns-serverが消えました。
Configで現在有効な設定と、その[General]の内容を確認してください。更新によって設定テキストが置き換わると、手動変更が消えることがあります。元の設定内容を記録に残し、自分の設定管理方法に合わせて、どの設定に変更を加えるか判断してください。
ShadowrocketはAppleプラットフォーム向けの有料アプリで、App Storeから入手できます。主な利用端末はiPhoneとiPadです。その他の対応端末やシステム要件はApp Storeの掲載内容をご確認ください。アプリの購入と接続サービスは別のものです。この記事ではアプリ内のDNS設定のみを扱い、あらかじめ自分の接続設定を用意していることを前提とします。