ShadowrocketのDNS設定ガイド:システムDNS・カスタムDNS・DNS over HTTPSの選び方

システムDNS、カスタムDNS、DNS over HTTPSの違いを比較し、ConfigのDNS設定方法と動作確認の手順を解説します。

この記事の概要

この記事は、Shadowrocketに自分のサブスクリプションを追加済みで、ドメイン名の名前解決を確認したい方を対象としています。まず、DNSサーバーのアドレス、問い合わせの転送方式、接続時の出力先を区別します。次に、現在の設定にある[General]とdns-serverを使って一項目ずつ変更し、同じドメイン・同じネットワークで結果を記録して確認します。Webページが開くかどうかだけで、DNSの設定が反映されたと判断しないでください。

1. DNS設定で変わること・変わらないこと

ShadowrocketのDNS設定は、ドメイン名を後続の接続に必要なIPアドレスへ変換する名前解決に関わります。システムDNSは、現在のネットワークでシステムが利用するDNSサーバーを使う方式です。カスタムDNSは、DNSサーバーのアドレスを明示的に指定する方式です。DNS over HTTPSは、DNS問い合わせをHTTPSで送信する方式を指します。この3つは完全に排他的な分類ではありません。手動で指定したDNSサーバーを、DNS over HTTPSで利用することもできます。

DNSの名前解決と、プロキシ経由の接続は別の処理です。IPアドレスが返されたからといって、その後の接続で必ずProxyが使われるわけではありません。暗号化DNSを使っても、すべてのDNS問い合わせが既存のサーバーを経由するとは限りません。実際の動作は、現在の設定、Global Routing、DNS問い合わせ自体のルーティング、対象ドメインをリモート側で解決するかどうかによっても変わります。

ドメイン名のリクエスト 名前解決経路の選択 アドレスの取得 接続ルールの照合 接続先

この流れは各処理の役割を区別するためのもので、接続のたびにローカルで問い合わせが完了することを意味しません。ドメイン名が分かっている場合は、DOMAIN-SUFFIXなどのドメインルールをそのまま照合できます。また、接続によってはドメイン名の処理をリモート側に任せる場合もあります。IP-CIDRやGEOIPなど、IPアドレスの情報を使うルールは、実際の名前解決結果やルールのオプションとあわせて確認してください。

2. システムDNS・カスタムDNS・DNS over HTTPSの選び方

まずは安定して動作する設定を基準にします。現在のネットワークのDNSで必要なドメインを正常に解決できるなら、システムDNSはWi-Fi、モバイル通信、社内・家庭内ネットワークに合わせて使いやすい方法です。特定のDNSサーバーを調べたい場合や、問い合わせ先を固定したい場合はカスタムDNSを試します。端末からDNSサーバーまでの問い合わせを暗号化したい場合は、DNS over HTTPSを検討してください。

設定方式 問い合わせ先と転送方式 確認に適したケース 主な制約
システムDNS システムが現在利用しているDNSサーバーを使用します。転送方式は実際のネットワーク設定によって異なります。 ネットワークの標準設定を維持し、内部ドメインやログインが必要なネットワークを確認するときに適しています。 ネットワークを切り替えると、DNSサーバーや名前解決の結果が変わることがあります。
カスタムDNS(従来方式) IPアドレスを指定します。通常のDNSはUDP 53を使用し、必要に応じてTCP 53を使います。 デフォルトのDNSサーバーと指定したDNSサーバーについて、到達性と応答を比較するときに適しています。 アドレスを明示しても、通信は暗号化されません。
DNS over HTTPS HTTPS形式の問い合わせ先を指定します。通常はポート443を使用します。 暗号化された問い合わせ経路と、接続先の到達性を確認するときに適しています。 HTTPS接続、証明書の検証、問い合わせ先の稼働状況に依存します。
53
従来方式のDNSで使われる標準ポート。UDPまたはTCPを使用
443
HTTPSのデフォルトポート。一般的なDoHエンドポイントのポート
2種類
一般的なアドレスレコード:AはIPv4、AAAAはIPv6

