azureルートテーブルの優先度とカスタムルートの挙動を検証する|VPN環境で実測

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > azureルートテーブルの優先度とカスタムルートの挙動を検証する|VPN環境で実測
「VPN GatewayとVNetを構築したのに、オンプレからの通信が想定と違うルートを通っている」
「カスタムルート(UDR)を設定したのに、デフォルトルートの動作が変わらない」

AzureのVNetにはシステムルート・ユーザー定義ルート(UDR)・BGPルート(VPN Gateway経由)の3種類のルートが共存することがあります。どのルートが優先されるかは、Azureが定めた判定ロジックに従います。このロジックを把握しないまま設定を試行錯誤しても、原因が見えにくいまま時間を消費してしまいます。

この記事では、AzureルートテーブルのUDR・BGPルート・システムルートの優先度判定ルールを解説し、VPN Gateway接続環境でカスタムルートの挙動をazコマンドで確認する手順を説明します。想定環境はAzure上にLinux VMを含むVNetを構築した構成です。

この記事のポイント

・Azureルートテーブルの優先度はUDR>BGPルート(VPN Gateway)>システムルートの順
・最長プレフィックス一致が同一優先度内での経路選択に使われる
・az network nic show-effective-route-tableでNIC単位の実効ルートを確認できる
・Route Propagation設定でBGPルートのサブネットへの注入を制御できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Azureルートテーブルに登録される3種類のルート

AzureのVNetにサブネットを作成すると、Azureはそのサブネットに対してシステムルートを自動的に適用します。このシステムルートがベースになり、そこにVPN GatewayのBGPルートやUDRが加わることで、複数のルートが同一プレフィックスに対して存在する状態になることがあります。

システムルート(Default)
VNetを作成した時点でAzureが自動で設定するルートです。VNet内の通信(例: 10.0.0.0/16)はVNetLocal、インターネット向け(0.0.0.0/0)はInternetが規定で設定されています。手動での編集・削除はできません。

ユーザー定義ルート(UDR: User Defined Route)
管理者がazコマンドやAzureポータルで手動作成するカスタムルートです。ネクストホップに仮想アプライアンス(NVA)・VirtualNetworkGateway・Noneなどを指定することで、トラフィックの経路を制御します。

BGPルート(VirtualNetworkGateway)
VPN GatewayやExpressRoute GatewayがBGPプロトコルを使ってオンプレミスから受信したルートを、VNetのサブネットに伝播したものです。「Route Propagation(ゲートウェイルートの伝達)」が有効なサブネットに自動で注入されます。

ルート優先度の判定ロジック

1. 同じプレフィックスに複数のルートが存在する場合の優先度

同じ宛先プレフィックスに対して複数のルートが存在するとき、Azureは次の優先順位でルートを選択します。

・1位:UDR(User) ── 管理者が明示的に追加したカスタムルート
・2位:BGPルート(VirtualNetworkGateway) ── VPN/ExpressRoute Gatewayが伝播したルート
・3位:システムルート(Default) ── Azureが自動で追加した規定ルート

例えば、同じ 0.0.0.0/0(デフォルトルート)に対してUDRとBGPルートが両方ある場合、UDRが採用されます。UDRを削除しない限り、VPN Gateway側のデフォルトルートは無効化された状態が続きます。

2. 最長プレフィックス一致(Longest Prefix Match)

宛先アドレスが複数のルートのプレフィックスにマッチする場合、プレフィックス長が長い(より具体的な)ルートが優先されます。

・10.1.0.0/16 と 10.1.1.0/24 のどちらにもマッチするパケットは /24 のルートが選ばれる
・/32(ホストルート)> /24 > /16 > /8 > /0(デフォルト)の順で長いほど優先
・同一プレフィックス長で複数のルートが競合する場合は、UDR>BGP>Defaultの種類優先度が適用される

3. Route Propagation(ゲートウェイルートの伝達)の制御

ルートテーブルには「ゲートウェイルートの伝達(Propagate gateway routes)」という設定項目があります。この設定が有効(既定)だと、VPN GatewayやExpressRoute GatewayからのBGPルートがサブネットに自動で注入されます。

不要なオンプレルートをサブネットに伝播させたくない場合は、ルートテーブルの作成時に--disable-bgp-route-propagation trueを指定してRoute Propagationを無効にします。

VPN環境でルートの適用順を確認する手順

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

まず対象のルートテーブルに登録されているカスタムルートを確認します。

# ルートテーブル内のルート一覧を確認 az network route-table route list \ --resource-group myRG \ --route-table-name myRouteTable \ --output table

出力例(環境により異なります):

AddressPrefix Name NextHopIpAddress NextHopType ProvisioningState --------------- ---------- ------------------ ----------------- ------------------- 0.0.0.0/0 toFirewall 10.1.0.4 VirtualAppliance Succeeded 192.168.0.0/24 toOnPrem 10.1.1.100 VirtualAppliance Succeeded

2. NICの実効ルートを確認する(最重要手順)

ルートテーブルに登録されているルートと、VMのNICに実際に適用されている有効なルートは異なることがあります。VMのNICに実際に適用されているルート(実効ルート)を確認するには、az network nic show-effective-route-tableを使います。VPN環境でのルーティングトラブルを診断する最重要コマンドです。

