VNet の IP アドレス空間は longest match より強い
Advent Calendar
こちらの記事は Microsoft Azure Advent Calendar 2023 の 20 日目の記事です!
TL;DR
- 一般的な longest match のお話
- longest match を使った hole punching のお話
- Azure では IP アドレス空間が被っている設計はできない
はじめに
ルーティング テーブルにおける経路選択アルゴリズムについて、みなさまも興味がありますよね。
BGP で複数 neighbor から同一経路もらったときにどう選択するかについては Cisco/Juniper など各社実装が若干異なりおもしろい部分ではあります。
とはいえ、さすがに longest match (ロンゲスト マッチ) が最優先であることは共通認識ではないでしょうか。
ところが、Azure はそうではないんですよね、というお話です。
longest match とは
簡単にだけ説明しておきますが longest match とは、一般的なルーティング テーブルにおいて、ある宛先に対して複数の経路がある場合に、その宛先に対してもっとも長いプレフィックスを持つ経路を選択するというアルゴリズムです。
Windows OS において route print
を実行することでルーティング テーブルが表示できますが、そこには Network Destination、Netmask、Gateway という情報が書かれていますね。
たとえば、以下のようなルーティング テーブルがあったとします。
Network Destination | Netmask | Gateway |
---|---|---|
10.0.0.0 | 255.255.0.0 (/16) | 10.0.254.254 |
10.0.0.0 | 255.255.255.0 (/24) | 10.0.0.254 |
その場合、10.0.0.4 に向かうパケットは 10.0.0.254 に投げられますが、10.0.10.4 に向かうパケットは 10.0.254.254 に投げられます。
10.0.0.4 宛のパケットは 2 番目、/24 の方のルーティング テーブルにより長くマッチするので、2 番目に表示されている Gateway が選択されるということです。
10.10.10.4 宛のパケットは 2 番目にはマッチしないので、1 番目の Gateway が選択されるということです。
longest match のちょっと工夫した使い方
この longest match を使うことで、大きなネットワークの一部を別の場所で使う、というようなことが技術的には可能です。
少しコンテキストは違うのですが、BGP などの世界では punching hole (パンチング ホール) と呼ばれる技術・テクニックに近いです。
イメージとしては以下のような感じになります。
「IP アドレスが被っている」設計は避けましょう、というのをよく聞くかと思いますが、逆に被っている場合の不都合を利用するとこのようなことが可能です。
もちろん、この設計においてデータセンター内に東京・大阪の IP アドレス帯とかぶっている IP アドレスを付けたホストがいれば破綻しますが、そこを設計で避けておけば一応通信上の問題は発生しません。
punching hole
Azure Virtual Network (VNet) ではどうか
実は、Azure の VNet では VNet で定義した IP アドレス空間に対しては longest match が適用されません。
つまり、先ほどの構成は できません。
punching hole for Azure VNet
どういうことが起こるかというと、Azure VNet で定義された IP アドレス空間とかぶっている IP アドレスを BGP などで広報したとしても、そこ宛のパケットは VNet から出ていくことはありません。
「VNet で定義した IP アドレス空間は VNet の中にあるでしょ、当たり前でしょ」というような、まぁそうだね、って話ではあるんですが。
まとめ
繰り返しにはなりますが、一般的に IP アドレスがかぶらない設計にしよう、というのは耳にしたことが多いのではないでしょうか。
しかし、現実には longest match を利用して、IP アドレス空間が被っていたとしても、一部を別の場所で使うというようなことが可能です。
ただ、Azure VNet ではそのようなことはできず、IP アドレス空間が被っているともうどうしようもなくなってしまうので、IP アドレス空間の設計は慎重に行う必要があります。
参考
- Zenn で本書いているのでこちらもどうぞ!
P.S.
風をはらんだら 女の子は強いよ
とても大好きな歌詞です、記事のタイトルと「強い」しか被ってませんが
Update log
- 参考リンクの追加 - 2023/12/18
- ネットワーク機器をすべて VNet Gateway にしていたので、必要に応じて Cisco Router のアイコンで置換え - 2023/12/19
- Advent Calendar へのリンク追加と参考リンクの追加 - 2023/12/21
Discussion