Hyper-Vの内部ネットワークでゲストPCのIPアドレスを固定化する方法


はじめに

どうも!生産技術部のエンジニアです。今回は、Hyper-Vの内部ネットワークでゲストPCのIPアドレスを固定化する方法とポートフォワーディングの方法について紹介します。ファイアウォールのポート解放手順については取り上げませんので、ここを参考に設定ください。

背景

ホストOS(Windows10)のHyper-V上にLinuxのウェブサーバを立上げ、ホストPCまたは外部のPCからゲストPCのサイトにアクセスできるか確認していたところ、ホストPCを再起動する度にDHCPによって割り当てられたゲストPCのIPアドレスが変わってしまい、確認に手間取りました。IPアドレスを固定する方法はないか探っていたところ、うまくいった方法がありましたので紹介します。

環境

  • Windows10 Enterprise
  • Hyper-V

前提条件

Hyper-Vの導入が実施済みであり、ゲストPCのWebサーバが立ち上がっている事

「仮想NIC」と「規定のスイッチ」のIPアドレス確認

Hyper-Vをインストールし、内部ネットワークを設定すると、ホストPC上に仮想NICとネットワークアダプタ(規定のスイッチ)が生成されます。生成された仮想NICとネットワークアダプタにはIPアドレスが割り当てられます。まずはIPアドレスを確認します。確認方法とネットワークの構成は、「内部ネットワーク」の仮想スイッチを参考にしました。

ネットワークアダプタのIPアドレスを設定

Hyper-Vは、「規定のスイッチ」を起動する度に、スイッチ自体の削除、再生成するイベントが走ります。これによりゲストOSに割り当てられるIPアドレスが毎度変わってしまうようです。「規定のスイッチ」のIPアドレスを固定化する方法を紹介します。

まず、現状の「規定のスイッチ」のIPv4を確認すると以下の様になっていると思います。

PowerShellを起動し、vEthenet(規定のスイッチ)のifIndexを確認します。確認した値は、IPアドレスの設定に使用します。

PS > Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
Wi-Fi                     Realtek 8812BU Wireless LAN 802.11ac...      19 Up           XX-XX-XX-XX-XX-XX       400 Mbps
イーサネット              Realtek PCIe GBE Family Controller           11 Disconnected XX-XX-XX-XX-XX-XX          0 bps
vEthernet (既定のスイ...  Hyper-V Virtual Ethernet Adapter              9 Up           XX-XX-XX-XX-XX-XX        10 Gbps

既に設定されている規定のスイッチのIPアドレスを削除します。InterfaceIndexに先ほど確認したifIndexの値指定します。

PS > Remove-NetIPAddress -InterfaceIndex 9 -IPAddress "172.20.149.129"

次に、削除したIPアドレスを設定し直します。設定するIPアドレス、プレフィックス長は各自の環境に合わせて設定する必要がありますが、削除したIPアドレス以外のIPアドレスを設定したところ、Hyper-V上で動作しているCentOSがネットワークに繋がらなくなってしまいましたので、注意が必要です。繋がらなくなった時は、削除したIPに設定し直し、正常にネットワーク接続できる様になりました。

PS > New-NetIPAddress -InterfaceIndex 9 -IPAddress "172.20.149.129" -AddressFamily IPv4 -PrefixLength 28

すると、あら不思議。IPアドレスが設定されています。この状態で再起動しても、IPアドレスが設定された状態になりました。

ポートフォワードの設定

Powershellを起動し、ポートフォワードの設定を行います。以下は、「0.0.0.0:80」のパケットを「172.20.149.140」に流す設定です。

netsh interface portproxy add v4tov4 listenport=80 listenaddr=0.0.0.0 connectport=80 connectaddress=172.20.149.140

正しく設定できているか確認します。

netsh interface portproxy show all

以上で設定完了となります。お疲れ様でした。

ご参考