🍐

ExpressRoute Gateway のルートテーブルを確認する方法

2023/09/22に公開

はじめに

ExpressRoute Circuit は、Azure Portal からルートテーブルを確認することができます。
ですが、ExpressRoute Gateway は、Azure Portal からルートテーブルを確認することができません。

Azure PowerShell または Azure CLI を利用すれば ExpressRoute Gateway のルートテーブルを確認することができますので、実際にやってみて、結果をメモとして残しておきます。
実行結果のキャプチャをペタペタ張っておくだけの記事です。

最初に、まとめ

ルートテーブルを確認する方法を表形式でまとめておきます。

リソース Azure Portal Azure Powershell Azure CLI
ExpressRoute Gateway × get-azVirtualNetworkGatewaylearnedRoute az network vnet-gateway list-learned-routes
Azure Route Server × get-azRouteServerPeerlearnedRoute または get-azRouteServerAdvertisedRoute az network routeserver peering list-learned-routes または az network routeserver peering list-advertised-routes
ExpressRoute Circuit 確認できる Get-AzExpressRouteCircuitRouteTable または Get-AzExpressRouteCircuitRouteTableSummary az network express-route peering list-route-tables または az network express-route peering list-route-tables-summary

検証環境の構成

今回の検証環境は、2つの VNet 間を ExpressRouteCircuit で繋ぎ、右側、DEMO-ER という VNet には、Azure Route Server と NVA (quaaga) も配置しています。

一応、右側 ExpressRoute Gateway のルートテーブルを確認してみようというのが今回の趣旨ですが、せっかくなので、ExpressRoute Circuit と Azure Route Server のルートテーブルも確認してみます。

1.ExpressRoute Gateway のルートテーブル を確認する

Azure PowerShell、Azure CLI で若干書式が違いますが、どちらも、テーブル形式で見やすく表示することができます。

今回、NVA として Quagga をたて、192.168.0.0/24 のセグメントを Route Server (10.1.2.4 及び 10.1.2.5) へ eBGP で広報しています。ExpressRoute Gateway は、iBGPで Route Server と接続しており、NVA からの経路がしっかり学習されていることがわかります。ちなみに、nexthop 属性などを付けていないため、nexthop は Quagga 自身(10.1.1.4) となっています。

また、ExpressRoute Circuit 経由で、模擬オンプレミス 10.100.0.0/16 のセグメントへの経路も学習されていることがわかります。

1-1.Azure PowerShell で確認する方法

PowerShell コマンド例
get-azVirtualNetworkGatewaylearnedRoute -ResourceGroupName "ExpressRouteGatewayRG" -VirtualNetworkGatewayName "ExpressRouteGateway"
実行結果例
PS /> get-azVirtualNetworkGatewaylearnedRoute -ResourceGroupName "DEMO-ER" -VirtualNetworkGatewayName "demo-ergateway"

LocalAddress Network        NextHop  SourcePeer Origin  AsPath      Weight
------------ -------        -------  ---------- ------  ------      ------
10.1.0.13    10.1.0.0/16             10.1.0.13  Network             32768
10.1.0.13    192.168.0.0/24 10.1.1.4 10.1.2.4   IBgp    65001       32768
10.1.0.13    192.168.0.0/24 10.1.1.4 10.1.2.5   IBgp    65001       32768
10.1.0.13    10.100.0.0/16  10.1.0.5 10.1.0.5   EBgp    12076-12076 32769
10.1.0.13    10.100.0.0/16  10.1.0.4 10.1.0.4   EBgp    12076-12076 32769
10.1.0.13    10.100.0.0/16  10.1.0.5 10.1.2.4   IBgp    12076-12076 32768
10.1.0.13    10.100.0.0/16  10.1.0.5 10.1.2.5   IBgp    12076-12076 32768

●参考画面キャプチャ

1-2.Azure CLI で確認する方法

