NSレコードに指定したホスト名にCNAMEを持たせてはいけない
という話は有名だがどのように挙動が変わるか見てみる
準備
yaasita.ml. の権威サーバは ns1.aws.yaasita.net. にしておく
NSで指定されてるサーバは CNAMEとして aws.yaasita.net. に設定しておく
; <<>> DiG 9.9.5-9+deb8u7-Debian <<>> +norec @aws.yaasita.net. ns1.aws.yaasita.net. a
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31880
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ns1.aws.yaasita.net. IN A
;; ANSWER SECTION:
ns1.aws.yaasita.net. 60 IN CNAME aws.yaasita.net.
aws.yaasita.net. 60 IN A 54.159.240.111
;; AUTHORITY SECTION:
aws.yaasita.net. 60 IN NS aws.yaasita.net.
;; Query time: 205 msec
;; SERVER: 54.159.240.111#53(54.159.240.111)
;; WHEN: Mon Oct 31 00:53:20 JST 2016
;; MSG SIZE rcvd: 92
FletsのDNSキャッシュサーバ(210.130.1.1)の場合
CNAMEとともにAレコードを返しているのでIPアドレスは取得可能だが、フレッツ側はエラーとなる
この時点でエラーとなり hoge.yaasita.ml. のクエリ自体を発行しない
; <<>> DiG 9.9.5-9+deb8u7-Debian <<>> @210.130.0.1 hoge.yaasita.ml. a
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 28051
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hoge.yaasita.ml. IN A
;; Query time: 360 msec
;; SERVER: 210.130.0.1#53(210.130.0.1)
;; WHEN: Mon Oct 31 00:56:16 JST 2016
;; MSG SIZE rcvd: 44
Google(8.8.8.8)DNSキャッシューサーバの場合
この場合、上記Aレコードを取得した後にCNAMEでも処理を続行し、
hoge.yaasita.ml. の名前解決を行う
フレッツと違い最終的なIPアドレスを取得可能
; <<>> DiG 9.9.5-9+deb8u7-Debian <<>> @8.8.8.8 hoge.yaasita.ml. a
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54911
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;hoge.yaasita.ml. IN A
;; ANSWER SECTION:
hoge.yaasita.ml. 59 IN A 54.159.240.111
;; Query time: 671 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Oct 31 00:58:23 JST 2016
;; MSG SIZE rcvd: 60
シーケンス図
ちなみに
unbound 1.4.22 ( debian 8 )でもGoogleと同じようにCNAMEでもOKだった