As of April 2016, Google Public DNS offers DNS-over-HTTPS, DNS resolution over an encrypted HTTPS connection. DNS-over-HTTPS prevents tampering, eavesdropping and spoofing, greatly enhancing privacy and security between a client and Google Public DNS. It complements DNSSEC to provide end-to-end authenticated DNS lookups.クエリの投げ方は こちらにあるんだけど、肝心の API のエンドポイントが書かれてない。教えてもらったところによると、https://dns.google.com/resolve らしい。
google なので http/2 も quic も使える模様。> curl -s https://dns.google.com/resolve\?name=www.google.com\&type=aaaa | jq . { "Status": 0, "TC": false, "RD": true, "RA": true, "AD": false, "CD": false, "Question": [ { "name": "www.google.com.", "type": 28 } ], "Answer": [ { "name": "www.google.com.", "type": 28, "TTL": 299, "data": "2404:6800:4004:800::2004" } ], "Comment": "Response from 216.239.34.10" }
> nghttp -n -r - https://dns.google.com/resolve ... { "name": "alternate-protocol", "value": "443:quic" }, ... "httpVersion": "HTTP/2.0", ...
_ フォーマットが JSON になってるだけで応答はおなじみのものだけど、よく見ると QR と AA ビットがない。QR は自明だからなくてもまあいいんだけど、AA がなくていいんかな。ためしにキャッシュサーバでもふつーは自分で権威情報を持っている localhost を問い合わせてみたら、NXDOMAIN ("Status":3)が返ってきた…。ふつーじゃなかった。権威情報は一切持ってないんかな。あと status が数字で返ってくるのめんどくさい(type も)。
_ 通常の DNS の応答にはない
という情報が付加されているのが興味深い。権威サーバの IP アドレスっぽいんだけど、つまり google public dns はどのサーバから取得した情報なのか、ということもキャッシュしているということだよね。既存のキャッシュ DNS の実装にはこういうことしてるものはなかったと思う。ちなみに、name=.&type=ns で問い合わせた場合は Comment が応答に含まれない。これは、どこかのサーバから取得した情報ではなく、root hint をそのまま答えている(プライミングしていない)ということか?"Comment": "Response from 216.239.34.10"
_ 冒頭に引用したように、google は DNS over HTTPS の意義について、クライアントとキャッシュサーバの間の通信を守れる、と説明してるんだけど、いやあ、ぶっちゃけ意味ないよね。だって、この API が既存の名前解決ライブラリとまったく互換性がなくてクライアントが使えないんだもの。/etc/nsswitch.conf で
みたいに書けるようになったり、あるいは問い合わせを DNS で受けて HTTPS に変換して投げる forwarder のようなものがあるなら話は別だけど、そういうのを実装するプランとかあるのかしらん。そういう意味では、OpenDNS がやってる DNSCryptの方が王道。現状ではセキュリティ的なことではなく、これから新規に開発されるアプリがいちいち DNS 用のライブラリを使わなくても DNS を調べられる、というのが唯一にして最大のメリットだと思う。chrome がそのうちこいつを使いだすか?(イントラの名前解決ができないので無理かも)hosts: files https
_ なにより DNS over HTTPS で名前解決するには、まず dns.google.com そのものの名前解決を通常の DNS でやらなきゃいけないというのがアレ。HTTPS だけあれば DNS はいらないというわけにはいかない。/etc/hosts に書いてもいいけど、dns.google.com のアドレスが変更されないという保証がまったくないので。