Azure CLI コマンド例
az network vnet-gateway list-learned-routes -g MyResourceGroup -n MyVnetGateway
実行結果例
masato [ / ]$ az network vnet-gateway list-learned-routes -g "DEMO-ER" -n "demo-ergateway" --output table
Network         NextHop    Origin    SourcePeer    AsPath       Weight
--------------  ---------  --------  ------------  -----------  --------
10.1.0.0/16                Network   10.1.0.13                  32768
192.168.0.0/24  10.1.1.4   IBgp      10.1.2.4      65001        32768
192.168.0.0/24  10.1.1.4   IBgp      10.1.2.5      65001        32768
10.100.0.0/16   10.1.0.5   EBgp      10.1.0.5      12076-12076  32769
10.100.0.0/16   10.1.0.4   EBgp      10.1.0.4      12076-12076  32769
10.100.0.0/16   10.1.0.5   IBgp      10.1.2.4      12076-12076  32768
10.100.0.0/16   10.1.0.5   IBgp      10.1.2.5      12076-12076  32768
masato [ / ]$ 

●参考画面キャプチャ

2.Azure Route Server のルートテーブルを確認する

Azure PowerShell、Azure CLI で確認できます。
ただし、Azure CLI は、 --output table オプションを利用してもテーブル形式での出力ができず、Azure PowerShell のほうが使いやすく感じました。

Azure Route Server は、NVA と ピア を張って利用します。ルートテーブルを確認する際には、ピア名を指定する必要があります。また、ピアから学習したルートと、ピアにアドバタイズしているルートを確認するコマンドが分かれています。

ピア名を指定する。上記キャプチャの例だと "quagga"

2-1.Azure PowerShell で確認する方法

get-azRouteServerPeerlearnedRoute コマンド例と参考実行結果
PowerShell コマンド例
get-azRouteServerPeerlearnedRoute -ResourceGroupName "RouteServerRG" -RouteServerName "RouteServer" -PeerName "PeerName"   
実行結果例
PS /> get-azRouteServerPeerlearnedRoute -ResourceGroupName "DEMO-ER" -RouteServerName "demo-ARS" -PeerName "quagga"

LocalAddress Network        NextHop  SourcePeer Origin AsPath Weight
------------ -------        -------  ---------- ------ ------ ------
10.1.2.5     192.168.0.0/24 10.1.1.4 10.1.1.4   EBgp   65001  32768
10.1.2.4     192.168.0.0/24 10.1.1.4 10.1.1.4   EBgp   65001  32768

PS /> 
Get-AzRouteServerPeerAdvertisedRoute コマンド例と参考実行結果
PowerShell コマンド例
Get-AzRouteServerPeerAdvertisedRoute -ResourceGroupName "RouteServerRG" -RouteServerName "demo-ARS" -PeerName "quagga"
実行結果例
PS /> Get-AzRouteServerPeerAdvertisedRoute -ResourceGroupName "DEMO-ER" -RouteServerName "demo-ARS" -PeerName "quagga"

LocalAddress Network       NextHop  SourcePeer Origin AsPath            Weight
------------ -------       -------  ---------- ------ ------            ------
10.1.2.5     10.1.0.0/16   10.1.2.5            Igp    65515             0
10.1.2.5     10.100.0.0/16 10.1.2.5            Igp    65515-12076-12076 0
10.1.2.4     10.1.0.0/16   10.1.2.4            Igp    65515             0
10.1.2.4     10.100.0.0/16 10.1.2.4            Igp    65515-12076-12076 0

PS /> 

●参考画面キャプチャ

2-2.Azure CLI で確認する方法

