DNSのリソースレコードで SVCB および HTTPS レコードを使えるようにしよう、というお話があります。
SVCB, HTTPS リソースレコード
情報を探ってると既にいくつかのブラウザでも対応してるとか。
当社の権威DNSサーバでも若干量の HTTPS 問い合わせが来ていました。対応してないんですけどね……
TYPE64 と TYPE65 (SVCB と HTTPS)
で、どんな感じになるんかなぁということで試してみました。
詳しい内容や技術的なお話は他稿に譲ります。
権威DNSサーバの用意
まずは SVCB,HTTPS に対応したDNSサーバを用意します。
ゾーンはこんな感じにしました。
[root@bind-test isc-bind]# grep HTTPS /var/opt/isc/scls/isc-bind/named/data/example.ne.jp.zone
@ IN HTTPS 0 server01.example.com.
www IN HTTPS 0 server01.example.com.
[root@bind-test isc-bind]#
ローカルで試してみます。
[root@bind-test isc-bind]# dig @0.0.0.0 example.ne.jp +norec
; <<>> DiG 9.17.18 <<>> @0.0.0.0 example.ne.jp +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58156
;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 3b0dbf53df12fb5c010000006177dfa34eb52c694007cfc9 (good)
;; QUESTION SECTION:
;example.ne.jp. IN A
;; AUTHORITY SECTION:
example.ne.jp. 300 IN SOA bind-test.example.ne.jp. root.bind-test.example.ne.jp. 2021101803 3600 600 1209600 1200
;; Query time: 0 msec
;; SERVER: 0.0.0.0#53(0.0.0.0) (UDP)
;; WHEN: Tue Oct 26 19:59:47 JST 2021
;; MSG SIZE rcvd: 142
[root@bind-test isc-bind]#
A は設定していないので返ってきませんね。
では HTTPS
[root@bind-test isc-bind]# dig @0.0.0.0 https example.ne.jp +norec
; <<>> DiG 9.17.18 <<>> @0.0.0.0 https example.ne.jp +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13233
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8f370bc1394b8267010000006177dfaa0349332551b5437f (good)
;; QUESTION SECTION:
;example.ne.jp. IN HTTPS
;; ANSWER SECTION:
example.ne.jp. 300 IN HTTPS 0 server01.example.com.
;; AUTHORITY SECTION:
example.ne.jp. 1200 IN NS bind-test.example.ne.jp.
;; Query time: 1 msec
;; SERVER: 0.0.0.0#53(0.0.0.0) (UDP)
;; WHEN: Tue Oct 26 19:59:54 JST 2021
;; MSG SIZE rcvd: 153
[root@bind-test isc-bind]#
登録通りの結果が返ってきました。
ブラウザで試す
safariで見られるんだっけ、ということで windows端末に safariをインストールして試してみましたが、Aの問い合わせしかありませんでした。
そこで拾ってきた iPhone の safari でテスト。
URLを叩くのにあわせて HTTPS のクエリーが飛んできます。
"行けたかな" と思ったもののエラーになります。
アクセスさせたいホストの Aレコードを聞きに来ません。
調べると iPhoneが接続先ネットワークから教えられたフルリゾルバを経由していることがわかりました。
HTTPS RR のクエリー応答を処理できてないようです。
最近作ってみたフルリゾルバで……
それならばと SVCB,HTTPS に対応したフルリゾルバを用意し、iphoneからこれを参照するようにします。
あらためて iPhoneからアドレスを叩くと無事にページが表示されました。
クエリの内容を見ていると A と HTTPS を同時に聞いてきます。
Aレコードは設定してないので HTTPS のみ応答が返り、そこに記述されたホストについてのAレコード問い合わせが来ました。
そして無事にサイト表示。
実際の通信はこんな感じでした。
iPhone(safari) フルリゾルバ
101 HTTPS example.ne.jp? →
201 A example.ne.jp? →
← 101 server01.example.com
← 201 なし (noerror)
301 HTTPS server01.example.com? →
401 A server01.example.com? →
← 301 なし (noerror)
← 401 192.0.2.1
まとめ(というほどでもない)
最初、「safariはすでに HTTPS RR に対応している」ということだったので、アプリ(safari)が直接(もしくは見知らぬ DoH経由で)権威DNSにHTTPS問い合わせを投げてくるのかと思ったんですが、そうではなく、端末に設定されたフルリゾルバにHTTPS問い合わせを投げていました。
なので、iPhoneがクエリーを投げる先のフルリゾルバ(キャッシュDNS)もSVCB,HTTPS RR に対応していないといけないんだなー、というのが今回わかったことでした。
設定に気づけてないだけかもしれませんが……
COBOL系SE,PG から NetNews(nntp)配送管理者(tnn.netnews.stats集計担当) を経て現職。
社内業務改善(「やりたくない」がモチベーション)でいろいろ社内ツールを作ってきました。
ネットワーク系の機器をいじることも多いので、それらの管理や制御に関するツールもちらほら。
perlで書くことが多いですね。(COBOLやFORTRAN、Pascal でもいいですけど……)
どれだけ読みやすく書けるか、10年後の自分に手紙でも書くような気持ちで。
最近はDNSを少しかじったりしてますが、いろいろ悩ましいことが多すぎます (>_<)
好きなポート番号は53、119、123です。
LINK
クラウドベリージャム:プロフィールページ