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サイトが表示されました。
以上となります。