ExpressRoute + VPN の構成を組み替えてみる
ExpressRoute + VPN の構成を組み替えてみる
ちょっと思うところがあって、ExpressRoute + VPN の構成の変わった形を考えてみます。
参考にしているのは以下の docs です。
こちらは ExpressRoute Gateway と VPN Gateway が同じ VNet に配置されています。
大体のケースではこれで問題ないのですが、今回は別の VNet に置いてみようと思います。
構成イメージ
構成イメージはこちらです。
今回構成したもの構成イメージ
参考実装
参考実装はこちらです。
実装の詳細についてはこちらにも書かれています。
Bicep ファイルもあるのである程度再現環境も作れるはずです。
構成のポイント
とある理由から Spoke 全体をオンプレミスから直接接続できるようにはしたくなかったため、Remote Gateway を使っていません。
そのうえで、Spoke においた VPN Gateway と on-premise 側が通信できるよう、FRRouting + ARS (Azure Route Server) の構成で工夫しています。
ハマりポイントとしては "Download configuration" からダウンロードできる Cisco config の sample が Public IP のままになっていて、ちょっと悩みました。
実際の Azure Portal を見たほうがわかりやすいかと思いますが、それでも VPN の IP address と BGP の IP address が異なることには注意かと思います。
VPN Gateway の Properties から VPN の Private IP address が見れる
VPN Gateway の Configuration から BGP の Private IP address が見れる
図を入れることでわかりやすくなるかはわかりませんが、ExpressRoute の BGP「だけ」が構成されている状態での通信可能な範囲はこの色のついた部分です。
この状態では、Spoke VNet の GatewaySubnet のみを reachable としています。
ExpressRoute のみで reachable な範囲
これに加えて、VPN を構成することで Spoke VNet 全体が reachable となります。
今回は同じ Cisco Router で ExpressRoute と VPN の両方を構成していますが、これを分けることで一種の分離が構成できると考えています。
VPN を組み合わせることで reachable な範囲
結果
ExpressRoute で直接接続されている peer、172.16.0.2 との経路広報はこんな感じです。
advertised-routes
は ip prefix-list ERBGP01
によって少し絞ってあります。
tky01#show ip bgp nei 172.16.0.2 advertised-routes
BGP table version is 29, 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,
t secondary path,
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.10.0/24 0.0.0.0 0 32768 i
*> 10.100.20.1/32 0.0.0.0 0 32768 i
Total number of prefixes 2
received-routes
に 10.10.200.0/24 が含まれているのがポイントで、これにより VPN Gateway への reachablity が確保されます。
tky01#show ip bgp nei 172.16.0.2 received-routes
BGP table version is 29, 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,
t secondary path,
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.0.0.0/16 172.16.0.2 0 12076 i
*> 10.10.200.0/24 172.16.0.2 0 12076 ?
Total number of prefixes 2
VPN Gateway との BGP との状況はこんな感じです。
こちらに関しては ip prefix-list VPNBGP01
で advertised-routes
を絞ってあります。
tky01#show ip bgp nei 10.10.200.6 advertised-routes
BGP table version is 29, 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,
t secondary path,
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.10.0/24 0.0.0.0 0 32768 i
Total number of prefixes 1
こちらの received-routes
に 10.10.0.0/16 が含まれているので Spoke 側へアクセスができるということですね。
tky01#show ip bgp nei 10.10.200.6 received-routes
BGP table version is 29, 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,
t secondary path,
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.10.0.0/16 10.10.200.6 0 65155 i
Total number of prefixes 1
こちらは Azure VM 上の FRRouting での状況です。
10.10.200.0/24 を明示的に経路広報することで Spoke の VPN Gateway のみ (Spoke の GatewaySubnet のみ) が on-premise から直接接続できるようにします。
vm-hub00# show ip bgp nei 10.0.210.4 advertised-routes
BGP table version is 36, local router ID is 10.0.0.4, vrf id 0
Default local pref 100, local AS 65001
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
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.10.200.0/24 0.0.0.0 0 32768 ?
Total number of prefixes 1
received-routes
についてはあまり気にしていません。
vm-hub00# show ip bgp nei 10.0.210.4 received-routes
BGP table version is 36, local router ID is 10.0.0.4, vrf id 0
Default local pref 100, local AS 65001
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
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.0.0.0/16 10.0.210.4 0 65515 i
*> 10.100.10.0/24 10.0.210.4 0 65515 12076 65150 i
*> 10.100.20.1/32 10.0.210.4 0 65515 12076 65150 i
Total number of prefixes 3
発展例
例えばこういうこともできる、という発展形の一つを示しておきます。
「左上の Client PC と右上の VMs」と「左下の Client PC と右下の VPN VMs」をそれぞれペアと考えてください。
左上の Client PC からは左上の VPN Router、右上の VPN Gateway を経由して、右上の VMs にしか到達できない。
左下の Client PC からは左下の VPN Router、右下の VPN Gateway を経由して、右下の VMs にしか到達できない。
1 つの ExpressRoute を共用しつつ、VPN を利用したネットワークの分離化
参考
- Azure Route Server と FRRouting の間で BGP ピアを張る
- A different architecture pattern for ER + VPN
- Hub-spoke architecture without Remote gateway with VXLAN
Update log
- 全体的に
# (見出し1)
から## (見出し2)
に変更 - 2024/07/14 - 画像の内部的なファイル パスを変更 - 2024/07/14
- tag の修正 - 2024/07/14
Discussion