az network routeserver peering list-learned-routes コマンド例と参考実行結果
Azure CLI コマンド例
az network routeserver peering list-learned-routes -g MyResourceGroup --routeserver MyRouteServer -n MyRouteServerPeer
実行結果例
masato [ / ]$ az network routeserver peering list-learned-routes -g "DEMO-ER" --routeserver "demo-ARS" -n "quagga"
{
  "RouteServiceRole_IN_0": [
    {
      "asPath": "65001",
      "localAddress": "10.1.2.5",
      "network": "192.168.0.0/24",
      "nextHop": "10.1.1.4",
      "origin": "EBgp",
      "sourcePeer": "10.1.1.4",
      "weight": 32768
    }
  ],
  "RouteServiceRole_IN_1": [
    {
      "asPath": "65001",
      "localAddress": "10.1.2.4",
      "network": "192.168.0.0/24",
      "nextHop": "10.1.1.4",
      "origin": "EBgp",
      "sourcePeer": "10.1.1.4",
      "weight": 32768
    }
  ]
}
masato [ / ]$ 
az network routeserver peering list-advertised-routes コマンド例と参考実行結果
Azure CLI コマンド例
az network routeserver peering list-advertised-routes -g MyResourceGroup --routeserver MyRouteServer -n MyRouteServerPeer
実行結果例
masato [ / ]$ az network routeserver peering list-advertised-routes -g "DEMO-ER" --routeserver "demo-ARS" -n "quagga"
{
  "RouteServiceRole_IN_0": [
    {
      "asPath": "65515",
      "localAddress": "10.1.2.5",
      "network": "10.1.0.0/16",
      "nextHop": "10.1.2.5",
      "origin": "Igp",
      "weight": 0
    },
    {
      "asPath": "65515-12076-12076",
      "localAddress": "10.1.2.5",
      "network": "10.100.0.0/16",
      "nextHop": "10.1.2.5",
      "origin": "Igp",
      "weight": 0
    }
  ],
  "RouteServiceRole_IN_1": [
    {
      "asPath": "65515",
      "localAddress": "10.1.2.4",
      "network": "10.1.0.0/16",
      "nextHop": "10.1.2.4",
      "origin": "Igp",
      "weight": 0
    },
    {
      "asPath": "65515-12076-12076",
      "localAddress": "10.1.2.4",
      "network": "10.100.0.0/16",
      "nextHop": "10.1.2.4",
      "origin": "Igp",
      "weight": 0
    }
  ]
}
masato [ / ]$ 

●参考画面キャプチャ

3.Express Route Circuit のルートテーブルを確認する方法

ExpressRoute Circuit は、Azure Portal からルートテーブルを確認することができます。
Azure PowerShell または Azure CLI を利用しても確認可能ですが、やはり --output table オプションを利用しても Azure CLI はテーブルを表示できませんでした。

Azure Portal か Azure PowerShell で確認するのが良いかと思います。

3-1.Azure Portal で確認する方法

Azure Portal -> ExpressRoute Circuit -> ピアリング -> Azure プライベートピアリング を選択し、上部 [ルート テーブルを表示する] 選択します。

ルートテーブルが表示されます

3-2.Azure PowerShell で確認する方法

Get-AzExpressRouteCircuitRouteTable コマンド例と参考実行結果
PowerShell コマンド例
Get-AzExpressRouteCircuitRouteTable -ResourceGroupName "RG-ERCircuit" -ExpressRouteCircuitName "ERCircuits" -PeeringType "AzurePrivatePeering" -DevicePath "Primary"
実行結果例
PS /> Get-AzExpressRouteCircuitRouteTable -ResourceGroupName "RG-ERCircuit" -ExpressRouteCircuitName "ERCircuits" -PeeringType "AzurePrivatePeering" -DevicePath "Primary"

Network        NextHop      LocPrf Weight Path
-------        -------      ------ ------ ----
10.1.0.0/16    10.1.0.13*   100    0      65515 I…
10.1.0.0/16    10.1.0.12    100    0      65515 I…
10.100.0.0/16  10.100.1.12* 100    0      65515 I…
10.100.0.0/16  10.100.1.13  100    0      65515 I…
192.168.0.0/24 10.1.0.12*   100    0      65515 65001 I…
192.168.0.0/24 10.1.0.13    100    0      65515 65001 I…

PS /> 
Get-AzExpressRouteCircuitRouteTableSummary コマンド例と参考実行結果
PowerShell コマンド例
Get-AzExpressRouteCircuitRouteTableSummary -ResourceGroupName $RG -ExpressRouteCircuitName $CircuitName -PeeringType "AzurePrivatePeering" -DevicePath "Primary"
実行結果例
PS /> Get-AzExpressRouteCircuitRouteTableSummary -ResourceGroupName "RG-ERCircuit" -ExpressRouteCircuitName "ERCircuits" -PeeringType "AzurePrivatePeering" -DevicePath "Primary"

