🌐
Hub-Spoke構成の2つのネットワーク間のSpoke-Hub-Hub-SpokeをVNetピアリング+Azure Firewallで実現
やりたいこと
AzureのWAFのDocsで見かけるリージョン間のHub-Spokeの連結を実際どうやるのか確認する。下の画像のイメージ。
検証準備
アーキテクチャのイメージ
イメージはこんな感じ
Virtual Network
- eastusにhub(10.0.0.0/16)とspoke(10.1.0.0/16)
- centralusにhub(10.101.0.0/16)とspoke(10.100.0.0/16)
- 各リージョンのhub-spokeはピアリング
- hub-hub間はGlobalピアリング
Virtual Machine
- 各リージョンのSpokeに疎通確認用のLinux VMを適当に立てる
Azure Firewall
- ピアリングは2ホップ制限があるため、経路が伝搬されない
- パケットフォワーダとして利用
VM用のユーザ定義ルート(UDR)
- 各SpokeのVMからの通信をhubのAzure Firewallに向ける
- 0.0.0.0/0のネクストホップをAzure FirewallのプライベートIPに指定する
- これによりVNET(Spoke及びピアリング先のHub)外への通信は全てAzure Firewallへ
Azure Firewall用のUDR
- Azure FirewallはリモートのSpokeのアドレス空間をピアリング越しに認識できない(2ホップ先)ので、AzureFirewallSubnetにUDRを作成する
- リモートのSpokeへのトラフィックのネクストホップを対向のAzure FiewallのプライベートIPにする(hub同士はピアリングされているためプライベートIPで到達可能)
Azure Firewallのネットワークルール
- SpokeからのすべてのトラフィックがAzure Firewallを通るため、許可する通信を宣言
- 両側のAzure Firewallにて、Spoke->リモートSpoke、リモートSpoke->Spokeへの通信を許可するルールを作成
- 下記のイメージ
Azure Bastion
- spokeのVMはNSGでSSHを許可していても、デフォルトルートがAzure Firewall(ステートフルFW)を向いているため、非対称ルーティングとなりSSH不可
- Azure BastionからSSHして対応
検証
Network watcherの「接続のトラブルシューティング」
- eastusのVMからcentralusのVMのプライベートIPへのICMPをテストしてみる
- Azure Firewallを2つ経由しつつVM間で疎通ができていることが確認できる
Azure BastionでSSHしてping
- 通ったのでヨシ
おわり
AzureFirewallSubnetのUDR付与できるの知らなかった+すべてのリソース作成と設定終えてテスト一発で通ったのがとても気持ちよかった。Zennで記事を書くUXも滑らかなのでQiitaから移ろうか考え中。
Bicep
GitHubで編集を提案
Discussion