DNS over HTTPSが保護するのは、端末からDNSサーバーまでの問い合わせ通信です。DNSサーバーは問い合わせ内容を処理できます。また、Webサイトへのアクセスに使うHTTPSの代わりにはならず、遅延が短くなる保証もありません。暗号化接続の初回確立、ネットワークによる遮断、DNSサーバーまでの距離、キャッシュの状態などで、問い合わせ時間は変わります。

結論:名称や速度ではなく、解決したい問題に合わせて選ぶ

デフォルトの名前解決が正常なら、まずはその設定を維持します。問題がある場合は、DNSサーバーを1つだけ指定して試します。問い合わせの暗号化を確認するときは、ほかの設定を変えずにDoHへ切り替えてください。

3. Configでdns-serverを変更する

まずHome → Global Routingで現在のモードを確認し、Configで実際に有効な設定を確認します。以下の検証手順ではConfigモードを基準にします。ProxyとDirectでは接続処理が変わります。Sceneを使っている場合は、ネットワーク切り替え時に基準が変わらないよう、現在のSceneに対応する設定とルーティング状態を先に確認してください。

  1. Configで現在使っている設定を確認し、元の設定を複製して保存します。現在のdns-serverの値も記録しておきます。
  2. 対象の設定の編集メニューを開き、Edit Plain Textに進みます。既存の[General]セクションを探し、同じ名前のセクションを重複して追加しないでください。
  3. 既存の[General]内でdns-serverの値を置き換えます。以下の3つは選択肢であり、同じフィールドを3行まとめて貼り付けないでください。
  4. 保存後、変更した設定が有効になっていることを確認して再接続し、新しいドメインへのアクセスを試します。古い接続を再利用しているページを更新するだけでは不十分です。

システムDNSの設定例

[General]
dns-server = system

systemはシステムが提供するDNSサーバーを使う指定であり、特定のアドレスではありません。Wi-Fiとモバイル通信を切り替えると、システムが取得するDNS情報も変わることがあります。社内や家庭内ネットワークでのみ使える内部ドメインがある場合、パブリックDNSに変更すると名前解決できなくなる可能性があります。

従来方式のDNSアドレスを指定する

[General]
dns-server = 1.1.1.1

ここに示すアドレスはフィールドの書式例であり、DNSサービスの推奨や速度を示すものではありません。複数のDNSサーバーを指定する場合は、dns-server = 1.1.1.1, 1.0.0.1のようにカンマで区切ります。ただし、リストの順番が「1つ目に失敗したら2つ目を問い合わせる」動作を保証するわけではありません。問題を切り分けるため、最初のテストではDNSサーバーを1つだけ指定してください。

DNS over HTTPSの設定例

[General]
dns-server = https://1.1.1.1/dns-query

このエンドポイントは、URL全体の記述例です。DoHアドレスには、DNSサービスが実際に提供するHTTPS問い合わせエンドポイントを指定してください。一般的なWebサイトのトップページはDNSサーバーとして使えません。IPアドレス形式のHTTPSエンドポイントを使う場合、サーバー証明書がそのIPアドレスに対応している必要があります。ドメイン名のエンドポイントを、名前解決で得たIPアドレスに置き換えないでください。また、接続失敗に対処するために証明書検証を無効にしないでください。

設定内容の確認

場所
Config → 現在の設定 → Edit Plain Text
セクション
[General]
フィールド
dns-server
変更範囲
1回の変更で置き換えるDNS値は1つだけ

元の設定の該当行を変更してください。部分的な設定で全体を上書きしないでください。

反映条件の確認

設定
保存した設定を有効にする
モード
Home → Global Routingを確認
接続
再接続して新しいリクエストを送信
自動接続
Settings → On Demandを確認

On Demandは条件に応じて接続する機能であり、DNSサーバーを選択する機能ではありません。

4. 再現可能な手順でDNSの反映を確認する

