ExpressRoute / VPN の強制トンネリング

最近 Nano Server をデプロイして遊んでる毎日ですが、Azure のことも書いておこうと思います。

Azure をエンタープライズ用途で使う場合、ExpressRoute か VPN を使うことが多いと思います。ExR と VPN では色々違う部分もありますが、今回は強制トンネリングについて簡単に解説をば。

強制トンネリングって何ぞ

Azure のネットワークを触っていると、強制トンネリングとか、Forced Tunneling という表現をよく使います。何かというと、全ての通信をオンプレ側に向ける設定、さらにかみ砕くと、デフォルト ルートをオンプレに向けてインターネットに直接出ていかないようにするということです。

図にすると以下のような感じ。(図ではオンプレからインターネットに出てますが、オンプレから外に出られないようにすれば、外に出ない様な構成もできます。ただまあ、留意点もいくつかあるので後述。)

(強制トンネリングが無効の場合)
Forced Tunneling1

(強制トンネリングが有効の場合)
Forced Tunneling2

で、具体的にどう設定するの?っていう話が以下。

ExpressRoute での強制トンネリング

ExpressRoute の場合、オンプレからデフォルト ルート (0.0.0.0/0) を広報します。L2 モデルの Equinix の場合はオンプレのルーター側から自分で、その他 IIJ などの L3 モデルで契約している場合は接続プロバイダに依頼しましょう。

この結果、Azure のルーターに BGP でデフォルト ルートすなわち 0.0.0.0/0 宛のパケットをオンプレのルーターへ向ける経路情報が届くので、ルート テーブル (Azure のシステム ルートとか、ユーザー定義ルート: UDR) にない宛先へはすべてオンプレ側にルーティングされていきます。
Forced Tunneling3

ちなみに、良くある間違いとして、UDR で 0.0.0.0/0 宛を Vnet Gateway に向ける方がいますが、技術的に不可です。
下図の通り、確かに VNet Gateway まではルーティングされるのですが、オンプレミス側から BGP で経路が広報されていない限り、VNet Gateway から Edge Router 側へのルートがないため疎通できません。

VPN での強制トンネリング

一方で VPN の場合には UDR を使って、VNet 内のサブネットに対して、0.0.0.0/0 を GatewaySubnet に向けるルートを書きます。

Forced Tunneling4

設定手順は以下ドキュメント参照で。

クラシック (ASM) の場合: https://azure.microsoft.com/ja-jp/documentation/articles/vpn-gateway-about-forced-tunneling/

New-AzureRouteTable –Name "MyRouteTable" –Label "Routing Table for Forced Tunneling" –Location "North Europe"
Set-AzureRoute –RouteTableName "MyRouteTable" –RouteName "DefaultRoute" –AddressPrefix "0.0.0.0/0" –NextHopType VPNGateway
Set-AzureSubnetRouteTable -VNetName "MultiTier-VNet" -SubnetName "Midtier" -RouteTableName "MyRouteTable"
Set-AzureSubnetRouteTable -VNetName "MultiTier-VNet" -SubnetName "Backend" -RouteTableName "MyRouteTable"

リソース マネージャー (ARM) の場合: https://azure.microsoft.com/ja-jp/documentation/articles/vpn-gateway-forced-tunneling-rm/

New-AzureRmRouteTable –Name "MyRouteTable" -ResourceGroupName "ForcedTunneling" –Location "North Europe"
$rt = Get-AzureRmRouteTable –Name "MyRouteTable" -ResourceGroupName "ForcedTunneling"
Add-AzureRmRouteConfig -Name "DefaultRoute" -AddressPrefix "0.0.0.0/0" -NextHopType VirtualNetworkGateway -RouteTable $rt
Set-AzureRmRouteTable -RouteTable $rt
$vnet = Get-AzureRmVirtualNetwork -Name "MultiTier-Vnet" -ResourceGroupName "ForcedTunneling"
Set-AzureRmVirtualNetworkSubnetConfig -Name "MidTier" -VirtualNetwork $vnet -AddressPrefix "10.1.1.0/24" -RouteTable $rt
Set-AzureRmVirtualNetworkSubnetConfig -Name "Backend" -VirtualNetwork $vnet -AddressPrefix "10.1.2.0/24" -RouteTable $rt
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet

※ UDR の設定のほかに、GatewayDefaultSite 等も必要です。詳しくはドキュメントを参照ください。

強制トンネリングを使う際の留意点

公式ブログのほうでも情報書いてますが、強制トンネリングを使うとライセンス認証の通信や、Azure 基盤との通信もオンプレ側に流れてしまいます。この結果、ライセンス認証ができないとか、インターネットに出られない (オンプレから外に出れない場合) 等々が発生します。強制トンネリングは Azure のデフォのルートを利用者側で捻じ曲げている訳なので、色々配慮しないといけないことが出ますが、その辺は覚悟のうえで使いましょう。

ExpressRoute 環境でライセンス認証ができない事象について
https://blogs.technet.microsoft.com/jpaztech/2016/05/16/azure-vm-may-fail-to-activate-over-expressroute/

1 comment for “ExpressRoute / VPN の強制トンネリング

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください