2026年6月10日

2026年6月10日

DoH (DNS over HTTPS) が動作しない場合のトラブルシューティング

DoH(DNS over HTTPS)が動かないときは、まず「DoH の通信自体が通っているか」と「DoH では答えられない名前を引こうとしていないか」の2点を分けて確認するのが近道です。DoH はブラウザや OS が静かに通常の DNS へ戻る(フォールバックする)ことが多く、動いていないことに気づきにくいのが特徴です。この記事では、ブラウザ・Windows・コマンドラインでの確認方法と、起こりやすい原因を順に説明します。

DoH の仕組みと「動かない」の典型パターン

DoH は、DNS の問い合わせを HTTPS(通常は 443 番ポート)で暗号化して送る仕組みです(RFC 8484)。通常の DNS(UDP / TCP の 53 番)と違い、通信経路の途中で内容を見られたり書き換えられたりしにくくなります。その一方で、社内 DNS やルーターの DNS を経由しなくなるため、次のような問題が起こります。

  • DoH サーバーへの接続がネットワーク側で止められていて、使えない
  • 社内向けの名前やローカルの名前が DoH サーバーでは引けない
  • ブラウザが条件を満たさないと判断して、DoH を自動で無効にしている
  • DoH サーバーのキャッシュに古いレコードが残っていて、DNS の変更が反映されない

「DoH が動作しない」と一口に言っても、「DoH が使われていない」のか「DoH を使うと一部の名前が引けない」のかで対処が逆になります。最初にどちらなのかを見極めます。

ステップ1:DoH サーバーに直接つながるか確認する

ブラウザの設定を疑う前に、端末から DoH サーバーに届くかを確かめます。curl は 7.62 以降で --doh-url に対応していて、指定した DoH サーバーで名前解決をしてから接続します。

# DoH で名前解決して接続できるか(-v で解決に使ったアドレスも見える)
curl -sv --doh-url https://cloudflare-dns.com/dns-query https://example.com/ -o /dev/null

# JSON 形式の API で答えだけを見る(Google Public DNS の例)
curl -s "https://dns.google/resolve?name=example.com&type=A"

BIND 9.18 以降の dig なら、+https で DoH の問い合わせができます。

dig @1.1.1.1 +https example.com A

これらがタイムアウトする、接続を拒否される、TLS のエラーになる場合は、端末の設定ではなくネットワーク側で DoH が止められている可能性が高いと言えます。会社や学校のネットワーク、フィルタリングを行うルーター、セキュリティソフトは、既知の DoH サーバーへの通信を遮断することがあります。その環境のポリシーで止められているなら、管理者の方針に従うのが筋です。

TLS のエラーが出る場合は、端末の時刻も確認してください。時計が大きくずれていると、証明書の有効期間の判定で失敗します。

ステップ2:ブラウザで DoH が実際に使われているか確認する

Firefox の場合

Firefox は DoH を「TRR(Trusted Recursive Resolver)」と呼んでいます。アドレスバーに about:networking#dns と入力すると、名前ごとに TRR が使われたかどうかが表示されます。

動作の方針は、about:config の network.trr.mode で決まります。

  • 0:既定の動作(地域や設定に応じて自動)
  • 2:DoH を優先し、失敗したら通常の DNS に戻る
  • 3:DoH のみ(失敗すると名前解決できない)
  • 5:DoH を明示的に無効

通常は設定画面の「DNS over HTTPS」の項目から保護レベルを選べば十分で、about:config を直接変える必要はありません。項目の名前や選択肢は版によって変わることがあります(2026年10月現在)。

Firefox は、ネットワークが「DoH を使わないでほしい」と示している場合(use-application-dns.net という確認用ドメインが引けない状態にされている場合)や、ペアレンタルコントロール、企業ポリシーを検出した場合に、自動の DoH を無効にします。設定したのに使われていないときは、この自動判定を疑います。

Chrome・Edge の場合

Chrome の「セキュア DNS」は、既定では「今使っている DNS サービスが DoH に対応していれば、同じ事業者の DoH に切り替える」動作です。OS 側の DNS が DoH 非対応のプロバイダーなら、結果として通常の DNS が使われます。設定画面で事業者を指定すると、その DoH サーバーを使います。

企業のポリシーで管理されている端末では、セキュア DNS の項目が変更できない、またはオフに固定されていることがあります。chrome://policy で適用中のポリシーを確認できます。chrome://net-internals/#dns からはホストの名前解決の確認とキャッシュの消去ができます。

ステップ3:Windows 11 の DoH 設定を確認する

