記事の目的
IBM Cloud Internet Services (CIS)では、anycastというルーティング手法が使われています。
IBM Cloud Internet Services は、Cloudflare のグローバル・エニイキャスト・ネットワーク(65カ国以上にある125以上のデータ・センター)に支えられ、モバイル・ユーザー・エクスペリエンスを強化し、インターネット対応アプリケーションのグローバルな応答性能と可用性を確保します。
anycastのwikipediaの説明:
https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%8B%E3%83%BC%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88
この記事では、anycastがどのような挙動をするか、コマンドの実行結果を見ながら確認したいと思います。
環境説明
検証用に、下記のサーバーを、IBM Cloud上に用意しました。
・オリジンサーバー@東京DC
・擬似的なクライアント端末として、Windows環境@東京DC
・擬似的なクライアント端末として、Windows環境@ワシントンDC
・擬似的なクライアント端末として、Windows環境@パリDC
そして、下記URLの手順でCISを構成し、www.tama0921.com へのアクセスがCIS経由で行われる状態にしました。
https://qiita.com/y_tama/items/9151b4c981abbb65c53d
東京のWindows環境からのアクセスを確認
まず、クライアント端末を模して東京DCに立てたWindows環境にリモートデスクトップでログインし、そこからのnslookupやpingの結果を確認します。
まずはオリジンサーバーの実IPアドレスへのpingを確認します。同じ東京DC内なので当然近く、1msで応答が返ります。
>ping 161.202.136.194
Pinging 161.202.136.194 with 32 bytes of data:
Reply from 161.202.136.194: bytes=32 time<1ms TTL=64
Reply from 161.202.136.194: bytes=32 time<1ms TTL=64
Reply from 161.202.136.194: bytes=32 time<1ms TTL=64
Reply from 161.202.136.194: bytes=32 time<1ms TTL=64
Ping statistics for 161.202.136.194:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
次に、www.tama0921.com へのnslookupを確認します。CISを設定していますので、オリジンサーバーの実IPアドレスではなく、104で始まるCISのエッジのIPアドレスが返ってきます。(2つの値が返るのは冗長性の意味があります)
>nslookup www.tama0921.com
Server: UnKnown
Address: 10.0.80.11
Non-authoritative answer:
Name: www.tama0921.com
Addresses: 2400:cb00:2048:1::6814:ab3
2400:cb00:2048:1::6814:9b3
104.20.9.179
104.20.10.179
ここで、CISのエッジに対してpingを打つとどうなるでしょうか? これも1msで返ってきます。
CISのエッジの具体的な場所は公開されていませんが、クライアント端末を模したWindows環境に非常に近い距離にあることが窺えます。
>ping 104.20.9.179
Pinging 104.20.9.179 with 32 bytes of data:
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Ping statistics for 104.20.9.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
>ping 104.20.10.179
Pinging 104.20.10.179 with 32 bytes of data:
Reply from 104.20.10.179: bytes=32 time=1ms TTL=59
Reply from 104.20.10.179: bytes=32 time=1ms TTL=59
Reply from 104.20.10.179: bytes=32 time=1ms TTL=59
Reply from 104.20.10.179: bytes=32 time=1ms TTL=59
Ping statistics for 104.20.10.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
www.tama0921.com への応答も早いです。
>ping www.tama0921.com
Pinging www.tama0921.com [104.20.9.179] with 32 bytes of data:
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Reply from 104.20.9.179: bytes=32 time=1ms TTL=59
Ping statistics for 104.20.9.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
C:\Users\Administrator>
アメリカのWindows環境からのアクセスを確認
次に、アメリカにいるユーザーのクライアント端末を模してワシントンDCに立てたWindows環境に、リモートデスクトップでログインし、そこからのnslookupやpingの結果を確認します。
オリジンサーバーの実IPアドレスへのpingを確認します。アメリカから日本なので、これはそれなりのLatencyがあります。
>ping 161.202.136.194
Pinging 161.202.136.194 with 32 bytes of data:
Reply from 161.202.136.194: bytes=32 time=158ms TTL=53
Reply from 161.202.136.194: bytes=32 time=157ms TTL=53
Reply from 161.202.136.194: bytes=32 time=157ms TTL=53
Reply from 161.202.136.194: bytes=32 time=157ms TTL=53
Ping statistics for 161.202.136.194:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 157ms, Maximum = 158ms, Average = 157ms
次に、www.tama0921.comの名前解決をします。ここで注目いただきたいのが、返ってくるIPアドレスが東京DCで試した時と全く同じIPアドレスであるという点です。
>nslookup www.tama0921.com
Server: UnKnown
Address: 10.0.80.11
Non-authoritative answer:
Name: www.tama0921.com
Addresses: 2400:cb00:2048:1::6814:9b3
2400:cb00:2048:1::6814:ab3
104.20.9.179
104.20.10.179
では、このIPアドレスにpingを打つとどうなるでしょうか?
下記のように、ワシントンDCのWindows環境からも、1msで応答が返っています。同じIPアドレスなのに、東京DCからもワシントンDCからも1msで応答がある、これがanycastの特長です。
世界に125箇所以上あるCISのデータセンターのうち、クライアントに最も近いエッジが応答をしているのです。
>ping 104.20.9.179
Pinging 104.20.9.179 with 32 bytes of data:
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Ping statistics for 104.20.9.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
>ping 104.20.10.179
Pinging 104.20.10.179 with 32 bytes of data:
Reply from 104.20.10.179: bytes=32 time=1ms TTL=53
Reply from 104.20.10.179: bytes=32 time=1ms TTL=53
Reply from 104.20.10.179: bytes=32 time=1ms TTL=53
Reply from 104.20.10.179: bytes=32 time=1ms TTL=53
Ping statistics for 104.20.10.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
ワシントンDCのWindows環境から、www.tama0921.comへの応答も1msです。ブラウザでアクセスする際、初回のアクセスはオリジンまで見に行くので遠いですが、2回目以降、キャッシュに載ったコンテンツは、この最寄りのCISエッジから配信されるので高速にアクセスできることが期待できます。
>ping www.tama0921.com
Pinging www.tama0921.com [104.20.9.179] with 32 bytes of data:
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Reply from 104.20.9.179: bytes=32 time=1ms TTL=53
Ping statistics for 104.20.9.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
フランスのWindows環境からのアクセスを確認
念のため、フランスにいるユーザーのクライアント端末を模してパリDCに立てたWindows環境にもリモートデスクトップでログインし、そこからのnslookupやpingの結果を確認します。
細かいコメントは割愛しますが、ワシントンDCと全く同様の結果です。
>ping 161.202.136.194
Pinging 161.202.136.194 with 32 bytes of data:
Reply from 161.202.136.194: bytes=32 time=227ms TTL=54
Reply from 161.202.136.194: bytes=32 time=227ms TTL=54
Reply from 161.202.136.194: bytes=32 time=227ms TTL=54
Reply from 161.202.136.194: bytes=32 time=227ms TTL=54
Ping statistics for 161.202.136.194:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 227ms, Maximum = 227ms, Average = 227ms
>nslookup www.tama0921.com
Server: UnKnown
Address: 10.0.80.11
Non-authoritative answer:
Name: www.tama0921.com
Addresses: 2400:cb00:2048:1::6814:9b3
2400:cb00:2048:1::6814:ab3
104.20.9.179
104.20.10.179
>ping 104.20.9.179
Pinging 104.20.9.179 with 32 bytes of data:
Reply from 104.20.9.179: bytes=32 time=1ms TTL=60
Reply from 104.20.9.179: bytes=32 time=1ms TTL=60
Reply from 104.20.9.179: bytes=32 time=1ms TTL=60
Reply from 104.20.9.179: bytes=32 time=1ms TTL=60
Ping statistics for 104.20.9.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
>ping 104.20.10.179
Pinging 104.20.10.179 with 32 bytes of data:
Reply from 104.20.10.179: bytes=32 time=1ms TTL=60
Reply from 104.20.10.179: bytes=32 time=1ms TTL=60
Reply from 104.20.10.179: bytes=32 time<1ms TTL=60
Reply from 104.20.10.179: bytes=32 time<1ms TTL=60
Ping statistics for 104.20.10.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
>ping www.tama0921.com
Pinging www.tama0921.com [104.20.9.179] with 32 bytes of data:
Reply from 104.20.9.179: bytes=32 time=1ms TTL=60
Reply from 104.20.9.179: bytes=32 time<1ms TTL=60
Reply from 104.20.9.179: bytes=32 time=1ms TTL=60
Reply from 104.20.9.179: bytes=32 time<1ms TTL=60
Ping statistics for 104.20.9.179:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
#まとめ
上記の検証から下記が確認できました。
・世界中のどこで自ドメインを名前解決しても同じIPアドレスが返ってくる
・それに応答するのはクライアントに最も近いCISエッジである
仮に最寄りのCISエッジが障害で使えなかった場合は、次に近いCISエッジにルーティングされ、そちらが処理を行います。冒頭に引用したように、CIS(Cloudflare)は125以上のデータ・センターがありますので、その全てで応答が無くなることはほぼ考えられません。
さらに、広域に分散したbotが仕掛けるDDoS攻撃も、それぞれの最寄りのCISエッジにルーティングされますので、1つのエッジに負荷が集中する事を防げるというメリットもあります。
このように、anycastの手法を使い、CISはパフォーマンス、可用性、セキュリティを向上させています。