実際にWindows Azure Packをあつかうケースが増えてきました。その中でWAP内部でNVGREで仮想化されたネットワーク環境と、外部の環境との通信の方法や、その際に使われる技術や必要なIPアドレス等について(私に)混乱があったのでこのポストでまとめてみたいと思います。残念ながらリッチな検証環境を持っておらず実際にすぐには試せないので(ここがWAPのつらい所…)、まずはインターネット上で得られる情報のまとめとなります。 使用している画像は全て「参照先」のサイトからの引用となります。 ### NVGRE WAPで使用されるネットワーク仮想化はNVGREを使っています。まずは、NVGREの基本のおさらい。
VMは通常のパケットを送信し、それがHyper-Vホストをまたがる場合際にカプセル化されて送信され、受信先のHyper-Vホストで再度カプセル化が解かれて宛先のVMに到達します。 この時必要なのは - どれだけの仮想ネットワークがあるのか どの仮想マシンがどのHyper-Vホスト上に存在しているのか などの情報ですが、このような情報はSCVMMが集中管理する仕組みになっています。 外部のネットワーク上の通常のホストと仮想ネットワーク上のホストとがお互いに通信するためには、途中でこのカプセル化をほどいてあげる必要があります。この役割はNVGREゲートウェイが担います。
### VMネットワークのルーティングに関して VMネットワークのルーティングに関しては以下の形態があります。
- VMネットワーク内のサブネット間は自由にルーティング可能。".1"のアドレスがゲートウェイとなる。 VMネットワークをまたぐルーティング フォワーディング 単純にカプセル化する/ほどくによってルーティングする。VMネットワークと物理ネットワークが接続できる。 - VPN Site-to-Site サイトとサイトをVPNで結ぶことによってルーティングする。VMネットワーク上と物理ネットワーク上の両方にゲートウェイが必要となる。 - Remote Access(Point-to-Site) VMネットワークに対して1台のコンピューターからVPN接続をする。この時必要なゲートウェイはVMネットワーク側のみ。 - NAT/Load balancing プライベートネットワークからグローバルのネットワークへのアクセスと同じように、物理ネットワークとVMネットワーク間でNATする方式。1つの外部アドレスをVMネットワーク上の全てのVMで共有する形も、1つの外部アドレスに対して1つのVMを1対1でマッピングする形も、どちらも可能。 Windows Server 2012 R2のNVGREゲートウェイでは - フォワーディング Site-to-Site VPN NAT の3つの機能が提供されています。 - VMネットワーク毎にゲートウェイのIPアドレスを1つ使用 ゲートウェイは独自のVirtual Subnetに配置する必要あり 同一のHyper-Vホストに複数のゲートウェイを配置可能だが、ゲートウェイを配置するホストにはゲートウェイ以外のVMを配置できない という仕様もあります。 ### 設定画面 NAT
### NVGRE Gatewayの構築 NVGRE Gatewayの構築は通常SCVMMのウィザードで実施します。その際にキーとなるのは「connection string」です。以下、いくつかのサンプルです。
S2S/NAT Gateway VMHost=EdgeCluster.contoso.com;GatewayVM=GWCluster01.contoso.com;BackEndSwitch=”ESU Switch” Fowarding Gateway VMHost=EdgeCluster01.contoso.com;GatewayVM=GWCluster01.contoso.com;BackEndSwitch=”ESU Switch”;DirectRoutingMode=true;FrontEndServerAddress=10.10.0.4 ### パケットの流れ パケットの流れを表すPPTが以下のサイトからダウンロード可能です。
- Download Hyper-V Network Virtualization Packet Flow from Official Microsoft Download Center ### パブリックIPアドレスの必要数 - Public IP Address Requirements within a Windows Azure Pack environment - Building Clouds Blog - Site Home - TechNet Blogs 上記の記事がかなり良い感じでまとまっています。上記の記事によるとWAP+NVGREの環境と実際の物理環境とでの通信の方法には主に5つの方法があると紹介されています。
There are four common ways an organization will allow access from the Hyper-V Networked Virtualization environment within WAP out to the physical world. These are:
- Using a S2S IPSec Gateway Connecting via an MPLS Network (or equivalent) Offering Access via NAT Giving the VM a public IP address Remote Access VPN 以下、参照サイトから図を引用させてもらいながら簡単にまとめます。
IPSec Gatewayを使って接続する方法 
上記がサイトとサイトをIPSec VPNで接続する形態ですね。Azure IaaSとのVPN接続と同じイメージなのでわかりやすいですね。この場合、インターネット経由を想定してるのでNVGREのゲートウェイにはパブリックIPが必要となります。
#### **MPLS(その他同等のもの)を使って接続する方法** [](https://systemcenter.ebisuda.net/wp-content/uploads/2015/05/Image80.png) 専用線やあるいは、組織内のネットワークに直接WAPが配置されていつつ、VPN接続を行わない形ですね。この場合NVGREゲートウェイの所までは複数のVLANでの分離が必要ですが、パブリックなIPアドレスは必要ない形になります。NVGREを"Fowarding Gateway"として構成する所がポイントですね。 この構成に関しては以下のブログでPowerShellをつかった構成方法が解説されています。 - [Enable the forwarding function on Windows Server Gateway: a use case study - Microsoft Enterprise Networking Team - Site Home - TechNet Blogs](http://blogs.technet.com/b/networking/archive/2013/09/06/enable-forwarding-function-on-windows-server-gateway-a-use-case-study.aspx) 両方のネットワークに足を出してルーティングを有効にすればルーティングできるという当たり前の事がVNGREと実際のネットワークの間でも普通に構成可能であるという理解で良いと思います。
NAT経由でのアクセス
外部のNATデバイス経由でインターネットにアクセスさせる方法です。元ブログでは「仮想ネットワーク毎にNATの構成が必要で、仮想ネットワーク毎にパブリックIPアドレスが必要になる」と書かれています。NVGREゲートウェイはNATゲートウェイを使用するモードで構成されています。
…が、この構成はちょっと具体的なIPの持ち方等に不明点があって私はまだちょっと飲み込めていません。もう少し勉強してからUpdateします。 通常の複数のデバイスが同一のPublic IPにてインターネットに接続するNATの構成と同一だと理解しています。NVGREがNATゲートウェイに設定されているので、NATが2段かかる構成だと思うのですが、であれば仮想ネットワーク毎にパブリックIPは必要ないと思うのですけどね~。テナントが別なのに同じパブリックIPを使ってしまうのは技術的には可能でも管理上よろしくない(別会社が同じIPを使ってしまうから)というような意味合いなのかもしれません。 #### VMにパブリックIPを割り当てる
こちらは、NVGREをフォワーディングゲートウェイとして構成し、VMのIPがInternal Networkまでは生で出てきて、あとは単純にNATデバイスにて1対1NATを構成するパターンだと思います。 ### 構築手順(S2S/NAT) 以下のブログにてS2S/NATでの構築手順が記述されています。 - Software Defined Networking – Hybrid Clouds using Hyper-V Network Virtualization (Part 2) - Building Clouds Blog - Site Home - TechNet Blogs ### VMネットワークに複数のパブリックIPを紐付ける方法 Microsoftのサポートは無いですが、以下の手順にて1つのVMネットワークに複数のパブリックIPを紐付けることも可能だそうです。 - Solving the cloud puzzles | Windows Azure Pack – Adding multiple public IP addresses WAPへのフィードバックサイトはこちらです。私も1票投票しておきました。 - Multiple external IP Address support per virtual network in WAP with HNV Gateway – Customer Feedback for Microsoft Azure ### **** ### NVGREの外部アドレスをプライベートIPアドレスで構成するパターン
上記のようにNVGREゲートウェイの外部アドレスとしてプライベートIPアドレスを構成し、NATによって内外を接続する方式もきちんと動作した、という動作報告が以下のフォーラムにあがっています。
- NVGRE with NAT 企業内での利用に関してはこのような接続形態が便利な気がしますね。プライベートIPでもグローバルIPでも動作は基本的に同じなので出来て当たり前なのですが、どこにも明示的に書かれていないのでこのパターンができるのかどうかちょっと不安におもっていましたが、動作したという内容を見つけて安心しました。