ExpressRoute 経由で hub-spoke1-spoke2 の spoke2 までは届きません!
はじめに
Azure VNet の VNet Peering は推移的ではありません。
例えば
VNet1 ---(peerig)--- VNet2 ---(peering)--- VNet3
という場合、VNet Peering で接続されている VNet1 から VNet2 へは通信できますが、その奥の VNet3 への通信はできません。
さて、ExpressRoute も加えた以下の構成の場合には、オンプレミス拠点から、VNet1,2,3 どこまで通信で可能でしょうか?
On-Premise ---(ExpressRoute)--- VNet1 ---(peerig)--- VNet2 ---(peering)--- VNet3
答えは VNet2 まで、です。
試す - VNetPeering - useRemoteGateway の設定
では、VNetを作り、Peering をしていきます。
まずは ExpressRoute Gateway を配置している Hub VNet と Spoke VNet 間の VNet Peering です。
Hub側では、Spoke側に ExpressRoute Gateway の利用を許可する設定、また、
Spoke 側から、Hub側にあるゲートウェイを利用する設定が実施できます。
一方で、Spoke VNet 間の VNet Peering を設定します。
こちらの Peering では、ゲートウェイを利用する設定ができません。
この設定の有無がほぼ答えなのですが、ExpressRoute 経由でオンプレミスに広報されるルートは、リモートゲートウェイ設定の有無で決まります。
動作を確認
オンプレミスの PC から、各 VNet 内の VM へ ping を実施します。
想定通りの以下の結果が得られました。
VNet1 (hub) : 10.200.0.4 - 応答アリ
VNet2 (spoke1) : 10.210.0.4 - 応答アリ
VNet3 (spoke2) : 10.220.0.4 - 応答なし
C:\Windows\System32>ping 10.200.0.4
10.200.0.4 に ping を送信しています 32 バイトのデータ:
10.200.0.4 からの応答: バイト数 =32 時間 =5ms TTL=62
10.200.0.4 からの応答: バイト数 =32 時間 =4ms TTL=62
10.200.0.4 からの応答: バイト数 =32 時間 =4ms TTL=62
10.200.0.4 からの応答: バイト数 =32 時間 =3ms TTL=62
10.200.0.4 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 3ms、最大 = 5ms、平均 = 4ms
C:\Windows\System32>
C:\Windows\System32>ping 10.210.0.4
10.210.0.4 に ping を送信しています 32 バイトのデータ:
10.210.0.4 からの応答: バイト数 =32 時間 =5ms TTL=62
10.210.0.4 からの応答: バイト数 =32 時間 =3ms TTL=62
10.210.0.4 からの応答: バイト数 =32 時間 =4ms TTL=62
10.210.0.4 からの応答: バイト数 =32 時間 =4ms TTL=62
10.210.0.4 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 3ms、最大 = 5ms、平均 = 4ms
C:\Windows\System32>
C:\Windows\System32>ping 10.220.0.4
10.220.0.4 に ping を送信しています 32 バイトのデータ:
10.100.20.1 からの応答: 宛先ホストに到達できません。
10.100.20.1 からの応答: 宛先ホストに到達できません。
要求がタイムアウトしました。
10.100.20.1 からの応答: 宛先ホストに到達できません。
10.220.0.4 の ping 統計:
パケット数: 送信 = 4、受信 = 3、損失 = 1 (25% の損失)、
C:\Windows\System32>
ルートテーブルなど
ExpressRoute 側のルートテーブルを見てみます。
ExpressRoute Gateway の存在する 10.200.0.0/16 のサブネットと、リモートゲートウェイの設定を有効化した Spoke1 の 10.210.0.0/16 のサブネットが、オンプレミス側に広報されていることがわかります。
Spoke2 の 10.220.0.0/16 のサブネットは、オンプレミス側に広報されていません。
また、オンプレミス側スイッチのルートテーブルを見てみます。
ExpressRoute 側から広報されているルートを BGP で受け取っていることを確認できます。
Router#
Router#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 4 subnets, 3 masks
C 10.100.20.0/24 is directly connected, Vlan20
L 10.100.20.1/32 is directly connected, Vlan20
B 10.200.0.0/16 [20/0] via 172.16.0.10, 20:40:04
B 10.210.0.0/16 [20/0] via 172.16.0.10, 00:01:29
172.16.0.0/16 is variably subnetted, 2 subnets, 2 masks
C 172.16.0.8/30 is directly connected, GigabitEthernet9.722
L 172.16.0.9/32 is directly connected, GigabitEthernet9.722
Router#
Router#show ip bgp
BGP table version is 20, local router ID is 172.16.0.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.20.0/24 0.0.0.0 0 32768 i
*> 10.200.0.0/16 172.16.0.10 0 12076 i
*> 10.210.0.0/16 172.16.0.10 0 12076 i
Router#
まとめ
VNet Peering が推移的でないことにより、On-Premise(ExpressRoute) - Hub - Spoke1 - Spoke2 の構成で、On-Premise から Spoke2 への通信ができないことがわかりました。
このことはある種制限のようにも思えますが、この特徴を生かし、Spoke2 を DMZ のように利用することが可能です。
Spoke1 に配置したアプリケーション類を オンプレミス側 からも、Spoke2 に配置した ApplicationGateway(WAF) を経由して インターネット側からも利用可能にしつつ、Spoke2 インターネット側 から オンプレミス への侵入を難しくすることができるからです。
この点は、こちらのガイド "Azure CAF Landing Zones 設計・構築ハンズオン"-"10.Spoke B DMZ WAF の作成" で詳しく解説されており、参考になります。
参考URL
Discussion