www.amazon.co.jpは時々IPv6に対応する
いつから対応しているのか不明ですが、www.amazon.co.jp
はIPv6アドレスを返すことがあります。
実際に試してみましょう。
DNSクライアントはDoggoを利用しています。
テストした環境の上流DNSはCloudflare GatewayのDoHエンドポイントです。
名前解決の結果
$ doggo aaaa www.amazon.co.jp
NAME TYPE CLASS TTL ADDRESS NAMESERVER
www.amazon.co.jp. CNAME IN 0s tp.4d5ad1d2b-frontier.amazon.co.jp. 172.17.32.1:53
tp.4d5ad1d2b-frontier.amazon.co.jp. CNAME IN 0s www-amazon-co-jp.customer.fastly.net. 172.17.32.1:53
www-amazon-co-jp.customer.fastly.net. AAAA IN 0s 2606:2cc0::371 172.17.32.1:53
www-amazon-co-jp.customer.fastly.net. AAAA IN 0s 2606:2cc0:1::371 172.17.32.1:53
www-amazon-co-jp.customer.fastly.net. AAAA IN 0s 2606:2cc0:2::371 172.17.32.1:53
www-amazon-co-jp.customer.fastly.net. AAAA IN 0s 2606:2cc0:3::371 172.17.32.1:53
www.amazon.co.jp
のCNAMEにtp.4d5ad1d2b-frontier.amazon.co.jp
が設定されていて、このレコードのCNAMEがFastlyのCNAMEレコードに設定されています。
もう一度試してみましょう。
$ doggo aaaa www.amazon.co.jp
NAME TYPE CLASS TTL ADDRESS NAMESERVER
www.amazon.co.jp. CNAME IN 0s tp.4d5ad1d2b-frontier.amazon.co.jp. 172.17.32.1:53
tp.4d5ad1d2b-frontier.amazon.co.jp. CNAME IN 0s www.amazon.co.jp.edgekey.net. 172.17.32.1:53
www.amazon.co.jp.edgekey.net. CNAME IN 0s e15312.a.akamaiedge.net. 172.17.32.1:53
今度はAAAAレコードが返ってきません。tp.4d5ad1d2b-frontier.amazon.co.jp
のCNAMEもAkamaiのものに変わっています。
FastlyはIPv6が有効化されていて、Akamaiでは無効化されています。
FastlyとAkamaiの切替の仕組みを考える
CNAMEのレスポンスを切り替える仕組みを調べてみます。drill -T
でルートから順番に名前解決を追ってみます。
doggo
ではなくdrill
を使っているのは、doggo
にまだtraceオプションが実装されていないためです。開発予定に入っているそうなので楽しみに待ちましょう。
FastlyのCNAMEが返ってきた場合のdrill -T
です。
$ drill -T www.amazon.co.jp a
. 518400 IN NS d.root-servers.net.
. 518400 IN NS j.root-servers.net.
. 518400 IN NS i.root-servers.net.
. 518400 IN NS h.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS e.root-servers.net.
. 518400 IN NS g.root-servers.net.
. 518400 IN NS f.root-servers.net.
. 518400 IN NS m.root-servers.net.
. 518400 IN NS a.root-servers.net.
. 518400 IN NS c.root-servers.net.
. 518400 IN NS l.root-servers.net.
. 518400 IN NS k.root-servers.net.
jp. 172800 IN NS b.dns.jp.
jp. 172800 IN NS g.dns.jp.
jp. 172800 IN NS h.dns.jp.
jp. 172800 IN NS e.dns.jp.
jp. 172800 IN NS f.dns.jp.
jp. 172800 IN NS c.dns.jp.
jp. 172800 IN NS d.dns.jp.
jp. 172800 IN NS a.dns.jp.
amazon.co.jp. 86400 IN NS pdns1.ultradns.net.
amazon.co.jp. 86400 IN NS ns2.p31.dynect.net.
amazon.co.jp. 86400 IN NS ns1.p31.dynect.net.
amazon.co.jp. 86400 IN NS pdns6.ultradns.co.uk.
www.amazon.co.jp. 1800 IN CNAME tp.4d5ad1d2b-frontier.amazon.co.jp.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-259.awsdns-32.com.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-543.awsdns-03.net.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-1388.awsdns-45.org.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-1635.awsdns-12.co.uk.
tp.4d5ad1d2b-frontier.amazon.co.jp. 60 IN CNAME www-amazon-co-jp.customer.fastly.net.
net. 172800 IN NS e.gtld-servers.net.
net. 172800 IN NS b.gtld-servers.net.
net. 172800 IN NS c.gtld-servers.net.
net. 172800 IN NS d.gtld-servers.net.
net. 172800 IN NS a.gtld-servers.net.
net. 172800 IN NS j.gtld-servers.net.
net. 172800 IN NS i.gtld-servers.net.
net. 172800 IN NS h.gtld-servers.net.
net. 172800 IN NS g.gtld-servers.net.
net. 172800 IN NS f.gtld-servers.net.
net. 172800 IN NS k.gtld-servers.net.
net. 172800 IN NS l.gtld-servers.net.
net. 172800 IN NS m.gtld-servers.net.
fastly.net. 172800 IN NS ns1.fastly.net.
fastly.net. 172800 IN NS ns2.fastly.net.
fastly.net. 172800 IN NS ns3.fastly.net.
fastly.net. 172800 IN NS ns4.fastly.net.
www-amazon-co-jp.customer.fastly.net. 3600 IN A 162.219.225.115
fastly.net. 7200 IN NS ns1.fastly.net.
fastly.net. 7200 IN NS ns2.fastly.net.
fastly.net. 7200 IN NS ns3.fastly.net.
fastly.net. 7200 IN NS ns4.fastly.net.
AkamaiのCNAMEが返ってきた場合のdrill -T
です。
$ drill -T www.amazon.co.jp a
. 518400 IN NS c.root-servers.net.
. 518400 IN NS k.root-servers.net.
. 518400 IN NS h.root-servers.net.
. 518400 IN NS e.root-servers.net.
. 518400 IN NS d.root-servers.net.
. 518400 IN NS g.root-servers.net.
. 518400 IN NS i.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS j.root-servers.net.
. 518400 IN NS a.root-servers.net.
. 518400 IN NS f.root-servers.net.
. 518400 IN NS m.root-servers.net.
. 518400 IN NS l.root-servers.net.
jp. 172800 IN NS a.dns.jp.
jp. 172800 IN NS b.dns.jp.
jp. 172800 IN NS c.dns.jp.
jp. 172800 IN NS d.dns.jp.
jp. 172800 IN NS e.dns.jp.
jp. 172800 IN NS f.dns.jp.
jp. 172800 IN NS g.dns.jp.
jp. 172800 IN NS h.dns.jp.
amazon.co.jp. 86400 IN NS pdns1.ultradns.net.
amazon.co.jp. 86400 IN NS ns1.p31.dynect.net.
amazon.co.jp. 86400 IN NS ns2.p31.dynect.net.
amazon.co.jp. 86400 IN NS pdns6.ultradns.co.uk.
www.amazon.co.jp. 1800 IN CNAME tp.4d5ad1d2b-frontier.amazon.co.jp.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-259.awsdns-32.com.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-543.awsdns-03.net.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-1388.awsdns-45.org.
4d5ad1d2b-frontier.amazon.co.jp. 900 IN NS ns-1635.awsdns-12.co.uk.
tp.4d5ad1d2b-frontier.amazon.co.jp. 60 IN CNAME www.amazon.co.jp.edgekey.net.
net. 172800 IN NS e.gtld-servers.net.
net. 172800 IN NS f.gtld-servers.net.
net. 172800 IN NS m.gtld-servers.net.
net. 172800 IN NS i.gtld-servers.net.
net. 172800 IN NS j.gtld-servers.net.
net. 172800 IN NS b.gtld-servers.net.
net. 172800 IN NS a.gtld-servers.net.
net. 172800 IN NS c.gtld-servers.net.
net. 172800 IN NS k.gtld-servers.net.
net. 172800 IN NS h.gtld-servers.net.
net. 172800 IN NS l.gtld-servers.net.
net. 172800 IN NS g.gtld-servers.net.
net. 172800 IN NS d.gtld-servers.net.
edgekey.net. 172800 IN NS ns1-66.akam.net.
edgekey.net. 172800 IN NS usw6.akam.net.
edgekey.net. 172800 IN NS adns1.akam.net.
edgekey.net. 172800 IN NS ns4-66.akam.net.
edgekey.net. 172800 IN NS ns7-65.akam.net.
edgekey.net. 172800 IN NS ns5-66.akam.net.
edgekey.net. 172800 IN NS a6-65.akam.net.
edgekey.net. 172800 IN NS a12-65.akam.net.
edgekey.net. 172800 IN NS a5-65.akam.net.
edgekey.net. 172800 IN NS a16-65.akam.net.
edgekey.net. 172800 IN NS a18-65.akam.net.
edgekey.net. 172800 IN NS a28-65.akam.net.
edgekey.net. 172800 IN NS a13-65.akam.net.
www.amazon.co.jp.edgekey.net. 300 IN CNAME e15312.a.akamaiedge.net.
akamaiedge.net. 172800 IN NS la1.akamaiedge.net.
akamaiedge.net. 172800 IN NS la3.akamaiedge.net.
akamaiedge.net. 172800 IN NS lar2.akamaiedge.net.
akamaiedge.net. 172800 IN NS ns3-194.akamaiedge.net.
akamaiedge.net. 172800 IN NS ns6-194.akamaiedge.net.
akamaiedge.net. 172800 IN NS ns7-194.akamaiedge.net.
akamaiedge.net. 172800 IN NS ns5-194.akamaiedge.net.
akamaiedge.net. 172800 IN NS a12-192.akamaiedge.net.
akamaiedge.net. 172800 IN NS a28-192.akamaiedge.net.
akamaiedge.net. 172800 IN NS a6-192.akamaiedge.net.
akamaiedge.net. 172800 IN NS a1-192.akamaiedge.net.
akamaiedge.net. 172800 IN NS a13-192.akamaiedge.net.
akamaiedge.net. 172800 IN NS a11-192.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n3a.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n0a.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n2a.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n6a.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n4a.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n7a.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n5a.akamaiedge.net.
a.akamaiedge.net. 4000 IN NS n1a.akamaiedge.net.
e15312.a.akamaiedge.net. 20 IN A 23.210.220.211
amazon.co.jp
ゾーンはOracle Dyn, UltraDNSを使っており、4d5ad1d2b-frontier.amazon.co.jp
ゾーンをRoute53に委譲しています。tp.4d5ad1d2b-frontier.amazon.co.jp
はRoute53の機能を利用してレスポンスを切り替えているとわかります。
Route53のルーティングポリシー
4d5ad1d2b-frontier.amazon.co.jp
のNSレコードには下記の通りDNSサーバが設定されています。
$ doggo ns 4d5ad1d2b-frontier.amazon.co.jp
NAME TYPE CLASS TTL ADDRESS NAMESERVER
4d5ad1d2b-frontier.amazon.co.jp. NS IN 0s ns-1388.awsdns-45.org. 172.17.32.1:53
4d5ad1d2b-frontier.amazon.co.jp. NS IN 0s ns-1635.awsdns-12.co.uk. 172.17.32.1:53
4d5ad1d2b-frontier.amazon.co.jp. NS IN 0s ns-259.awsdns-32.com. 172.17.32.1:53
4d5ad1d2b-frontier.amazon.co.jp. NS IN 0s ns-543.awsdns-03.net. 172.17.32.1:53
このDNSサーバにtp.4d5ad1d2b-frontier.amazon.co.jp
のCNAMEを問い合わせると、下記の通りランダムにFastly, Akamaiのレコードが返ります。
$ doggo cname tp.4d5ad1d2b-frontier.amazon.co.jp @ns-1635.awsdns-12.co.uk
NAME TYPE CLASS TTL ADDRESS NAMESERVER
tp.4d5ad1d2b-frontier.amazon.co.jp. CNAME IN 60s www.amazon.co.jp.edgekey.net. ns-1635.awsdns-12.co.uk:53
$ doggo cname tp.4d5ad1d2b-frontier.amazon.co.jp @ns-1635.awsdns-12.co.uk
NAME TYPE CLASS TTL ADDRESS NAMESERVER
tp.4d5ad1d2b-frontier.amazon.co.jp. CNAME IN 60s www-amazon-co-jp.customer.fastly.net. ns-1635.awsdns-12.co.uk:53
$ doggo cname tp.4d5ad1d2b-frontier.amazon.co.jp @ns-1635.awsdns-12.co.uk
NAME TYPE CLASS TTL ADDRESS NAMESERVER
tp.4d5ad1d2b-frontier.amazon.co.jp. CNAME IN 60s www-amazon-co-jp.customer.fastly.net. ns-1635.awsdns-12.co.uk:53
$ doggo cname tp.4d5ad1d2b-frontier.amazon.co.jp @ns-1635.awsdns-12.co.uk
NAME TYPE CLASS TTL ADDRESS NAMESERVER
tp.4d5ad1d2b-frontier.amazon.co.jp. CNAME IN 60s www.amazon.co.jp.edgekey.net. ns-1635.awsdns-12.co.uk:53
Route53のルーティングポリシーはいくつかありますが、おそらく加重ルーティングを使っているようです。これは同じネットワークから同じDNSリゾルバで名前解決してもレスポンスがランダムに変わるためです。
AkamaiとFastlyを併用する理由ですが、耐障害性目的と想像しています。障害時だけ切り替える仕組みでないのは、普段から動かしておくことで、いざというときにうまく切り替わってくれなかった、といった最悪な失敗を防ぐためかと思います。他に通常からトラフィックを流しておくことで、CDN業者のコミットメントを達成し単価を下げる効果がある点もメリットでしょう。
Discussion