Windows 11 では、ネットワークアダプターごとの DNS サーバーの設定画面で、DNS over HTTPS を使うかどうかを選べます。ここで DoH を「オン」にしても、指定した DNS サーバーの IP アドレスが Windows の知っている DoH サーバーの一覧になければ、暗号化されません。登録済みの一覧はコマンドで確認できます。

# Windows が把握している DoH サーバーの一覧
netsh dns show encryption

一覧にない DoH サーバーを使う場合は、テンプレート URL を登録します。DoH のみで通常の DNS に戻らない設定にすると、DoH が使えない場所では名前解決が止まるので、最初はフォールバックを許可した状態で試すと安全です。

# 例: DoH テンプレートを登録する(値は利用する事業者のドキュメントで確認する)
netsh dns add encryption server=203.0.113.53 dohtemplate=https://doh.example.net/dns-query autoupgrade=yes udpfallback=yes

ステップ4:社内向け・ローカルの名前が引けない場合

「DoH をオンにしたら社内システムやステージング環境にアクセスできなくなった」という相談は多くあります。原因は単純で、パブリックな DoH サーバーは社内 DNS にしか登録されていない名前を知りません。

対処はいくつかあります。

  • 社内ネットワークでは社内 DNS を使い、DoH は使わない(企業ポリシーで制御するのが一般的)
  • Firefox なら network.trr.excluded-domains に社内ドメインを加え、その名前だけ通常の DNS で解決させる
  • 社内 DNS 自体を DoH に対応させ、端末からはその DoH サーバーを指定する

WordPress のステージング環境を hosts ファイルで見せている場合も、ブラウザの DoH の動作によっては期待どおりにならないことがあります。動作がおかしいと感じたら、一時的に DoH をオフにして挙動が変わるかを比べると切り分けが早くなります。

ステップ5:サイト運営者側で「DoH の利用者だけ古いサイトが見える」場合

サーバー移転で A レコードを変えたのに、一部の利用者だけ旧サーバーに接続してしまう場合、DoH で使われている公開リゾルバのキャッシュに古いレコードが残っている可能性があります。これは DoH 固有の問題ではなく、TTL が切れるまでのキャッシュの問題です。

まず、主要な公開リゾルバが返す値を直接比べます。

curl -s "https://dns.google/resolve?name=example.com&type=A"
curl -s -H "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=example.com&type=A"

古い値が返る場合は、TTL が切れるのを待つか、Google Public DNS や Cloudflare の 1.1.1.1 が用意しているキャッシュ削除のページから消去を依頼します。移転の前に TTL を短くしておくと、この待ち時間を減らせます。

自分のドメインで DNSSEC を使っている場合、検証に失敗すると DoH でも SERVFAIL になります。DoH の問題に見えて実は DNSSEC の問題、ということもあるので、dig @8.8.8.8 example.com と +cd 付きの結果を比べておくと安心です。

自前で DoH サーバーを運用している場合の確認点

Unbound や dnsdist などで自前の DoH サーバーを立てている場合は、次の点を順に確認します。

  • 証明書:DoH サーバーのホスト名に合った有効な証明書か。中間証明書が欠けていないか
  • パス:クライアントに指定した URL(一般的には /dns-query)とサーバー側の設定が一致しているか
  • HTTP/2:RFC 8484 は HTTP/2 以上の利用を推奨しており、クライアントによっては HTTP/2 が必須です。リバースプロキシを挟む場合は、プロキシと上流の両方を確認します
  • ブートストラップ:DoH サーバーのホスト名自体を解決する手段が必要です。クライアントが IP アドレスも併せて指定できるなら、それを使うと循環を避けられます

公開する DoH サーバーは、誰でも使えるオープンリゾルバとして悪用される恐れがあります。利用者を限定する仕組みやアクセス制御を設け、本番に出す前にステージングで動作を確かめてください。

まとめ

  • まず curl や dig +https で、DoH サーバーに直接つながるかを確認する
  • ブラウザは条件によって DoH を自動で無効にする。Firefox は about:networking#dns、Chrome は chrome://policy で状況を確認する
  • Windows は登録済みの DoH サーバーでないと暗号化されないので、netsh dns show encryption で確認する
  • 社内やローカルの名前はパブリックな DoH では引けない。除外設定や社内 DNS の利用で対処する
  • 「古いサイトが見える」はキャッシュと TTL の問題。主要な公開リゾルバの応答を直接比べる

お気軽にご相談ください

お見積りへ お問い合わせへ
▲