Azureのネットワーク設計やVPN接続の実践的な構成については、Azureハンズオンセミナーでも詳しく扱っています。

# VMのNIC名を確認(NICのリソースIDが返る) az vm show \ --resource-group myRG \ --name myLinuxVM \ --query "networkProfile.networkInterfaces[].id" \ --output tsv # NICの実効ルートテーブルを表示(NIC名だけを指定) az network nic show-effective-route-table \ --resource-group myRG \ --name myVMNic \ --output table

出力例(環境により異なります):

Source State AddressPrefix NextHopType NextHopIP --------------------- ------- --------------- -------------------- ---------- Default Active 10.0.0.0/16 VnetLocal Default Active 0.0.0.0/0 Internet VirtualNetworkGateway Active 192.168.1.0/24 VirtualNetworkGateway 203.0.113.1 User Active 0.0.0.0/0 VirtualAppliance 10.1.0.4 Default Invalid 0.0.0.0/0 Internet

Source列がUserのルートがUDRです。VirtualNetworkGatewayがBGPルート(VPN Gateway経由)です。Defaultがシステムルートです。

State列がInvalidのルートは、より高い優先度のルートに上書きされて無効化されています。上の例では、UDR(0.0.0.0/0 → VirtualAppliance)がDefaultのInternetルートを無効化しています。

3. カスタムルートを追加してBGPルートを上書きする

VPN GatewayのBGPルートよりもUDRを優先させたい場合、同じプレフィックスまたはより長いプレフィックスでUDRを追加します。UDRはBGPルートより常に優先されるため、意図した経路に変更できます。

# オンプレネットワーク(192.168.1.0/24)向けをNVA(10.1.0.4)経由に変更するUDRを追加 az network route-table route create \ --resource-group myRG \ --route-table-name myRouteTable \ --name overrideVpnRoute \ --address-prefix 192.168.1.0/24 \ --next-hop-type VirtualAppliance \ --next-hop-ip-address 10.1.0.4

追加後に再度az network nic show-effective-route-tableを実行して、Source列がUserのルートがActiveになっていることを確認してください。

4. BGPルートの伝播を無効にする

特定のサブネット(DMZやAzure Firewall配下のサブネットなど)にはVPN GatewayのBGPルートを伝播させたくない場合は、ルートテーブル作成時に--disable-bgp-route-propagation trueを指定します。

# BGPルート伝播を無効にしたルートテーブルを作成 az network route-table create \ --resource-group myRG \ --name noBgpRouteTable \ --location japaneast \ --disable-bgp-route-propagation true # サブネットに関連付ける az network vnet subnet update \ --resource-group myRG \ --vnet-name myVNet \ --name myDmzSubnet \ --route-table noBgpRouteTable

このルートテーブルをサブネットに関連付けると、VPN GatewayのBGPルートはそのサブネットに注入されなくなります。

よくある優先度トラブルとその対処

UDRを設定してもVPNルートが優先されているように見える
原因として多いのが「プレフィックスが一致していない」ケースです。BGPルートが 192.168.1.0/24 を伝播しているときに、UDRに 192.168.0.0/16 を設定しても、プレフィックス長が /16 < /24 のため最長一致で負けます。/24 以上の具体的なプレフィックスでUDRを追加するか、BGPルートのプレフィックスと同一のUDRを設定してください。

デフォルトルート(0.0.0.0/0)がVPN側に向いてしまう
Route Propagationが有効のサブネットにVPN GatewayからBGPで 0.0.0.0/0 が伝播されると、インターネット向けのトラフィックもVPN経由になります。意図しない場合は、UDRで 0.0.0.0/0 のネクストホップを明示的にInternetに向けるか、Route Propagationを無効にします。

ルートテーブルをサブネットに関連付けたが変化がない
ルートテーブルをサブネットに関連付けた直後は、VMのNICへの反映に数秒かかることがあります。az network nic show-effective-route-tableで実効ルートを確認し、State列が更新されているかチェックしてください。変化がない場合は、ルートテーブルがサブネットに正しく関連付けられているかを確認します。

本記事のまとめ

Azureルートテーブルの優先度と主要コマンドをまとめます。

確認・操作したいこと コマンド
ルートテーブルのルートを確認 az network route-table route list --resource-group RG --route-table-name RT
NICの実効ルートを確認(最重要) az network nic show-effective-route-table --resource-group RG --name NIC
UDR(カスタムルート)を追加 az network route-table route create --address-prefix PREFIX --next-hop-type TYPE
BGPルート伝播を無効化 az network route-table create --disable-bgp-route-propagation true
ルートテーブルをサブネットに関連付け az network vnet subnet update --route-table RT_NAME
AzureルートテーブルのUDR・BGPルート・システムルートの競合は、az network nic show-effective-route-tableで実効ルートを確認することが診断の第一歩です。優先度はUDR>BGPルート>システムルートの順で、同一優先度内では最長プレフィックスが優先されます。

VPN環境でのルートトラブルは、プレフィックスの長さとRoute Propagation設定の組み合わせで発生することが多いため、実効ルートを直接確認しながら設定を調整していくことが解決への最短経路です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、AzureのVNet設計からVPN接続まで体系的に学べるハンズオンセミナーを開催しています。Azureセミナーの詳細・申込はこちら>>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。