インフラ基盤の備忘録 徒然なる日々のメモ

Hyper-v 内部ネットワーク接続して、NATする方法

Hyper-V Powershell


Hyper-Vホストを利用して、仮想マシンはすべて仮想内部に配置し、ネットワーク接続はHyper-Vホストをゲートウェイとして通信を行う方法をとってみたいと思います。

仮想環境(Hyper-v)はサーバの上に仮想マシンを構築し検証できる機能です。

便利な機能で何台もサーバが構築でき検証ができるのですが、DHCPとかネットワーク環境に影響のあるサービスの検証には注意が必要になってきます。

つまり、ネットワークへ影響がでると利用しているすべてのパソコンに影響がでて、「インターネットに接続できない」「ファイルサーバにアクセスできない」など影響が発生します。




プライベート仮想ネットワークでは検証しずらい

ネットワーク接続は外部接続してしまえばよいと考えますが、例えば「DHCPサーバを立てて検証したい」「ネットワーク負荷検証」などネットワーク全体に影響のある検証を行う際は通常利用するネットワークと切り離しておく必要があります。

仮想マシンは閉域ネットワーク環境(内部接続環境)で検証するのが多いと思いますし、閉域ネットワークで困ることというと、「利用環境から閉域環境へのファイルのやり取り」「閉域ネットワーク上のWEBサービスの検証を利用環境から行う」などがあると思います。

また、外部接続の仮想スイッチ・NICを都度追加すれば事足りるのですが、どうも管理が煩雑になり、綺麗ではありません。Hyper-V上に作成した仮想マシンに外部接続用スイッチを割り当てると、ネットワーク上にホスト名が現れます。


Hyper-VのNATネットワーク構成で課題は解決します

NAT検証環境を構築することで、検証ネットワークとのデータやり取りなどが可能になります。

サーバ設定しても、サーバのインフラ基盤のネットワーク環境によっては外部インターネット通信できないこともありますため、参考としてご覧いただきたいと思います。

本題に入りますと、ネットワーク環境前提として 192.168.*.*/24 となっていることが多いと思います。(主に家庭用のルーターは大抵このIPセグメント体系になっています。)

Hyper-Vホストは192.168.0.0/24に所属したとして、残りの仮想マシンをHyper-V の内部ネットワークセグメント(172.16.*.*)へ所属して運用する方法を行いたいと思います。

まずはホスト側の設定で仮想のネットワーク構成を構築します。
仮想スイッチを作成し、hyper-V内部ネットワークからホストを介しての外部ネットワーク接続できるようにスイッチを構成します。

Powershell を起動し、Hyper-V内部スイッチを作成します。
“New-VMSwitch”コマンドレットを利用します。

コマンド:
New-VMSwitch -SwitchName <仮想スイッチ名> -SwitchType Internal

実行例:

New-VMSwitch -SwitchName “vSW01” -SwitchType Internal

コマンド実行してみると、以下のような設定となりました。

Name SwitchType NetAdapterInterfaceDescription
vSW01 Internal 9

Hyper-V内部スイッチを介して外部へ接続するため、NATゲートウェイとして構成します。
内部スイッチが作成されましたら、”Get-NetAdapter”コマンドレットから、InterfaceIndexを取得し、ゲートウェイのIPアドレスと紐づけます。”New-NetNat”コマンドレットからNAT ネットワークを構成します。

コマンド:
Get-NetAdapter
New-NetIPAddress -IPAddress <IPアドレス> -PrefixLength 24 -InterfaceIndex 24
New-NetNat -Name <NAT名称>-InternalIPInterfaceAddressPrefix <IP体系>

実行例:

# Get-NetAdapter

コマンド実行してみると、以下のような構造が見えてきました。

先ほど作成した仮想スイッチ”vEthernet (vSW01)”をターゲットとします。

Name InterfaceDescription ifIndex Status
イーサネット 2 Intel(R) Gigabit CT Desktop Adapter 9 Up
vEthernet (Intel(R) 82.. Hyper-V Virtual Ethernet Adapter 8 Up
イーサネット Intel(R) 82579LM Gigabit Network Con.. 6 Up
vEthernet (vSW01) Hyper-V Virtual Ethernet Adapter #2 20 Up
# New-NetIPAddress -IPAddress 172.16.1.1 -PrefixLength 24 -InterfaceIndex 20

IPAddress : 172.16.1.1
InterfaceIndex : 20
InterfaceAlias : vEthernet (vSW01)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 16
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Tentative
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore

IPAddress : 172.16.1.1
InterfaceIndex : 20
InterfaceAlias : vEthernet (vSW01)
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Invalid
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : PersistentStore

# New-NetNat -Name InternalNAT -InternalIPInterfaceAddressPrefix 172.16.1.0/24

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

コマンド実行するとNAT接続環境が完成です。


仮想マシンをNATネットワークに接続

仮想マシンを作成し、作成した内部スイッチへ接続します。
OSインストール後に、IPアドレスを付与します。(すでにDHCPサーバ機能が実装されているのでしたら不要)

ゲートウェイは、Hyper-Vホストのゲートウェイアドレスとします。DNSサーバは任意ですが、”8.8.8.8″とでもしておくとよいでしょう。

ポートマッピングして仮想マシンサービスに接続

仮想マシンに予めサービスを実装しておきます。今回はIISによるWEBサービスを想定します。
どうするかというと、「Hyper-Vホストが代表のポート接続を受け、そのポートを対象サーバのポートへフォワードする」というものです。

具体的には、HTTPアクセスすると仮想マシンへフォワードし、仮想マシンが結果を返すということです。
サーバ上でのWEBページが表示されるのを確認します。

Hyper-VホストよりPowershellの”Add-NetNatStaticMapping”コマンドレットを実行します。

コマンド:

Add-NetNatStaticMapping -NatName <NAT名称> -ExternalIPAddress <ホスト側端末> -ExternalPort <ポート番号> -InternalIPAddress <内部側端末> -Protocol <プロトコル> -InternalPort <ポート番号>

コマンド実行例。利用環境からの接続は任意ですので “0.0.0.0” としておき、WEBサービス提供のサーバを指定します。ポートはサービスによりますが、HTTPなので “80” としてます。

Add-NetNatStaticMapping -NatName InternalNAT -ExternalIPAddress “0.0.0.0” -ExternalPort 80 -InternalIPAddress “172.16.1.12” -Protocol tcp -InternalPort 80

StaticMappingID : 0
NatName : InternalNAT
Protocol : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress : 0.0.0.0
ExternalPort : 80
InternalIPAddress : 172.16.1.12
InternalPort : 80
InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000}
Active : True

利用環境から、Hyper-Vホストに対してブラウザーでアクセスしてみます。
そうするとWEBサイトが表示されました。

以上となります。

error: Content is protected !!