Neighbor          V AsProperty UpDown StatePfxRcd
--------          - ---------- ------ -----------
10.1.0.12+59440   4 65515      0      2
10.1.0.13+179     4 65515      0      2
10.100.1.12+63323 4 65515      0      1
10.100.1.13+49497 4 65515      0      1
172.16.0.9+179    4 65151      0      Connect

PS /> 

●参考画面キャプチャ

3-3.Azure CLI で確認する方法

--output table を付けても、表形式での表示ができませんでした。

az network express-route list-route-tables コマンド例と参考実行結果
Azure CLI コマンド例
az network express-route list-route-tables -g MyResourceGroup -n MyCircuit --path primary --peering-name AzurePrivatePeering
実行結果例
masato [ ~ ]$ az network express-route list-route-tables -g "RG-ERCircuit" -n "ERCircuits" --path primary --peering-name AzurePrivatePeering
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "value": [
    {
      "locPrf": "100",
      "network": "10.1.0.0/16",
      "nextHop": "10.1.0.13*",
      "path": "65515 I\n                    ",
      "weight": 0
    },
    {
      "locPrf": "100",
      "network": "10.1.0.0/16",
      "nextHop": "10.1.0.12",
      "path": "65515 I\n                    ",
      "weight": 0
    },
    {
      "locPrf": "100",
      "network": "10.100.0.0/16",
      "nextHop": "10.100.1.12*",
      "path": "65515 I\n                    ",
      "weight": 0
    },
    {
      "locPrf": "100",
      "network": "10.100.0.0/16",
      "nextHop": "10.100.1.13",
      "path": "65515 I\n                    ",
      "weight": 0
    },
    {
      "locPrf": "100",
      "network": "192.168.0.0/24",
      "nextHop": "10.1.0.12*",
      "path": "65515 65001 I\n                    ",
      "weight": 0
    },
    {
      "locPrf": "100",
      "network": "192.168.0.0/24",
      "nextHop": "10.1.0.13",
      "path": "65515 65001 I\n                    ",
      "weight": 0
    }
  ]
}
masato [ ~ ]$ 
az network express-route list-route-tables-summary コマンド例と参考実行結果
Azure CLI コマンド例
az network express-route list-route-tables-summary -g MyResourceGroup -n MyCircuit --path primary --peering-name AzurePrivatePeering
実行結果例
masato [ / ]$ az network express-route list-route-tables-summary -g "RG-ERCircuit" -n "ERCircuits" --path primary --peering-name AzurePrivatePeering
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "value": [
    {
      "as": 65515,
      "neighbor": "10.1.0.12+59440",
      "statePfxRcd": "2",
      "upDown": "0",
      "v": 4
    },
    {
      "as": 65515,
      "neighbor": "10.1.0.13+179",
      "statePfxRcd": "2",
      "upDown": "0",
      "v": 4
    },
    {
      "as": 65515,
      "neighbor": "10.100.1.12+63323",
      "statePfxRcd": "1",
      "upDown": "0",
      "v": 4
    },
    {
      "as": 65515,
      "neighbor": "10.100.1.13+49497",
      "statePfxRcd": "1",
      "upDown": "0",
      "v": 4
    },
    {
      "as": 65151,
      "neighbor": "172.16.0.9+179",
      "statePfxRcd": "Connect",
      "upDown": "0",
      "v": 4
    }
  ]
}

●参考画面キャプチャ

参考URL

参考 - Azure Route Server / Quagga の構築

https://zenn.dev/microsoft/articles/expressroute-ars-quagga

参考 - 他リソースのルーティングを確認

Azure Firewall, Application Gateway のルーティングを確認する方法はこちら
https://qiita.com/Isato-Hiyama/items/d3fe2226d103a601463e

Microsoft (有志)

Discussion