Home > Windows にまつわる e.t.c.

Windows 10 Insider Preview Hyper-V の NAPT 仮想スイッチ


【重要】この機能は Windows 10 Insider Preview Build 14295 以降で仕様が変わったので、こちらを見てください。

TP5 NAPT 仮想スイッチ
http://www.vwnet.jp/Windows/WS16TP5/2016050502/TP5NAPTvSW.htm

 

Windows Server 2016 Technical Preview 3 のコンテナ構築検証をしていたら、RRAS を使わず仮想スイッチだけで NAPT 実装しているのに気が付きました。

Windows 10 Insider Preview Build 10547 のコマンドレットを見ると、仮想スイッチコマンドレットが NAPT オプションを受け付けるので、NAPT 仮想スイッチを作ってみたらうまくいったので手順紹介です。

まずは NAPT 仮想スイッチを作るコマンドレットです。

# NAPT 仮想スイッチ作成
New-VmSwitch "仮想スイッチ名" -SwitchType NAT -NatSubnetAddress "IPアドレスレンジ"

# NAT テーブル作成
New-NetNat "NATテーブル名" -InternalIPInterfaceAddressPrefix "IPアドレスレンジ"

 

NAPT 仮想スイッチとNATテーブルの作成

172.16.0.0/24 をホストPCのIPアドレスにNAPTするNAPT 仮想スイッチとNATテーブルを作成します。

NAPT 仮想スイッチ作成

PS C:\> New-VmSwitch "vSwitch NAPT" -SwitchType NAT -NatSubnetAddress "172.16.0.0/24"

Name         SwitchType NetAdapterInterfaceDescription
----         ---------- ------------------------------
vSwitch NAPT NAT

 

NAT テーブル作成

PS C:\> New-NetNat "NAPT 172.16.0.0/24" -InternalIPInterfaceAddressPrefix "172.16.0.0/24"


Name                             : NAPT 172.16.0.0/24
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 172.16.0.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True

 

これで仮想スイッチとNATテーブルが出来ました。

仮想スイッチマネージャーを見ると「内部ネットワーク」の仮想スイッチが作られています。

 

内部ネットワークなので、仮想NICも作られています。

 

仮想NICのIPv4アドレスを見ると、割り当てたIPアドレスレンジの先頭である 172.16.0.1 がセットされています。

 

NAPT仮想NICのVM割り当て

作成したNAPT仮想NICをVMに割り当てます。

 

VM側では、Default Gateway に NAPT 仮想NICに割り当たっていた 172.16.0.1 をセットします。

 

うちの Web ページは、トップページで接続元の IP アドレスを表示するので、うちのサイトのトップページに接続して接続元IPアドレスを確認します。

 

ホストPCのIPアドレスを見ると、NAPTされているのがわかります。

PS C:\> ipconfig

Windows IP 構成


イーサネット アダプター vEthernet (vSwitch NAPT):

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::9dbb:6393:14c7:22bf%9
   IPv4 アドレス . . . . . . . . . . . .: 172.16.0.1
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .:

イーサネット アダプター Host:

   接続固有の DNS サフィックス . . . . .: vwnet.jp
   IPv6 アドレス . . . . . . . . . . . .: 2400:400e:400:0:f041:ff9c:3bdd:31dc
   IPv6 アドレス . . . . . . . . . . . .: fd75:f582:7ae3:0:f041:ff9c:3bdd:31dc
   一時 IPv6 アドレス. . . . . . . . . .: 2400:400e:400:0:f89d:93e0:9867:e73b
   一時 IPv6 アドレス. . . . . . . . . .: fd75:f582:7ae3:0:f89d:93e0:9867:e73b
   リンクローカル IPv6 アドレス. . . . .: fe80::f041:ff9c:3bdd:31dc%5
   IPv4 アドレス . . . . . . . . . . . .: 192.168.33.86
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: fe80::1%5
                                          192.168.33.254

Tunnel adapter isatap.vwnet.jp:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .: vwnet.jp

Tunnel adapter isatap.{337AB143-D23C-4A1B-8C3B-63C5FAA9F6FC}:

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

 

 

ポートフォワードの追加

NAPT の後ろにいるホストを外からアクセスするには、ポートフォワードが必要になります。

ポートフォワードは、作成済みの NAT テーブルに実装します。

# ポートフォワード設定
Add-NetNatStaticMapping -NatName "NATテーブル名" -Protocol TCP -ExternalIPAddress "外部 IP(0.0.0.0)" -InternalIPAddress "フォワード先 IP" -ExternalPort "受付ポート" -InternalPort "フォワード先ポート"

 

ポートフォワード設定

PS C:\> Add-NetNatStaticMapping -NatName "NAPT 172.16.0.0/24" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.2 -ExternalPort 80 -InternalPort 80


StaticMappingID               : 0
NatName                       : NAPT 172.16.0.0/24
Protocol                      : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress             : 0.0.0.0
ExternalPort                  : 80
InternalIPAddress             : 172.16.0.2
InternalPort                  : 80
InternalRoutingDomainId       : {00000000-0000-0000-0000-000000000000}
Active                        : True

 

 

おまけ

この仮想NICはIPv4専用のようで、色々試してみましたがIPv6は通りませんでした。残念

 

注意事項?

複数の内部ネットワークを作ると動作が安定しなくなるようです。

このテクノロジーがコンテナ用で、複数の内部ネットワークをサポートしない仕様なのか、ビルド 10547 の不具合なのかは現状不明です。

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.