Webページが開いたとしても、そのアクセスが完了したことが分かるだけで、どのDNSサーバーが使われたかは証明できません。ブラウザーが既存の接続を再利用したり、アプリがアドレスをキャッシュしたりする場合があります。また、アプリによっては独自の暗号化DNSを使うこともあります。「問い合わせが行われたか」「どのような応答が返ったか」「その後どのように接続したか」を分けて記録してください。

  1. テスト条件を固定する。同じ端末、同じネットワーク、同じ既存サーバー、同じGlobal Routingモードを使います。設定ファイル名と現在のdns-serverの値を記録してください。
  2. システムDNSを基準にする。まずsystemを使い、正常に動作することが分かっているドメインと、問題が発生しているドメインをテストします。成功、タイムアウト、ドメインが存在しないなどの結果をそれぞれ記録してください。
  3. DNSだけを変更する。DNSサーバーを1つだけ指定して再接続し、テストに使うアプリを終了してから開き直して再試行します。新しい接続にすることで既存接続の再利用による影響を減らせますが、システムやアプリのキャッシュがすべて消えるわけではありません。
  4. 確認できる記録を調べる。Shadowrocketのログまたはリクエスト記録で、テストしたドメイン、問い合わせタイプ、返されたアドレス、エラー内容を確認します。DNSサーバーや出力先が確認できる場合は、それも記録してください。Dataの通信量が増えただけでは、DNS設定が反映された証拠にはなりません。
  5. 最後にDoHをテストする。HTTPSエンドポイントに変更し、同じ手順を繰り返します。エンドポイントがWebページ、HTTPエラー、TLSエラーを返す場合は、まずエンドポイントの問題を解決してください。ルールも同時に変更しないでください。
記録項目記録する内容目的
ネットワークと設定Wi-Fiまたはモバイル通信、設定名、Global Routingモードテスト条件の変化を除外する
問い合わせドメイン名、AまたはAAAA、成功または具体的なエラーアドレスファミリーと問い合わせ失敗を区別する
応答返されたIPアドレス、確認できるTTL、キャッシュの有無キャッシュと結果の変化を把握する
後続の接続適用されたルール、出力先のポリシー、接続結果DNSの問題とルーティングの問題を区別する

DNSサーバーによって異なるIPアドレスが返っても、必ずしも異常ではありません。CDNの振り分け、DNSサーバーの場所、キャッシュの更新、ネットワーク環境によって応答は変わります。接続先に接続できるか、証明書が正しいか、障害が再現するかをあわせて確認してください。2回の結果でIPアドレスが違うだけで、名前解決の異常と判断しないでください。

5. 症状から確認範囲を絞る

問題が発生したら、まず一つ前の単一項目テストに戻ります。DNS、Global Routing、既存サーバー、ルールファイルを同時に変更しないでください。接続が復旧しても、どの変更が効いたのか分からなくなります。

結論:アドレスが返っても接続できないなら、DNSの変更をいったん止める

DNS問い合わせが成功していると確認できたら、適用ルール、接続経路、接続先への到達性を調べます。DNSの応答が誤っている場合や名前解決経路に問題がある場合に限り、DNSサーバーの変更を続けてください。

6. 結果を記録して元の設定に戻す

再現性のある結果を確認してから、変更を継続するか決めます。システムDNSは現在のネットワークによる名前解決が必要な環境に、指定DNSサーバーは問い合わせ先を明確に制御したい場合に、DoHは暗号化された問い合わせ通信が必要で、エンドポイントにも安定して接続できる環境に適しています。いずれも実際のネットワークで確認が必要です。フィールド名だけで一律に最適な設定を決めることはできません。

  1. 有効だった設定のdns-server、テストしたネットワーク、発生した症状を記録します。既存のサブスクリプションに含まれる認証情報は記録しないでください。
  2. 普段使うWi-Fiとモバイル通信でそれぞれ再テストし、ネットワーク切り替え後に到達できないDNSサーバーへ依存しないことを確認します。
  3. リモート設定を使っている場合は、更新後に[General]を再確認してください。サーバーのサブスクリプション更新とDNS設定の変更は別の操作です。
  4. 元に戻す場合は、バックアップした元の値に戻して再接続します。以前システムDNSを使っていた場合は、dns-server = systemに戻してください。

この記事では、主にiPhoneとiPadでの設定編集とトラブルシューティングを説明しています。ShadowrocketはAppleプラットフォーム向けの有料クライアントです。入手先はApp Storeのみです。システム要件、その他のデバイスの互換性、購入に関する情報はApp Storeのページをご確認ください。アプリの購入と、ユーザーがすでに利用しているサブスクリプションは別々に管理されます。アプリの買い切り購入に通信サービスのプランは含まれません。

Shadowrocketの正規ダウンロード