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

システムDNS、カスタムDNS、DNS over HTTPSの仕組みと使い分けを解説。設定例と変更後の確認方法も紹介します。

この記事の要点

ShadowrocketのDNS設定は、まず現在のネットワークで使えるかどうかを確認しましょう。通信に問題がなければシステムDNSを維持し、名前解決先を指定したい場合は利用可能なカスタムDNSを使います。問い合わせの通信を保護したい場合は、DNS over HTTPSを確認します。利用可能な接続先や設定をすでにお持ちの方向けに、名前解決・ルーティング・接続の違い、設定を一項目ずつ変更する方法、ログの確認方法、元の設定に戻す手順を説明します。

DNS名前解決とGlobal Routingの通信経路を区別する

DNS(ドメインネームシステム)は、ドメイン名を接続先のアドレスに変換します。ページを開くには名前解決が必要ですが、その後にもルール判定、接続確立、TLSハンドシェイク、応答の受信があります。Webページが開けないからといって、原因がDNSとは限りません。DNSサーバーを変更しても、あらゆる接続タイムアウトが解消されるわけではありません。

ドメイン名の解決 アドレスの取得 通信経路の選択 接続の確立 応答の受信

この流れは、問題が発生している段階を切り分けるためのものです。すべてのリクエストが必ず同じ順序で処理されるわけではありません。キャッシュの有無、ドメインルールの先行判定、リモートでの名前解決、アプリ独自の名前解決方法などにより、実際の処理は異なります。特にドメインルールは、ローカルでIPアドレスを取得する前に判定されることがあります。

すでにサブスクリプションを利用している場合、更新によって通常更新されるのは接続項目です。現在のConfigにあるDNS設定も更新されたとは限りません。問題を調べる前に、選択中の接続先、有効な設定、Global Routingの状態をそれぞれ記録し、混同しないようにしましょう。

システムDNS・カスタムDNS・DoHの選び方

システムDNSは、現在のシステムのネットワーク環境に応じたDNS設定を使います。Wi-Fiとモバイル通信では設定が異なる場合があります。カスタムDNSは名前解決先を指定する設定です。通常のDNSサーバーアドレスを入力した場合、一般的なDNS通信が使われます。DNS over HTTPS(HTTPS経由のDNS、DoH)は問い合わせの通信方法を変更するもので、より速い応答や現在のネットワークに適したアドレスが返ることを保証するものではありません。

設定方式 利用に必要な条件 確認に適したケース 主な制約
システムDNS 現在のネットワークで名前解決ができる 基準値の確認、LAN内の名前へのアクセス、ネットワーク認証 ネットワークを切り替えると、名前解決先が変わる場合がある
カスタムDNS(通常のDNS) サーバーアドレスを保有し、現在のネットワークから接続できる 名前解決先を固定する、ネットワークごとの結果を比較する 通常のDNS問い合わせは通信が暗号化されない
DNS over HTTPS 完全なエンドポイント、有効な証明書、利用可能なHTTPS経路がある 名前解決先までの問い合わせ通信を保護したい エンドポイントへの接続、ドメイン名の事前解決、TLSハンドシェイクに依存する
53
通常のDNSポート。UDPとTCPを使用
443
HTTPSの標準ポート。DoHは通常このポートで通信
2種類
よく使われるアドレスレコード:AはIPv4、AAAAはIPv6

DoHエンドポイントには、明示的に別のポートを指定する場合もあります。HTTPSサイトにアクセスできても、特定のDoHエンドポイントに接続できるとは限りません。サーバーのドメイン名、ポート、リクエストパス、証明書が一致している必要があります。問い合わせの通信が暗号化されても、名前解決先は問い合わせを処理し、その内容を確認できます。これをもってすべての通信が隠されるわけではありません。

結論:使える設定を基準にし、必要な場合だけ名前解決先を変更する

システムDNSで目的のサイトに安定してアクセスできる場合は、まずその結果を記録しましょう。一度の応答時間を短縮するために、DNSサーバーと通信経路を同時に変更する必要はありません。名前解決に失敗する場合は、DNS設定を一項目だけ変更し、同じドメイン名で再テストしてください。

現在のConfigでDNSを確認し、一項目ずつ変更する

