DNS

ZONE頂点でエイリアスを試す

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 に対応していないといけないんだなー、というのが今回わかったことでした。
設定に気づけてないだけかもしれませんが……

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA