📚

Remote Gateway が使えない状況でも通信したい

2022/10/23に公開約2,100字

TL;DR

  • Remote Gateway が使えなくても使っているような感じで通信ができるようにしたい
  • いくつかの方法があるので、pros/cons 考えて選択していただければと

Remote Gateway が使えない状況とは

VNet Peering の設定として useRemoteGateways がありますが、これは VNet の中に Virtual Network Gateway があると使えません。
一般的な Hub-Spoke 構成であれば Spoke 側に Virtual Network Gateway を作成することはなく、問題はありません。
ただし、さまざまな事情が重なり、たとえば ExpressRoute Gateway を持っている VNet 同士を接続し、かつそれを Hub-Spoke 構成のようにオンプレミスから通信させる必要が出てくることがあります。

Remote Gateway が使えないとどうなるのか

たとえば ExpressRoute で接続されている拠点目線だと、useRemoteGateway が設定されていない VNet Peering 先のアドレス空間は BGP で経路広報されてきません。
オンプレミスの中だけであれば Static Route を書くことで何とかできそうな気がしますが、ExpressRoute にかかわるコンポーネントの関係上、それだけでは通信できません。
そのため、なんらかの形で経路が見えるようにするか、経路が見えなかったとしても NAT などで通信させる必要が出てきます。

そんな時にどうしようか、ということでいくつかのパターンを考えてみます。

NAT を利用するパターン

最初に紹介するパターンでは NAT を利用します。
NAT といっても NVA などでの NAT ではなく、Private Link Service を利用した Azure Managed な NAT 環境を利用します。
ただし、NAT を利用しているので片方向からしか通信可能ではない。

  • Spoke 側の Azure VM の前に Standard Load Balancer を配置し、Private Link Service を作成する
  • Private Link Service に対して、Hub 側 VNet で Private Endpoint を作成する
  • オンプレミスからは Hub 側の VNet にある IP アドレスへ通信しているように見えて、実際には Spoke 側へと通信させる

参考実装はこちら

https://github.com/skmkzyk/bicep-templates/tree/main/20220923_nat-loadbalancer

Azure Route Server を利用するパターン

経路が見えないなら見えるようにしてしまおう、ということで ARS (Azure Route Server) と NVA を利用するパターンです。
ARS 自体にそこそこコストがかかることと、NVA の運用にやや負荷のかかるのがデメリットですが、接続できれば Remote Gateway を使っているのとほぼ変わらないように通信が可能です。

  • Hub 側の VNet に ARS を配置し、同 VNet に配置した NVA から Spoke VNet のアドレス空間を経路広報する
  • Spoke からオンプレミスへのトラフィックは UDR (User Defined Route) で戻りの経路を書き、next-hop は Hub の NVA とする
  • オンプレミス側では経路が見えているので何も工夫しなくてもよい

参考実装はこちら

https://github.com/skmkzyk/bicep-templates/tree/main/20220930_hub-spoke-wo-remote-gw

VXLAN を用いたパターン

こちらは ARS を利用せず純粋に NVA だけで実装するパターンです。
NVA および VXLAN ということであまり慣れていないことも多いでしょうが、原理的には一番コストが安いのではないかと思います。
厳密にいえば VXLAN の header overhead があるので少しパケットは小さくなるはず

  • オンプレミス側の NVA と Hub の NVA の間で VXLAN tunnel を張る
  • オンプレミス側から Spoke、Spoke からオンプレミス側は NVA を通る必要があるため UDR を書く
  • NVA 同士は Static Route を駆使して、必要なトラフィックのみが VXLAN を経由するようにする

参考実装はこちら

https://github.com/skmkzyk/bicep-templates/tree/main/20221006_hub-spoke-wo-remote-gw-vxlan

Discussion

ログインするとコメントできます