🐷

複数の Hub-spoke アーキテクチャで spoke-to-spoke を実現する (Internet VPN 利用)

2022/07/26に公開

複数の Hub-spoke アーキテクチャで spoke-to-spoke を実現する

という方法はいくつかあると思っていて試していくシリーズのひとつです。

ここでは以下のアーキテクチャを考えます。

multiple Hub-spoke connected via Internet VPN

  • spk は spoke の略です
  • spk12 に丸がなくなっちゃってますが気にしないでください。。
  • Hub-spoke アーキテクチャが 2 つあって、その間を VPN Gateway の VPN + BGP の構成でつないであります

その他の実装方法はこちらにまとめています。

https://zenn.dev/skmkzyk/articles/multiple-hub-spoke-designs

動作確認

このアーキテクチャで、手元の PC からまずは spoke11 にある Azure VM へログインします。
このリモート デスクトップ接続には hub01 にある Bastion を利用しています。

そのうえで、hub01 にある Azure VM、hub02 にある Azure VM、spoke11 にある Azure VM、spoke12 にある VM とそれぞれログインした画面が以下のとおりです。
裏に隠れてしまっているのが spoke11 の VM に直接ログインしたそのままの画面で、真ん中上が hub01、左下から右に向かって hub02、spoke11、spoke12 という順に並んでいます。

remote desktop connection for multiple Hub-spoke

先ほどのアーキテクチャの図に合わせるとこのような感じでしょうか。

remote desktop path for multple Hub-spoke

spoke01 から spoke02 は UDR を書いていないのでつながりません。
それ以外は UDR を書かなくとも、BGP の経路制御のみで相互に接続できています。

vm-spoke10 の effective routes はどのようになっているか

vm-spoke10 の NIC である nic-spoke10 において、effective routes から表示させます。

10.10.0.0/16 が vm-spoke10 のある VNet の IP アドレス空間となっています。
10.0.0.0/16 は直接つながっている hub となっているので Next Hop Type が VNet peering となっています。
そのほか 2 番目の hub である 10.100.0.0/16 やその先にある spoke たちである 10.110.0.0/16 と 10.120.0.0/16 は Virtual network gateway となっています。
ExpressRoute のパターンとは異なり、それぞれの経路が 1 回ずつしか表示されていませんが、VPN Gateway を Act-Act で BGP を張ればまた違った見た目になるかとは思います。
ここで見えている 20.239.118.196 は VPN Gateway #2 の Public IP です。
ちょっと謎ですがまぁそういうもんなんでしょう。
この情報だけでは対向を見てみないと何とも言えませんが、基本的には vm-spoke20 以外とは通信できそうなことがうかがえます。

Source State Address Prefixes Next Hop Type Next Hop IP Address User Defined Route Name
Default Active 10.10.0.0/16 Virtual network - -
Default Active 10.0.0.0/16 VNet peering - -
Virtual network gateway Active 10.100.200.254/32 Virtual network gateway 20.239.118.196 -
Virtual network gateway Active 10.100.0.0/16 Virtual network gateway 20.239.118.196 -
Virtual network gateway Active 10.110.0.0/16 Virtual network gateway 20.239.118.196 -
Virtual network gateway Active 10.120.0.0/16 Virtual network gateway 20.239.118.196 -

tracert の結果はどうなるか

事前に、tracert に反応させるため、それぞれの Windows Server では Windows Firewall with Advanced Security を無効化しておきます。

結果として、それぞれの VM へと通信ができることを確認しています。
なかなか不思議なもので、VPN でつながっている部分での hop 追加がなく、すべてが 1 hop で見えてますね。
2 つの Hub-spoke 構成はそれぞれ east asia にあり、同じリージョンなので latency もかなり小さいようです。

> tracert -d 10.0.0.4

Tracing route to 10.0.0.4 over a maximum of 30 hops

  1     3 ms    <1 ms     1 ms  10.0.0.4

Trace complete.
> tracert -d 10.100.0.4

Tracing route to 10.100.0.4 over a maximum of 30 hops

  1     6 ms     3 ms     3 ms  10.100.0.4

Trace complete.
> tracert -d 10.110.0.4

Tracing route to 10.110.0.4 over a maximum of 30 hops

  1     4 ms     5 ms     4 ms  10.110.0.4

Trace complete.
> tracert -d 10.120.0.4

Tracing route to 10.120.0.4 over a maximum of 30 hops

  1     4 ms     3 ms     3 ms  10.120.0.4

Trace complete.

参考実装はこちらです。
書き直したタイミングで Ubuntu Server 20.04 にしてしまいました、ごめんなさい。

https://github.com/skmkzyk/bicep-templates/tree/main/20220725_multi-hub-internet-vpn

Microsoft (有志)

Discussion