Windows上でLinuxなどを使うときは仮想化ソフトを利用することが多いのですが、Windows標準のHyper-Vを利用する際にゲストOS側を固定IP化する方法がわからず苦労しました。備忘録も兼ねてまとめておきたいと思います。
前提として、Hyper-Vを利用するためにはWindowsPro以上である必要があります。また、ゲストOSをインストールした仮想環境は作成済みとします。
やることのまとめ
実施内容は下記のとおりです。4番が特に躓いたポイントでした。
- 仮想内部スイッチの作成
- 仮想マシンに仮想スイッチを割り当て
- 内部スイッチに固定IPアドレスを割り当てる
- PowershellでNAPT設定を入れる
- ゲストOS側で固定IPアドレスとDNSを設定する
1.仮想内部スイッチの作成
Hyper-V上で仮想化スイッチを作っていきます。Hyper-Vを立ち上げると右側の「操作」の部分に「仮想スイッチマネージャー」があるので、こちらを選択します。

仮想スイッチマネージャーを起動すると、仮想スイッチの作成画面が開きますので、今回は「内部」を選択肢、「仮想水地の作成」ボタンを押下します。

名前を入力する画面となりますので、任意の好きな名前を入れ、OKボタンを押下します。

仮想スイッチが作成できたので、仮想マシンに割り当てます。仮想マシンを選択肢、右側の仮想マシン名が書いてある操作一覧から「設定」を選択します。
2.仮想マシンに仮想スイッチを割り当て

ネットワークアダプタを選択し、先程作成した仮想スイッチを割り当てて、OKボタンを押します。

3.内部スイッチに固定IPアドレスを割り当て
作成した仮想スイッチに固定IPアドレスを割り当てます。コントロールパネルから、ネットワークとインターネットを選択し、ネットワーク接続の画面に遷移します。
ネットワークアダプタの一覧が出てくると思うので、先程作成した仮想スイッチを選択します。

状態を表示するウィンドウが開いたら、プロパティを開きます。

インターネットプロトコルバージョン4(TCP/IPv4)をダブルクリックします。

「次のIPアドレスを使う」を選択し、任意のIPアドレスを設定します。今回は「172.16.1.254/24」を設定します。IPの割り振りについてですが、ネットワーク機器は後ろから254,253,252…と降順でアドレスを振り、ホスト機器(PC等)は1,2,3…と昇順でアドレスを振ることが多いので、今回は254を使用します。
IPアドレスを割り振る際は、自身のネットワーク環境内でIPアドレスの重複がないように気をつけましょう。

4.PowershellでNAPT設定を入れる
ここが詰まったポイントなのですが、ゲストOSからインターネットアクセスをする際は、ホストOS側でNAPTの設定を入れる必要があるようです。この設定はコマンドでしか実施できないようなので、Powershellを使って設定します。
まずは管理者としてPowershell実行します。

Powershellが起動したら、下記のコマンドを入力します。アドレスは先程自身で設定したものを競ってしてください。私は、「172.16.1.0/24」のネットワークアドレスを設定したので、こちらを利用しました。
New-NeTNat -Name “172.16.1.0/24” -InternalIPInterfaceAddressPrefix 172.16.1.0/24

5.ゲストOS側で固定IPアドレスとDNSを設定する
最後にゲストOS側で固定IPの設定とDNSの設定を行います。ゲストOSは今回CentOS8.4を使用しています。まずはネットワーク設定を開きます。

有線接続の歯車マークから設定画面を開きます。

IPv4の設定画面へ移動し、手動設定でアドレスの設定を行います。
Hyper-Vの仮想スイッチで、ネットワークアドレスを「172.16.1.0/24」としたので、今回は「172.16.1.1/24」を利用します。ゲートウェイは先程、仮想スイッチに設定した「172.16.1.254」を利用します。
またDNS設定は、公開されているDNSサーバーであれば問題ないのですが、今回はメジャーなDNSの一つである、GoogleのDNS「8.8.8.8」を利用します。

こちらで設定は完了です。
接続の確認
問題なくゲストOS側で通信ができるか確認していきます。ゲストOS側でブラウザを開いて、Googleなどにアクセスできるか確認してみましょう。

トラブルシューティング
もしつながらない場合は、どこかで設定が間違っている場合があります。焦らず一つずつ切り分けをしていきましょう。通信経路は「①ゲストOS⇒②ホストOS⇒③インターネット上のサイト」の順番なので、①⇒②が正常に通信できているか確認します。
今回は一番メジャーな確認方法でpingを使った確認を行います。下準備としてホストOSのFirewallを切っておきます。Windowを使っている場合は、「コントロールパネル⇒システムとセキュリティ⇒WindowsDefenderファイアウォール」で無効化をします。

まずはゲストOSからホストOSへ通信ができているか確認するために、ゲストOS上でターミナルを起動し、仮想スイッチへの通信ができるか確認します。ゲストOS側でターミナルを起動して、仮想スイッチのIPアドレスに対してPingをします。私の場合は「172.16.1.254」となります。
ping 172.16.1.254

もし通信ができていない場合は、ゲストOS側のアドレス設定(項番5)か、仮想スイッチの設定(項番2か3)が間違っている可能性が高いです。一度確認してみましょう。よくありそうな失敗例を下記にリスト化しておきます。
- 項番2で仮想マシンに別の仮想スイッチを割り振っていた
- 項番3で割り振ったIPアドレスが自身のネットワーク内で重複していた
- 項番5で割り振ったIPアドレスのサブネットマスクが項番3で割り振ったものと違った
次は、ゲストOSからインターネット上のサイトにアクセスできているか確認します。今回は、DNSで利用したGoogleのDNSにPingをします。
ping 8.8.8.8

もし通信ができていない場合は、ホストOS側のNAPT設定(項番4)がうまく行っていない可能性が高いので、もう一度確認してみましょう。Powershell上で「get-netnat」を打つと、設定しているNAPTの情報が確認できます。
ここまで確認して、ブラウザ側だけで通信できない場合は、IPアドレス⇒URLの変換がうまく行っていないと思われるので、DNSの設定が間違っている可能性が高いです。ゲストOS側のDNS設定(項番5)をもう一度正しく設定されているか確認してみましょう。下記のようにDNSの部分に設定していたアドレスが表示されていれば問題ありません。

最後に
今回Hyper-V上で作成した仮想マシンの固定IP化をしてきました。これを利用することで、ホストOS側でSSHで接続したり、FTPでファイルを送ったり色々と便利になります。


コメント