「カスタムルート(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ルートのサブネットへの注入を制御できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
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
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
よくある優先度トラブルとその対処
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 |
az network nic show-effective-route-tableで実効ルートを確認することが診断の第一歩です。優先度はUDR>BGPルート>システムルートの順で、同一優先度内では最長プレフィックスが優先されます。VPN環境でのルートトラブルは、プレフィックスの長さとRoute Propagation設定の組み合わせで発生することが多いため、実効ルートを直接確認しながら設定を調整していくことが解決への最短経路です。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AWS vs Azure vs GCPのVMコスト比較|Azureポータル料金計算ツールで確認する手順
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます