【重要】この機能は 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アドレスレンジ" |
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に割り当てます。
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 の不具合なのかは現状不明です。
Copyright © MURA All rights reserved.