はじめに
Virtual WAN のルーティングと向き合うシリーズ第五弾です。今までのシリーズはこちら。今回はルートマップを利用して経路をフィルタリングします。
- Virtual WAN のルーティングと向き合う(基本的な動作とルーティングの優先順位編)
- Virtual WAN のルーティングと向き合う(ルートテーブル編)
- Virtual WAN のルーティングと向き合う(ラベル編)
- Virtual WAN のルーティングと向き合う(ExpressRoute のトランジット接続)
ルートマップがうれしいシナリオ
Azure の仮想ネットワークゲートウェイは、仮想ネットワークのアドレス空間をそのままオンプレミスに広報します。つまり、1つのハブ&スポークな仮想ネットワークに500個のスポーク仮想ネットワークが接続している場合、オンプレミスには500個(+ハブのアドレス空間)の経路が聞こえてきます。Azure 側が大規模になればなるほど、オンプレミスのネットワーク担当からすると「経路集約してオンプレミスに広報してくれ…」という気持ちになります。
ですが、通常の仮想ネットワークゲートウェイには経路集約の機能がありません。一方で、Virtual WAN であればルートマップを利用して経路集約が可能です。10.0.0.0/24 から 10.0.255.0/24 までの256個のスポーク仮想ネットワークが存在していたとしても、Virtual WAN のルートマップを使えばオンプレミスに広報されるアドレス空間を 10.0.0.0/16 の1つだけにできます。シンプル!
事前準備
いつもの通り、オンプレミス側には OCI を利用します。そして、Virtual WAN に 192.168.10.0/24 - 192.168.24.0/24 と 10.10.0.0/16 - 10.24.0.0/16 を接続します。
resource vwan 'Microsoft.Network/virtualWans@2021-05-01' = {
name: 'vwan'
location: location
properties: {
allowBranchToBranchTraffic: true
allowVnetToVnetTraffic: true
type: 'Standard'
disableVpnEncryption: false
}
}
resource vhub 'Microsoft.Network/virtualHubs@2021-05-01' = {
name: 'vhub'
location: location
properties: {
virtualWan: {
id: vwan.id
}
addressPrefix: '10.0.0.0/16'
}
}
resource erGw 'Microsoft.Network/expressRouteGateways@2024-10-01' = {
name: 'ergw'
location: location
properties: {
virtualHub: {
id: vhub.id
}
allowNonVirtualWanTraffic: true
autoScaleConfiguration: {
bounds: {
min: 2
max: 2
}
}
}
}
resource vnet192 'Microsoft.Network/virtualNetworks@2021-05-01' = [
for index in range(10, 30): {
name: 'vnet192-${index}'
location: location
properties: {
addressSpace: {
addressPrefixes: [
'192.168.${index}.0/24'
]
}
subnets: [
{
name: 'subnet1'
properties: {
addressPrefix: '192.168.${index}.0/25'
}
}
]
}
}
]
resource vnet10 'Microsoft.Network/virtualNetworks@2021-05-01' = [
for index in range(10, 30): {
name: 'vnet10-${index}'
location: location
properties: {
addressSpace: {
addressPrefixes: [
'10.${index}.0.0/16'
]
}
subnets: [
{
name: 'subnet1'
properties: {
addressPrefix: '10.${index}.0.0/24'
}
}
]
}
}
]
resource vhubConn192 'Microsoft.Network/virtualHubs/hubVirtualNetworkConnections@2024-10-01' = [
for i in range(0, 15): {
parent: vhub
name: 'vhubToVnet192-vnet192-${i+10}'
properties: {
allowHubToRemoteVnetTransit: true
allowRemoteVnetToUseHubVnetGateways: true
remoteVirtualNetwork: {
id: vnet192[i].id
}
enableInternetSecurity: false
}
}
]
resource vhubConn10 'Microsoft.Network/virtualHubs/hubVirtualNetworkConnections@2024-10-01' = [
for i in range(0, 15): {
parent: vhub
name: 'vhubToVnet10-${i+10}'
properties: {
allowHubToRemoteVnetTransit: true
allowRemoteVnetToUseHubVnetGateways: true
remoteVirtualNetwork: {
id: vnet10[i].id
}
enableInternetSecurity: false
}
}
]
そうすると、オンプレミス側のルーティングは以下のようになります。よさげです。
# OCI のルートテーブルをエクスポートした JSON ファイル
$routes = get-content '.\2nd_before_drg-route-rule-dump (1).json'
$routes = $routes | ConvertFrom-Json
$routes | Select-Object destination,routeProvenance
destination routeProvenance
----------- ---------------
10.0.0.0/16 VIRTUAL_CIRCUIT
10.10.0.0/16 VIRTUAL_CIRCUIT
10.11.0.0/16 VIRTUAL_CIRCUIT
10.12.0.0/16 VIRTUAL_CIRCUIT
10.13.0.0/16 VIRTUAL_CIRCUIT
10.14.0.0/16 VIRTUAL_CIRCUIT
10.15.0.0/16 VIRTUAL_CIRCUIT
10.16.0.0/16 VIRTUAL_CIRCUIT
10.17.0.0/16 VIRTUAL_CIRCUIT
10.18.0.0/16 VIRTUAL_CIRCUIT
10.19.0.0/16 VIRTUAL_CIRCUIT
10.20.0.0/16 VIRTUAL_CIRCUIT
10.21.0.0/16 VIRTUAL_CIRCUIT
10.22.0.0/16 VIRTUAL_CIRCUIT
10.23.0.0/16 VIRTUAL_CIRCUIT
10.24.0.0/16 VIRTUAL_CIRCUIT
172.16.0.0/25 VCN
172.16.0.128/25 VCN
192.168.10.0/24 VIRTUAL_CIRCUIT
192.168.11.0/24 VIRTUAL_CIRCUIT
192.168.12.0/24 VIRTUAL_CIRCUIT
192.168.13.0/24 VIRTUAL_CIRCUIT
192.168.14.0/24 VIRTUAL_CIRCUIT
192.168.15.0/24 VIRTUAL_CIRCUIT
192.168.16.0/24 VIRTUAL_CIRCUIT
192.168.17.0/24 VIRTUAL_CIRCUIT
192.168.18.0/24 VIRTUAL_CIRCUIT
192.168.19.0/24 VIRTUAL_CIRCUIT
192.168.20.0/24 VIRTUAL_CIRCUIT
192.168.21.0/24 VIRTUAL_CIRCUIT
192.168.22.0/24 VIRTUAL_CIRCUIT
192.168.23.0/24 VIRTUAL_CIRCUIT
192.168.24.0/24 VIRTUAL_CIRCUIT
Virtual WAN のデフォルトルートテーブルは以下になります。OCI からは 172.16.0.0/25 と 172.16.128.0/25 が聞こえてきています。
# Virtual WAN の有効なルートをエクスポートした CSV
$routes = get-content '.\2nd_begore_effectiveRoutes.csv'
$routes | ConvertFrom-Csv | Select-Object Prefix,"Next Hop Type" | Sort-Object Prefix
Prefix Next Hop Type
------ -------------
10.10.0.0/16 Virtual Network Connection
10.11.0.0/16 Virtual Network Connection
10.12.0.0/16 Virtual Network Connection
10.13.0.0/16 Virtual Network Connection
10.14.0.0/16 Virtual Network Connection
10.15.0.0/16 Virtual Network Connection
10.16.0.0/16 Virtual Network Connection
10.17.0.0/16 Virtual Network Connection
10.18.0.0/16 Virtual Network Connection
10.19.0.0/16 Virtual Network Connection
10.20.0.0/16 Virtual Network Connection
10.21.0.0/16 Virtual Network Connection
10.22.0.0/16 Virtual Network Connection
10.23.0.0/16 Virtual Network Connection
10.24.0.0/16 Virtual Network Connection
172.16.0.0/25 ExpressRouteGateway
172.16.0.128/25 ExpressRouteGateway
192.168.10.0/24 Virtual Network Connection
192.168.11.0/24 Virtual Network Connection
192.168.12.0/24 Virtual Network Connection
192.168.13.0/24 Virtual Network Connection
192.168.14.0/24 Virtual Network Connection
192.168.15.0/24 Virtual Network Connection
192.168.16.0/24 Virtual Network Connection
192.168.17.0/24 Virtual Network Connection
192.168.18.0/24 Virtual Network Connection
192.168.19.0/24 Virtual Network Connection
192.168.20.0/24 Virtual Network Connection
192.168.21.0/24 Virtual Network Connection
192.168.22.0/24 Virtual Network Connection
192.168.23.0/24 Virtual Network Connection
192.168.24.0/24 Virtual Network Connection
ルートマップの作成
今回は以下のルートマップを作ります。ルートマップでは以下の3つの処理を行います。
- 192.168.0.0/19(192.168.0.1- 192.168.31.254)に該当する経路を 192.168.0.0/19に経路集約
- 172.16.0.0/25 に該当する経路を破棄
- 10.10.0.0/15 と 10.12.0.0/14,10.17.0.0/16,10.18.0.0/16,10.19.0.0/16 に該当する経路を破棄。つまり 10.16.0.0/16 は該当しないので破棄されない
resource vhubRouteMap 'Microsoft.Network/virtualHubs/routeMaps@2024-10-01' = {
name: 'vhubRouteMap'
parent: vhub
properties: {
rules: [
{
name: 'summarize_192'
matchCriteria: [
{
matchCondition: 'Contains'
routePrefix: [
'192.168.0.0/19'
]
}
]
actions: [
{
type: 'Replace'
parameters: [
{
routePrefix: [
'192.168.0.0/19'
]
}
]
}
]
nextStepIfMatched: 'Terminate'
}
{
name: 'deny_some_10_10'
matchCriteria: [
{
matchCondition: 'Contains'
routePrefix: [
'10.10.0.0/15'
'10.12.0.0/14'
'10.17.0.0/16'
'10.18.0.0/16'
'10.19.0.0/16'
]
}
]
actions: [
{
type: 'Drop'
}
]
nextStepIfMatched: 'Terminate'
}
{
name: 'Deny_some_172_16'
matchCriteria: [
{
matchCondition: 'Equals'
routePrefix: [
'172.16.0.0/25'
]
}
]
actions: [
{
type: 'Drop'
}
]
nextStepIfMatched: 'Terminate'
}
]
}
dependsOn: [
erGw
]
}
ルートマップの適用
ルートマップを作るだけでは経路を制御できません。Virtual WAN のコネクションに適用する必要があります。今回は、ExpressRoute とのコネクションにルートマップを割り当てます。また、Virtual WAN が広報している経路(10. と 192.168)と Virtual WAN が受信している経路(172.16)の両方を制御するので、Outbound Route-map と Inbound Route-map の両方に適用します。
ルートマップの適用画面
動作確認
Outbound RouteMap の動作から確認します。オンプレミスが学習した経路を見ると、以下のように 192.168.10.0/24 - 192.168.24.0/24 の経路が 192.168.0.0/19 1つになりました。また、10.10.0.0/16 から 10.19.0.0/16 の間は、10.16.0.0/16 のみになってます。ルートマップによる経路の集約と破棄がうまくいってます。
$routes = get-content '.\2nd_before_drg-route-rule-dump (1).json' #
$routes = $routes | ConvertFrom-Json
$routes | Select-Object destination,routeProvenance
destination routeProvenance
----------- ---------------
10.0.0.0/16 VIRTUAL_CIRCUIT
10.16.0.0/16 VIRTUAL_CIRCUIT
10.20.0.0/16 VIRTUAL_CIRCUIT
10.21.0.0/16 VIRTUAL_CIRCUIT
10.22.0.0/16 VIRTUAL_CIRCUIT
10.23.0.0/16 VIRTUAL_CIRCUIT
10.24.0.0/16 VIRTUAL_CIRCUIT
172.16.0.0/25 VCN
172.16.0.128/25 VCN
192.168.0.0/19 VIRTUAL_CIRCUIT
次は Inbound RouteMap の動作確認です。Virtual WAN の有効なルートを見ると、以下のようにオンプレミスから受信していた 172.16.0.0/25 が消えているのがわかります。
$routes = get-content '.\2nd_aftereffectiveRoutes.csv'
$routes | ConvertFrom-Csv | Select-Object Prefix,"Next Hop Type" | Sort-Object Prefix
Prefix Next Hop Type
------ -------------
10.10.0.0/16 Virtual Network Connection
10.11.0.0/16 Virtual Network Connection
10.12.0.0/16 Virtual Network Connection
10.13.0.0/16 Virtual Network Connection
10.14.0.0/16 Virtual Network Connection
10.15.0.0/16 Virtual Network Connection
10.16.0.0/16 Virtual Network Connection
10.17.0.0/16 Virtual Network Connection
10.18.0.0/16 Virtual Network Connection
10.19.0.0/16 Virtual Network Connection
10.20.0.0/16 Virtual Network Connection
10.21.0.0/16 Virtual Network Connection
10.22.0.0/16 Virtual Network Connection
10.23.0.0/16 Virtual Network Connection
10.24.0.0/16 Virtual Network Connection
172.16.0.128/25 ExpressRouteGateway
192.168.10.0/24 Virtual Network Connection
192.168.11.0/24 Virtual Network Connection
192.168.12.0/24 Virtual Network Connection
192.168.13.0/24 Virtual Network Connection
192.168.14.0/24 Virtual Network Connection
192.168.15.0/24 Virtual Network Connection
192.168.16.0/24 Virtual Network Connection
192.168.17.0/24 Virtual Network Connection
192.168.18.0/24 Virtual Network Connection
192.168.19.0/24 Virtual Network Connection
192.168.20.0/24 Virtual Network Connection
192.168.21.0/24 Virtual Network Connection
192.168.22.0/24 Virtual Network Connection
192.168.23.0/24 Virtual Network Connection
192.168.24.0/24 Virtual Network Connection
ルートマップ適用後に Virtual WAN に新しい仮想ネットワークを接続したときの動作も確認しました。今回は、192.168.0.0/19 の経路集約の範囲に含まれる 192.168.31.0/24 の仮想ネットワークと、含まれない 192.168.32.0/24 に仮想ネットワークを Virtual WAN に接続しました。結果は以下の通りです。ルートマップの経路集約ルールに含まれない 192.168.32.0/24 だけが新たに広報されていることがわかります。
$routes = get-content '.\4th_drg-route-rule-dump (1).json'
$routes = $routes | ConvertFrom-Json
$routes | Select-Object destination,routeProvenance
destination routeProvenance
----------- ---------------
10.0.0.0/16 VIRTUAL_CIRCUIT
10.16.0.0/16 VIRTUAL_CIRCUIT
10.20.0.0/16 VIRTUAL_CIRCUIT
10.21.0.0/16 VIRTUAL_CIRCUIT
10.22.0.0/16 VIRTUAL_CIRCUIT
10.23.0.0/16 VIRTUAL_CIRCUIT
10.24.0.0/16 VIRTUAL_CIRCUIT
172.16.0.0/25 VCN
172.16.0.128/25 VCN
192.168.0.0/19 VIRTUAL_CIRCUIT
192.168.32.0/24 VIRTUAL_CIRCUIT
まとめ
Virtual WAN のルートマップを試しました。経路集約や経路の破棄といった基本的?な経路制御はいい感じに動作しました。ほかにも AS-PATH や BGP Community も制御できます。Azure とオンプレミス間の接続で経路集約したい場合にはぜひご利用ください。
Note
- 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
- 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
- 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。