DNSサーバがDoHに対応しているか確認できるようにする提案仕様

今使っているDNSサーバがDNS over HTTPS (RFC8484)に対応しているか確認する方法は標準化されていません。

例えばChromeでは、どのDNSサーバがDoHをサポートしているかソースコード(URL)にハードコードされています。

通常、DHCPや、IPv6 Router AdvertisementsでDNSサーバを指定する場合はIPアドレスで指定されます。それが、DoHやDoTに対応しているか識別出来るようにするというのが今回の話です(ちなみに、HTTPSで繋いでみるという方法はうまくいきません)

この問題を解決するために「Discovery of Designated Resolvers」という提案仕様が出ています。すでにADD WGにAdoptionされております。

今回はこの仕様を簡単に読んでいこうかと思います。

Discovery of Designated Resolvers

Discovery of Designated Resolvers」は、Apple, Cloudflare, Fastly, Microsoftの方による共著になっています。

具体的な手順については、大きく分けて2つに別れており、対象のDNSサーバのホスト名がわかってる場合と、分かってない場合があります。分けて説明していきます。

ホスト名が分かっている場合

resolver.example.com がDoHに対応しているか確認する場合、_dns.resolver.example.com のSVCBレコードを確認します。

SVCBレコードとは現在標準化が進められているリソースレコードであり、そのドメインで提供しているサービス及び接続方法(alpnやESNI情報)が記述されています。
(仕様: https://tools.ietf.org/html/draft-ietf-dnsop-svcb-https-02)

_dns.resolver.example.com  7200  IN SVCB 1 . ( alpn=h2 dohpath=/dns-query{?dns} )
_dns.resolver.example.com  7200  IN SVCB 2 . ( alpn=dot )

この情報を見ると、DoHとDoTに対応している事がわかります。このとき、DoHは、path情報も記述されています。

DoHにリクエストを送るときに書きpathでリクエストする必要があることがわかります。(この情報がないと、単純にhttpsで接続してもdohのリクエストができません)
https://resolver.example.com/dns-query{?dns}

ホスト名が分かってない場合

先述の通り、DHCPなどではIPアドレスのみでDNSサーバが指定されます。その場合には「dns://resolver.arpa」に対してSVCBレコードを引きに行きます。
(なお、resolver.arpaはいわゆるSpecial Use Domain Nameとして予約されるドメイン名です)

もし再帰ゾルバがDoHサーバを知っていれば、SVCBレコードを返します。このときipv4hintをつけて返すことで、DoHサーバのAレコード解決を省略することができます。

## 表記上改行
     _dns.example.net  7200  IN SVCB 1 . (
        alpn=h2 dohpath=/dns-query{?dns} ipv4hint=x.y.z.w )

   _dns.example.net  7200  IN SVCB 1 dot.example.net (
         alpn=dot port=8530 ipv4hint=x.y.z.w )

また、このときのサーバ認証については仕様を参照ください。

おわりに

DoHサーバに繋ぐ設定をどうクライアントに入れ込むか、という議論は長らく続いてきました。そのなかで様々な立場から幾つか提案仕様が提出されました。

そんななか出てきたのが今回の仕様です。この仕様はすでにWG Adoptionされているので、この方向で進んでいくのかと思います。

すべてが解決されるわけではないと思いますが、引き続き追っていきたいなと思う。