下記の記事を書いたら、
ELB(スケールサイズ)とDNS(返されるIPアドレス)の関係(予想)Facebookで次のようなコメントをいただきました。
ということで、再調査です...
まずは最初のキーワードの「512byte問題」ですが、下記の記事の最初の部分を読むと
概要がわかると思います。
DNSのIPv6対応へのハードル「512バイト問題」とは?つまり、「DNSでは512バイトを超えるデータをUDPで転送できない」ということで、
ELBのDNS名を名前解決するときに返すIPアドレスの最大数8は、この512バイトを
ギリギリ超えない数だと予想できます。
実際に下記のような"dig"コマンドを実行してみると、最終行が次のように出力されており
MSG SIZE rcvd: 493転送されたデータが512バイトにギリギリの493バイトであることがわかります。
$ dig suz-000000000.ap-northeast-1.elb.amazonaws.com +noall +answer +stats ; <<>> DiG 9.8.3-P1 <<>> suz-000000000.ap-northeast-1.elb.amazonaws.com +noall +answer +stats ;; global options: +cmd suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 176.34.61.xxx suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 176.34.62.xxx suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 46.51.249.xxx suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 54.248.76.xxx suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 54.248.111.xxx suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 54.248.120.xxx suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 176.34.29.xxx suz-000000000.ap-northeast-1.elb.amazonaws.com. 60 IN A 176.34.60.xxx ;; Query time: 134 msec ;; SERVER: 192.168.11.1#53(192.168.11.1) ;; WHEN: Mon Nov 12 01:25:56 2012 ;; MSG SIZE rcvd: 493
そして次のキーワードである「EDNS0」ですが、恥ずかしながらこの言葉、
この時、初めて知りました...
で、いろいろ調べてみると、下記を読むことで、ある程度理解することができました。
DNS拡張EDNS0の解析要は、上記の記事の言葉をかりると、
DNSの要求と応答に「転送可能バイト」を格納することで、といった感じになると思います。
512バイト以上のデータをUDPでも送信できるようにする拡張。
おそらく、上記の拡張に対応していないDNSサーバ/クライアントのことも考え、
ELBのDNS名を名前解決したときに返ってくるIPアドレスは、
512バイトを超えない8個までにしているのでは、と予想できます。
で話は終わるはずだったのですが、"Route 53"のドキュメントにて
下記のような記述を見つけてしまいました...
DNS Constraints and Behaviorsつまり、"Route 53"なら、EDNS0をサポートしているわけです。
Maximum Response Size
To comply with DNS standards, responses sent over UDP
are limited to 512 bytes in size. Responses exceeding 512 bytes
are truncated and the resolver must re-issue the request over TCP.
If the resolver supports EDNS0 (as defined in RFC 2671),
and advertises the EDNS0 option to Route 53, Route 53 permits responses
up to 4096 bytes over UDP, without truncation.
DNSの標準に従うためにUDPで送信される応答の大きさは512バイトに
限定される。応答が512バイトを超える場合は切り縮められて、クライアントは
名前解決のためにTCPにて再度リクエストしなければならない。もしクライアントが
EDNS0をサポートしている場合、EDNS0オプションを"Route 53"に送信することで
UDPでも切り縮められることなしに、4096バイトまで応答を送信することができる。
ということで、"Route 53"上で"test.suz-lab.com"のAレコードを
"10.0.0.1 - 10.0.0.30"まで作成して実験してみます。
まず普通に名前解決してみると、下記の通り、最後が"MSG SIZE rcvd: 514"と
512バイト以上になっていますが、先頭が"Truncated, retrying in TCP mode."なので、
UDPではなくTCPで応答が(ドキュメント通り)送信されていることがわかります。
$ dig @8.8.8.8 test.suz-lab.com +noall +answer +stats +comments ;; Truncated, retrying in TCP mode. ; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 test.suz-lab.com +noall +answer +stats +comments ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2630 ;; flags: qr rd ra; QUERY: 1, ANSWER: 30, AUTHORITY: 0, ADDITIONAL: 0 ;; ANSWER SECTION: test.suz-lab.com. 41 IN A 10.0.0.1 test.suz-lab.com. 41 IN A 10.0.0.22 test.suz-lab.com. 41 IN A 10.0.0.20 test.suz-lab.com. 41 IN A 10.0.0.12 test.suz-lab.com. 41 IN A 10.0.0.10 test.suz-lab.com. 41 IN A 10.0.0.19 test.suz-lab.com. 41 IN A 10.0.0.15 test.suz-lab.com. 41 IN A 10.0.0.23 test.suz-lab.com. 41 IN A 10.0.0.13 test.suz-lab.com. 41 IN A 10.0.0.6 test.suz-lab.com. 41 IN A 10.0.0.14 test.suz-lab.com. 41 IN A 10.0.0.26 test.suz-lab.com. 41 IN A 10.0.0.21 test.suz-lab.com. 41 IN A 10.0.0.2 test.suz-lab.com. 41 IN A 10.0.0.27 test.suz-lab.com. 41 IN A 10.0.0.24 test.suz-lab.com. 41 IN A 10.0.0.18 test.suz-lab.com. 41 IN A 10.0.0.8 test.suz-lab.com. 41 IN A 10.0.0.16 test.suz-lab.com. 41 IN A 10.0.0.3 test.suz-lab.com. 41 IN A 10.0.0.7 test.suz-lab.com. 41 IN A 10.0.0.9 test.suz-lab.com. 41 IN A 10.0.0.11 test.suz-lab.com. 41 IN A 10.0.0.29 test.suz-lab.com. 41 IN A 10.0.0.4 test.suz-lab.com. 41 IN A 10.0.0.25 test.suz-lab.com. 41 IN A 10.0.0.28 test.suz-lab.com. 41 IN A 10.0.0.5 test.suz-lab.com. 41 IN A 10.0.0.30 test.suz-lab.com. 41 IN A 10.0.0.17 ;; Query time: 8 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Nov 12 02:42:02 2012 ;; MSG SIZE rcvd: 514
そしてEDNS0で名前解決("+bufsize=4096"を付与)してみると、
今度は下記のように、"EDNS: version: 0, flags:; udp: 512"とEDNS0を利用して
UDPのまま応答を送信していることがわかります。
$ dig @8.8.8.8 test.suz-lab.com +noall +answer +stats +comments +bufsize=4096 ; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 test.suz-lab.com +noall +answer +stats +comments +bufsize=4096 ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26095 ;; flags: qr rd ra; QUERY: 1, ANSWER: 30, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; ANSWER SECTION: test.suz-lab.com. 59 IN A 10.0.0.23 test.suz-lab.com. 59 IN A 10.0.0.26 test.suz-lab.com. 59 IN A 10.0.0.14 test.suz-lab.com. 59 IN A 10.0.0.20 test.suz-lab.com. 59 IN A 10.0.0.8 test.suz-lab.com. 59 IN A 10.0.0.4 test.suz-lab.com. 59 IN A 10.0.0.13 test.suz-lab.com. 59 IN A 10.0.0.18 test.suz-lab.com. 59 IN A 10.0.0.27 test.suz-lab.com. 59 IN A 10.0.0.6 test.suz-lab.com. 59 IN A 10.0.0.16 test.suz-lab.com. 59 IN A 10.0.0.28 test.suz-lab.com. 59 IN A 10.0.0.7 test.suz-lab.com. 59 IN A 10.0.0.1 test.suz-lab.com. 59 IN A 10.0.0.24 test.suz-lab.com. 59 IN A 10.0.0.29 test.suz-lab.com. 59 IN A 10.0.0.5 test.suz-lab.com. 59 IN A 10.0.0.30 test.suz-lab.com. 59 IN A 10.0.0.25 test.suz-lab.com. 59 IN A 10.0.0.10 test.suz-lab.com. 59 IN A 10.0.0.9 test.suz-lab.com. 59 IN A 10.0.0.17 test.suz-lab.com. 59 IN A 10.0.0.12 test.suz-lab.com. 59 IN A 10.0.0.3 test.suz-lab.com. 59 IN A 10.0.0.11 test.suz-lab.com. 59 IN A 10.0.0.22 test.suz-lab.com. 59 IN A 10.0.0.19 test.suz-lab.com. 59 IN A 10.0.0.2 test.suz-lab.com. 59 IN A 10.0.0.21 test.suz-lab.com. 59 IN A 10.0.0.15 ;; Query time: 218 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Nov 12 02:43:14 2012 ;; MSG SIZE rcvd: 525
ちなみにEDNS0のついでにDNSSECはどうかというと、
下記よりサポートされてないことがわかります。
Q. Does Amazon Route 53 support DNSSEC?結構古い情報なのに、今まで知らなかった...
"Route 53"はDNSSECをサポートしていますか?
No. Amazon Route 53 does not support DNSSEC at this time.
いいえ、今の時点では"Route 53"はDNSSECをサポートしていません。
--------
http://www.suz-lab.com


0 コメント:
コメントを投稿