ExpressRoute + VPN の構成を組み替えてみる

2022/12/03に公開

ExpressRoute + VPN の構成を組み替えてみる

ちょっと思うところがあって、ExpressRoute + VPN の構成の変わった形を考えてみます。
参考にしているのは以下の docs です。

routing

https://learn.microsoft.com/azure/vpn-gateway/site-to-site-vpn-private-peering

こちらは ExpressRoute Gateway と VPN Gateway が同じ VNet に配置されています。
大体のケースではこれで問題ないのですが、今回は別の VNet に置いてみようと思います。

構成イメージ

構成イメージはこちらです。

er-spoke-vpn
今回構成したもの構成イメージ

参考実装

参考実装はこちらです。
実装の詳細についてはこちらにも書かれています。
Bicep ファイルもあるのである程度再現環境も作れるはずです。

https://github.com/skmkzyk/bicep-templates/tree/main/20221202_er-spoke-vpn

構成のポイント

とある理由から 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 が異なることには注意かと思います。

vpngw-vpn-prigate-ip
VPN Gateway の Properties から VPN の Private IP address が見れる

vpngw-bgp-private-ip
VPN Gateway の Configuration から BGP の Private IP address が見れる

図を入れることでわかりやすくなるかはわかりませんが、ExpressRoute の BGP「だけ」が構成されている状態での通信可能な範囲はこの色のついた部分です。
この状態では、Spoke VNet の GatewaySubnet のみを reachable としています。

er-spoke-vpn-er-reachability
ExpressRoute のみで reachable な範囲

これに加えて、VPN を構成することで Spoke VNet 全体が reachable となります。
今回は同じ Cisco Router で ExpressRoute と VPN の両方を構成していますが、これを分けることで一種の分離が構成できると考えています。

er-spoke-vpn-vpn-reachability
VPN を組み合わせることで reachable な範囲

結果

ExpressRoute で直接接続されている peer、172.16.0.2 との経路広報はこんな感じです。
advertised-routesip 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 VPNBGP01advertised-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 にしか到達できない。

er-spoke-vpn-isolated
1 つの ExpressRoute を共用しつつ、VPN を利用したネットワークの分離化

参考

  • Azure Route Server と FRRouting の間で BGP ピアを張る

https://zenn.dev/skmkzyk/articles/azure-route-server-frrouting

  • A different architecture pattern for ER + VPN

https://github.com/skmkzyk/bicep-templates/tree/main/20221202_er-spoke-vpn

  • Hub-spoke architecture without Remote gateway with VXLAN

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

Microsoft (有志)

Discussion