まずConfigで現在有効なファイルを確認し、[General]とdns-serverの項目を確認します。アプリ内のDNS設定はSettings → DNSから確認できます。有効になっていない設定ファイルだけを変更し、その後、DNS設定が反映されていないと誤認しないようにしてください。

  1. 元の値を残す。現在の設定をコピーして復元用の控えを作り、DNSの項目、Global Routingの状態、現在のネットワークを記録します。設定に認証情報が含まれている場合は、控えを安全に保管してください。
  2. テスト対象を決める。正常にアクセスできることが分かっている公開ドメインと、実際に問題が起きているドメインを一つずつ選びます。LAN内の名前は公開ドメインと分けてテストしてください。
  3. 変更するのはDNS設定だけ。有効な設定のdns-serverを確認するか、該当するDNS設定画面で現在の値を確認します。通信経路、ルール、IPv6、On Demandを同時に変更しないでください。
  4. 保存して再接続する。現在の接続を終了してから再接続し、新しいリクエストを送信します。すでに開いているページ、既存の接続、キャッシュからの応答だけでは、十分な確認になりません。
  5. 失敗した段階を確認する。名前解決のタイムアウト、接続のタイムアウト、証明書エラーのどれかを確認します。結果が悪化した場合は元の設定に戻し、再接続してください。

以下の2つの例は、同じ項目の異なる書き方を示しています。同じ設定ファイルに両方を重複して追加しないでください。実際のファイルにある他の必要な設定は残します。例に合わせるために、数行の記述で設定ファイル全体を置き換えないでください。

[General]
dns-server = system
[General]
dns-server = https://resolver.example.com/dns-query

設定がリモート更新で管理されている場合は、更新によってローカルの変更が上書きされないか、先に確認してください。控えを残してテストし、更新後は前回の入力内容ではなく、有効な設定ファイルに現在記録されている値を確認しましょう。

DoHと通常のDNSのアドレスの入力・確認方法

通常のDNSアドレスとDoH URLは、自由に置き換えられる形式ではありません。前者はサーバーアドレスを示し、後者にはプロトコル、ホスト名、リクエストパスも含まれます。通常のDNSアドレスの先頭にhttps://を付けても、そのサーバーが自動的にDoHに対応するわけではありません。

通常のDNSアドレスの確認

アドレスの例
192.0.2.53
一般的なポート
53。UDPとTCPの経路を確認
入力場所
現在の設定にあるdns-serverの項目
事前に必要な条件
利用可能なサーバーとネットワークへのアクセス権がある

192.0.2.53はドキュメント用の例示アドレスです。テストにそのまま使用できません。

DoHエンドポイントの確認

プロトコル
https://
ホスト名の例
resolver.example.com
パスの例
/dns-query。実際のエンドポイントのドキュメントを確認
証明書の要件
証明書が有効で、エンドポイントのホスト名と一致している

DoHには完全なURLを使用します。例は構造の説明用で、名前解決サービスではありません。

ドメイン名で指定するDoHエンドポイントには、事前の名前解決が必要です。HTTPS接続を確立する前に、エンドポイント自体のアドレスを取得しなければなりません。事前の名前解決が使えない場合、「DNSサーバーのドメイン名を調べるために、まずDNSが必要」という依存関係が生じることがあります。その場合は、現在のネットワークの基本的な名前解決とエンドポイントへの接続経路を確認してください。同じ理由で接続できないエンドポイントを次々に追加するのは避けましょう。

ルール・IPv6・LAN内の名前解決が結果に影響する理由

DNSがアドレスを返した後も、通信には適用されるルーティング判定が必要です。DOMAIN-SUFFIXはドメインの末尾を、IP-CIDRはIPv4アドレス範囲を、GEOIPはIPアドレスの地理的な割り当てを基準に判定します。DNSサーバーを変更すると返されるアドレスが変わり、それに応じてアドレスを基準にしたルールの判定結果も変わる場合があります。

