困ったことが起こりました
先日わたしのWindows10端末上でHyper-Vを有効化して、仮想マシンとしてWindowsServerをインストールしました。
さぁいろいろ検証するぞー!と意気込んでいたのですが、Hyper-Vデフォルト状態だと不便なことがでてきましたので、今回はその内容と解決するまでの過程を共有します。
固定IPが使えない
検証用の仮想マシンを操作する場合、Hyper-Vコンソールでも触れるっちゃ触れるのですが、やっぱりホストOSから直接リモートデスクトップ接続やSSH接続できるようにしたいなーと思い、いろいろ調べてみました。
するとなんと、Hyper-Vを有効化すると標準で利用できる仮想スイッチ “Default Switch” は
- IPアドレスとサブネットが自動的に割り振られ、ホストOSを再起動するごとに変わる。連動してゲストOSのIPアドレスも変わってしまう
- IPアドレス、サブネットを任意の値に変更できない
- そして削除できない
と、なんとも不便な仕様ということが判明しました。
(「これはバグだ!」と主張している人多数。笑)
毎回Hyper-VコンソールでゲストOSにログインして、IPアドレスを確認してからSSH接続なんて、そんな面倒なことはやってられませんので、Hyper-V内でとじられたネットワークを構築し、そのなかで固定IP運用を可能にすることをゴールとしました。
ちなみに私のPCは Windows10 Pro 1903 です。
Hyper-Vのこの挙動はOSバージョンによっても異なるようですので、ご自身のOSバージョンもご確認の上お読みください。
この記事を読んでほしいかた
この記事では、Hyper-V上に独立したネットワーク環境を構築する流れを画面ショット付きで記載しています。
- Hyper-Vの基本ネットワーク構成を知りたいかた
- 外部接続するIPアドレスを節約して、かつゲストOSを固定IPで運用したいかた
これらのかたには参考にしていただける記事になっています。
主に個人用途で効果が発揮される設定内容ですね。
Hyper-V上のゲストOSを固定IPで運用する
ここからはHyper-Vネットワーク構成のイメージ図も交えながらご説明します。
目標
便利な検証環境にするために、以下の要件を満たす環境を目指しました
- ゲストOSには固定IPを割り当てること
- ゲストOSとホストOS間で通信ができること
- ゲストOSからインターネットへ接続できること
結論、これらは実現できました。
やることは「新たに内部仮想スイッチを作成すること」と「ゲストOSを新規作成した内部ネットワークに所属させること」、「ホストOSにアタッチされた仮想NICにNAPT設定を投入すること」の3点でした。
本記事ではこれらすべて完了するまで説明しています。
外部通信可能な、クローズドネットワークを構築する
前述したとおり、Hyper-V有効化と同時に作成される “Default Switch”という仮想スイッチは、IPアドレスとサブネットが自動的に決まり、さらにホストOSの再起動ごとに値が変わってしまう残念仕様です。

ホストOSにアタッチされている仮想NICのプロパティを確認するとこのようになっています。
見覚えのないIPアドレスが勝手に割り当たっています。


このネットワーク設定は変更できません。
IPアドレスを好き勝手に変更すると通信できなくなりました。
この課題を解決するためには、新たに仮想スイッチを作成することとなります。
新規作成した仮想スイッチには、任意のIPアドレスやサブネット設定を投入することができます。
仮想スイッチの作成
まずは仮想スイッチを作成します。
Hyper-Vマネージャーを開き、右側メニューの 仮想スイッチマネージャー をクリックします。

作成するスイッチの種別を 内部 にして 仮想スイッチの作成 をクリックします。

作成する仮想スイッチの名前とメモを入力します。とりあえず、あとから自分がわかればなんでもかまいません。ここでは名前を internal-switch としています。
接続の種類が先ほど選択した 内部 となっていることを確認したら OK を押してウィザードを終了します。

仮想スイッチの作成が完了すると、ホストOSにネットワークアダプタが追加されます。これがさきほど作成した仮想スイッチとつながっているわけですね。

internal-switchに接続されたアダプタのプロパティをひらいて任意のIPアドレスとサブネットマスクを定義します。
今回はなんとなく 10.10.1.0/24 としました。理由は特にありません。

ここまでで仮想スイッチの作成と、ホストOSの仮想NIC設定は完了です。
ゲストOSのネットワーク設定変更
それではゲストOS側の設定です。ゲストOSをいま作成したinternal-switchに接続させる必要があります。
Hyper-Vマネージャーから、対象のマシンを選択し、右側メニューの 設定 をクリックします。

ハードウェア一覧から ネットワークアダプター を選択し、右側の仮想スイッチからさきほど作成した internal-switch を選択して OK をクリックします。
これでゲストOSが internal-switch に接続されました。

ゲストOSが 10.10.1.0/24 ネットワークに所属したことになったので、NICに固定IPアドレスを付与します。
ゲストOSのコントロールパネルからネットワークと共有センターを開き、任意の固定IPを設定します。
ここでは、1台目のゲストOSですし、栄えある 1 を与えましょう。

ここまでで、新規作成した仮想スイッチを介してホストOSとゲストOSが通信できるようになっています。
NAPT設定
最後に作成した仮想スイッチをNAPT仮想スイッチとして動作させる設定をします。これをやっておかないと、ゲストOSからインターネットへ出ていくことができません。
この作業はGUIでは行えず、PowerShellコマンドレット New-NetNat を実行する必要があります。
Microsoft公式マニュアルはこちら。
ここ、ハマりポイントです!!
ぜんぜん情報が見つからず苦労しました。。。
> New-NeTNat -Name "10.10.1.0/24" -InternalIPInterfaceAddressPrefix 10.10.1.0/24
Name : 10.10.1.0/24
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 10.10.1.0/24
IcmpQueryTimeout : 30
TcpEstablishedConnectionTimeout : 1800
TcpTransientConnectionTimeout : 120
TcpFilteringBehavior : AddressDependentFiltering
UdpFilteringBehavior : AddressDependentFiltering
UdpIdleSessionTimeout : 120
UdpInboundRefresh : False
Store : Local
Active : True
これで完了です。
ここまでの作業を図示するとこのようになっています。

要約すると
内部仮想スイッチを作成したことによって
- ホストOSからは アドレス10.10.1.1 指定でゲストOSへ通信可能
- ゲストOSからは アドレス10.10.1.254 指定でホストOSへ通信可能
とすることができました。
また、ホストOSにアタッチされた仮想NICに対してNAPT設定をすることで
- 内部ネットワーク(10.10.1.0/24)に所属するげっすとOSからの通信を物理NICに橋渡しできるようになり、インターネットとの通信が可能
とすることができました。
Hyper-Vの仮想ネットワークはわかりずらいかもしれませんが、実はけっこうシンプルです。
一度概要をつかんでしまえば忘れることはないと思いますので、またいつか記事を書きますね。
それじゃあまたね。