🌱

www.amazon.co.jpは時々IPv6に対応する

2022/10/27に公開

いつから対応しているのか不明ですが、www.amazon.co.jpはIPv6アドレスを返すことがあります。
実際に試してみましょう。
DNSクライアントはDoggoを利用しています。
https://github.com/mr-karan/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オプションが実装されていないためです。開発予定に入っているそうなので楽しみに待ちましょう。
https://github.com/mr-karan/doggo/issues/52

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リゾルバで名前解決してもレスポンスがランダムに変わるためです。
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/routing-policy.html

AkamaiとFastlyを併用する理由ですが、耐障害性目的と想像しています。障害時だけ切り替える仕組みでないのは、普段から動かしておくことで、いざというときにうまく切り替わってくれなかった、といった最悪な失敗を防ぐためかと思います。他に通常からトラフィックを流しておくことで、CDN業者のコミットメントを達成し単価を下げる効果がある点もメリットでしょう。

Discussion