[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

上の例は構文とマッチングの関係を示すもので、完全な設定ではありません。DIRECTは直接接続、PROXYはプロキシ経由を表します。実際に使う際は、現在の設定が認識するポリシー名を確認してください。ルールは上から順に評価され、FINALがそれ以前のルールに一致しなかった通信を処理します。アドレス範囲はドキュメント用の例であり、普段の振り分け設定にそのまま使わないでください。

ログインが必要なWi-Fiを利用する場合は、まずネットワーク認証を済ませてからカスタムDNSを確認してください。認証前にHTTPSエンドポイントへ接続できない、証明書エラーが出る、外部へのリクエストがすべてタイムアウトするといった場合は、DNSの記述ミスではなく、ネットワークへのアクセスが許可されていない可能性があります。

変更後の確認方法:ページが開くかだけでなく、失敗した段階を記録する

同じネットワーク、同じ通信経路、同じルーティング方式で確認します。まず元の設定で基準となる結果を記録し、その後に候補の設定へ切り替えます。各回のリクエスト時刻、対象ドメイン、アドレスが返ったか、その後の接続結果を記録してください。キャッシュからの即時応答と、DoH接続を初めて確立する際の所要時間を直接比較しないでください。

症状 最初に確認すること 次の操作
記録にアドレスがなく、その後タイムアウトする DNSサーバーへの到達性、エンドポイントの形式、事前の名前解決 システムDNSに戻し、他の設定を変えずに再テストする
アドレスは取得できたが、接続確立がタイムアウトする 適用されたルール、通信経路、接続先ポート 実際に適用されたポリシーを確認し、DNSを続けて変更しない
公開ドメインは正常だが、内部名は失敗する ローカルネットワークの名前解決に依存しているか 元のネットワークと元のDNS設定に戻して比較する
Wi-Fiでは正常だが、モバイル通信では失敗する それぞれのネットワークでのエンドポイント到達性と接続状態 ネットワークごとに再接続して記録し、On Demandの条件を確認する
再接続後も以前のアドレスが表示される DNSキャッシュ、アプリのキャッシュ、既存の接続 新しいリクエストを送り、キャッシュの結果と新しい問い合わせを区別する

アプリ内ログは問題の切り分けに役立ちますが、リクエストによって記録される項目は異なる場合があります。新しいDNSの行がログにない場合、キャッシュが使われた可能性も、別の場所で名前解決された可能性もあります。実際のリクエスト時刻やルーティング記録と照らし合わせて判断し、ログの一行がないことだけを根拠に結論を出さないでください。

  1. 再現性のある問題が起きるドメインで、元の設定と変更後の設定の結果をそれぞれ記録します。
  2. AまたはAAAAレコードを取得できたか確認し、その後、接続に使われたアドレスと適用されたポリシーを確認します。
  3. プライバシーの検証が必要な場合は、自分で管理するテスト用ドメインとサーバーの記録だけを使用してください。名前解決に使われた送信元アドレスが異なっていても、必ずしも異常とは限りません。
  4. 比較が終わったら、確認済みの変更だけを残し、テスト値を削除して、復元用の控えを保管します。

結論:アドレス取得後に失敗する場合は、接続とルールを確認する

記録からアドレスが返っていることが分かり、その後の接続段階で失敗している場合は、まず適用されたポリシーと接続先までの経路を確認してください。DNSをさらに変更するとアドレスの変数が増え、元の問題を特定しにくくなります。

よくある質問:設定を保存しても反映されない場合

DNSを変更したのに、結果が変わらないのはなぜ?

まずConfigで、現在有効な設定ファイルを変更したか確認し、保存後に再接続してください。次に、古いページを閉じて新しいリクエストを送り、ログの時刻と照合します。設定の更新によって変更が上書きされていないか、対象アプリがキャッシュを保持していないか、独自の名前解決を使っていないかも確認してください。

DoHを使えば、すべてのリクエストがプロキシ経由になりますか?

いいえ。DoHはDNS問い合わせをHTTPSで送信する方式であり、プロキシのポリシーを示すものではありません。まずHome → Global Routingを確認し、現在の設定がエンドポイントへの接続と目的の通信をどのように処理するかを確認してください。DNS問い合わせの経路とWebリクエストの経路は、別々に検証する必要があります。

接続先の遅延は正常なのにドメインが開けない場合、まずDNSを変更すべきですか?

まずログにアドレスが返っているか確認してください。遅延テストで分かるのは、そのテスト中の通信状況であり、目的のドメインの名前解決やWeb接続が正常であることの証明にはなりません。名前解決段階で失敗していると確認できた場合に限り、通信経路を変えずにシステムDNSと比較してください。

設定後、まったく接続できなくなった場合はどう戻せばよいですか?

変更前に保存した設定に戻し、dns-serverの元の値を確認して再接続してください。現在のネットワークでログインが必要な場合は、先に認証を済ませます。ネットワークを切り替えるたびに接続が再開される場合は、Settings → On Demandに設定されている条件も確認してください。

App Storeから正規版を入手アプリ情報を確認 →