フレッツのDNS挙動

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

シーケンス図

dns-f
dns-g

ちなみに

unbound 1.4.22 ( debian 8 )でもGoogleと同じようにCNAMEでもOKだった