normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Microsoft Azure の仮想ネットワーク上に複数NICの仮想マシンを配置してみる

先日は Network Security Group を紹介させて頂いたが、今回は複数NICを持つ仮想マシンを作成して操作してみたいと思う。すでに以下の様な立派な記事が記載されているが、動かしてみないとわからないところもあるので、本記事も合わせて一読してほしい。

今回利用する Multi NIC という社畜御用達な機能は、L サイズ以上の大きさのインスタンスを利用する必要がある。参考までに、インスタンスサイズによる NIC 登録数は以下になる。

インスタンスサイズ 作成可能NIC
L サイズ (A3) および A6 2
XL サイズ (A4) および A7 4
A9 2
D3 2
D4 4
D13 4

Multi NIC、仮想ネットワーク、Network Security Group を利用して構築するネットワークは以下になる。
f:id:waritohutsu:20141119151907p:plain

Multi NIC 仮想マシンの作成

早速 PowerShell を利用して環境を構築する。仮想ネットワーク、Network Security Group の作成は Microsoft AzureのNetwork Security Groupを使ってなんちゃってネットワーク設計(インスタンスのインターネットアクセス禁止とか)をする の記事を参考にして作成したうえで、以下の PowerShell コマンドを実行する。

# 仮想マシンイメージの選択(参考記事が使っていた Windows Serve 2012 R2 を選択
$image = Get-AzureVMImage -ImageName "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201408.01-en.us-127GB.vhd"

# インスタンスの大きさは Large を選択(Large 以上のサイズでないと、Multi NIC インスタンスを作成できない
$vm = New-AzureVMConfig -Name "MultiNicVM" -InstanceSize "Large" -Image $image.ImageName

# インスタンスのプロビジョニング情報を設定する
Add-AzureProvisioningConfig -VM $vm -Windows -AdminUsername <ユーザ名> -Password <パスワード>

# NIC0?は Subnet-DMZ に所属させる
Set-AzureSubnet -SubnetNames "Subnet-DMZ" -VM $vm
Set-AzureStaticVNetIP -IPAddress 10.0.0.11 -VM $vm

# NIC1 は Subnet-AP_DB に所属させる
Add-AzureNetworkInterfaceConfig -Name "NIC1" -SubnetName "Subnet-AP_DB" -VM $vm -StaticVNetIPAddress "10.0.1.11"

# 仮想ネットワーク vnet01 を指定し、仮想マシンを作成する
New-AzureVM -ServiceName <service name> -VNetName "vnet01" -VMs $vm

上記のコマンドを実行した仮想マシンリモートデスクトップで入り、ipconfig, route print を実行した結果は以下となる。

C:\Users\myuser>ipconfig

Windows IP Configuration


Ethernet adapter Ethernet 2:

   Connection-specific DNS Suffix  . : multiniceastjpvm.l5.internal.cloudapp.net

   Link-local IPv6 Address . . . . . : fe80::f479:f0e8:eac3:67ea%26
   IPv4 Address. . . . . . . . . . . : 10.0.0.11
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.0.0.1

Ethernet adapter Ethernet :

   Connection-specific DNS Suffix  . : multiniceastjpvm.l5.internal.cloudapp.net

   Link-local IPv6 Address . . . . . : fe80::a5f1:fd46:f60c:e6b7%22
   IPv4 Address. . . . . . . . . . . : 10.0.1.11
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.0.1.1

Tunnel adapter isatap.multiniceastjpvm.l5.internal.cloudapp.net:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : multiniceastjpvm.l5.internal.cloudapp.net


Tunnel adapter Teredo Tunneling Pseudo-Interface:

   Connection-specific DNS Suffix  . :
   IPv6 Address. . . . . . . . . . . : 2001:0:9d38:90d7:2cc6:18f8:f5ff:fff4
   Link-local IPv6 Address . . . . . : fe80::2cc6:18f8:f5ff:fff4%15
   Default Gateway . . . . . . . . . : ::


C:\Users\myuser>route print
===========================================================================
Interface List
 31...00 0d 3a 50 05 96 ......Microsoft Hyper-V Network Adapter #8
 27...00 0d 3a 50 04 a9 ......Microsoft Hyper-V Network Adapter #7
  1...........................Software Loopback Interface 1
 15...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
 18...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0         10.0.0.1        10.0.0.11      5
          0.0.0.0          0.0.0.0         10.0.1.1        10.0.1.11      5
         10.0.0.0    255.255.255.0         On-link         10.0.0.11    261
        10.0.0.11  255.255.255.255         On-link         10.0.0.11    261
       10.0.0.255  255.255.255.255         On-link         10.0.0.11    261
         10.0.1.0    255.255.255.0         On-link         10.0.1.11    261
        10.0.1.11  255.255.255.255         On-link         10.0.1.11    261
       10.0.1.255  255.255.255.255         On-link         10.0.1.11    261
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link         10.0.0.11    261
        224.0.0.0        240.0.0.0         On-link         10.0.1.11    261
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link         10.0.0.11    261
  255.255.255.255  255.255.255.255         On-link         10.0.1.11    261
===========================================================================
Persistent Routes:
  None

IPv6 Route Table
===========================================================================
Active Routes:
 If Metric Network Destination      Gateway
 15    306 ::/0                     On-link
  1    306 ::1/128                  On-link
 15    306 2001::/32                On-link
 15    306 2001:0:9d38:90d7:444:c23:f5ff:fff4/128
                                    On-link
 27    261 fe80::/64                On-link
 31    261 fe80::/64                On-link
 15    306 fe80::/64                On-link
 15    306 fe80::444:c23:f5ff:fff4/128
                                    On-link
 27    261 fe80::6c59:b544:5e61:1eaa/128
                                    On-link
 31    261 fe80::c480:65b1:30bd:2f52/128
                                    On-link
  1    306 ff00::/8                 On-link
 27    261 ff00::/8                 On-link
 31    261 ff00::/8                 On-link
 15    306 ff00::/8                 On-link
===========================================================================
Persistent Routes:
  None

上記を確認すると、Add-AzureNetworkInterfaceConfig で追加した NIC 側(10.0.1.11)と Set-AzureStaticVNetIP で登録された NIC ではメトリックの差がないことが分かる。
Network Security Group の NSG01, NSG02 ではそれぞれ仮想マシン⇒インターネットへのアクセスを禁止しているが、仮想マシンからインターネットに接続するにつなげたり繋げなかったりするという現象が起きた。これから、「追加した NIC には Network Security Group が効かない」ということが推察(確認レベルにはならない…)できる。
まだドキュメントが多い機能ではないので推察の域をできないところもあるが参考になれば幸いだ。

その他の留意点

また、Multi NIC 利用時の留意点としては以下となるので、利用前に一読してほしい。

  • Multi NIC は GA リリース(一般提供)なので、SIerも安心して使えるよ!(サポート上はね!!
  • NIC 追加による仮想マシンへの追加料金は存在しません
  • Linux でも Multi NIC は使えます
  • Multi-NIC仮想マシンはコマンド経由でしか作成できない(管理ポータルからは作成できない
  • 仮想マシンの作成後、NICの追加や削除はできない
  • 追加 NIC は負荷分散セット内で使用できない( ロードバランサ側のVIPとマッピング取れるのがデフォルトNICだけらしい
  • デフォルトNIC以外では Network Security Group や Force Tunneling が使えないので要注意
  • Multi NIC 利用時、オーダーはランダムになるらしい。以下は抜粋となるが、デフォルト NIC がどれになるかもどうもランダムっぽいような…。
The order of the NICs inside the VM will be random, but the IP addresses and the corresponding MACs will remain the same.