Anycast — 同じIPが世界中にある
普通、IPアドレスは世界にひとつの住所です。203.0.113.10 と書けば、地球上のどこか1台のサーバーに届く。ところがAnycastは、この常識をひっくり返します。まったく同じIPアドレスを、世界中の何十拠点もが同時に名乗るのです。
同じ看板を掲げた店舗が世界中にあって、扉をくぐるといま自分がいる場所から一番近い店舗にワープしている。それがAnycastの体験です。下の図1で、地図の好きな場所をクリックしてアクセスしてみてください。
「一番近い」を決めているのは、距離ではなくBGP
Anycastに特別な魔法は入っていません。仕組みの正体はインターネットの経路広告(BGP)です。各拠点のルーターが、隣のネットワークに向かって「203.0.113.0/24 はこっちにあるよ」と同じ内容を叫び続けます。
受け取ったルーターは、複数届いた同じ宣伝のうち自分にとって一番短い経路のものを選んで、そちらにパケットを流します。つまり個々のルーターが普通に最短経路を選んだ結果として、利用者は勝手に最寄りの拠点へ吸い込まれるわけです。誰も全体を指揮していません。
ここで言う「近い」は物理的な距離ではなく、経路上の近さです。だから地図の見た目と実際の到達先がずれることもあります。図1では分かりやすさのために距離で判定していますが、現実の判定基準はネットワークのつながり方だと覚えておいてください。
拠点が落ちても、誰も設定を変えない
Anycastの本当の強さは速さより障害への強さにあります。拠点が落ちると、その拠点のルーターは経路の宣伝をやめるだけ。すると近隣のルーターは「もうそこには無い」と学習し、次に短い経路=別の拠点へ自動的に流し始めます。
図1で拠点をクリックして止めてみてください。DNSの書き換えも、設定の変更も、切り替え作業も一切ありません。宛先IPは最初から最後まで同じままで、到達先だけが静かに移ります。DNSでの切り替えがキャッシュのせいで数分〜数十分残ってしまうのに対し、Anycastの切り替えは経路情報が伝わる数秒〜数十秒で済みます。
この性質から、AnycastはDNSの権威サーバー(ルートサーバーや 8.8.8.8)、CDNの入口、DDoS対策で広く使われています。とくにDDoSでは、世界中から来る攻撃トラフィックが自動的に各拠点へ分散されて、1拠点あたりの負荷が薄まるという副産物まで付いてきます。
- Anycast
- 同じIPアドレスを複数拠点が名乗り、最も近い1拠点に届ける方式。
- Unicast
- 1つのIPが1台に対応する、ごく普通の通信方式。
- PoP
- Point of Presence。利用者の近くに置かれた接続拠点のこと。
- BGP
- ネットワーク同士が経路を宣伝し合うプロトコル。Anycastの土台。
- 経路の宣伝
- 「このアドレス帯はこちらにある」と隣接ネットワークへ伝えること。
向いていないもの — 長い接続
弱点もあります。Anycastではどの拠点に届くかがルーター任せなので、経路の状況が変わると通信の途中で行き先が別の拠点に移ることがあります。1往復で終わるUDPのDNS問い合わせなら何の問題もありませんが、状態を持ち続けるTCPの長い接続だと、移った先には接続の記憶がなく切断されます。
そのため実運用では、Anycastは入口までの案内役として使い、そこから先は各拠点内で処理を完結させる設計が定番です。短い問い合わせほど相性がよく、長く座り込む通信ほど相性が悪い――これがAnycastを使う場所を決める目安になります。
まとめ
Anycastは「1つのIPを世界中で名乗り、経路として一番近い拠点に届ける」仕組みです。速さは物理的に近い場所で応答が返ることから、強さは宣伝をやめるだけで切り替わることから来ています。切り替えのための操作が存在しないこと自体が、この方式の最大の利点です。