[Hyper-V] 内部ネットワークに固定IPアドレスを設定後 外部ネットワークに接続する方法

プログラミング
・ホストOSからゲストOSに対して、固定IPアドレスを指定してSSH接続したい。
・「Default Switch」仮想スイッチを使用すると、ホストOSを再起動するたびに内部ネットワークのIPアドレスが勝手に書き換わってしまう。
・「内部ネットワーク」仮想スイッチは作成できたが、その先どうしたらよいか分からない。
・ホストOSとゲストOSは接続できたが、ゲストOSが外部ネットワークにつながらない。
・内部ネットワークの各仮想マシンに固定IPアドレスを設定したが、ゲストOSが外部ネットワークにつながらない。

※本記事では、分かりやすさを重視して、親パーティションをホストOS、子パーティションをゲストOSと呼ぶことにします。

上記の悩みを抱える方に、Hyper-Vで内部ネットワークに固定IPアドレスを設定後、ゲストOSから外部ネットワークに接続する方法をお教えします。
私自身が構築を進める中でつまづいた箇所についても、注意点として書き残します。

本記事の内容を実施すれば、内部ネットワークに固定IPアドレスを設定後、ホストOSからゲストOSに対してSSH接続できるようになります。
また、ゲストOSから外部ネットワークにアクセスできるようにもなります。
よければ参考にしてみてください。

 

Hyper-Vで内部ネットワークに固定IPアドレスを設定後、ゲストOSから外部ネットワークに接続する方法

使用したもの・環境
・Windows 11(ホストOS)
・Ubuntu Desktop 22.04(ゲストOS)
・Hyper-V

※すでにゲストOS仮想マシンが作成済みであることを前提に話を進めます。

まずは、Hyper-V マネージャーでの作業手順から説明します。

1. Hyper-V マネジャー画面で「仮想スイッチ マネジャー…」を開く。

 

2. 「内部」を選択し、新しい仮想スイッチを作成する。

 

3. 新しい仮想スイッチを任意の名前に変更し、接続の種類は「内部ネットワーク」を選択する。
(今回は「Internal Network Switch」と名前を付けました。)

 

4. 手順3で作成した「内部ネットワーク」仮想スイッチに接続したいゲストOSの「設定…」を開く。

 

5. ナビゲーションメニューからネットワークアダプターを選択し、右側の設定画面で手順3で作成した仮想スイッチを選択する。

 

Hyper-V マネージャーでの作業は以上です。
次は、手順3で作成した仮想スイッチに接続するホストOSの、内部ネットワークのIPアドレスの設定を行います。

 

6. コントロールパネルから「ネットワークと共有センター」を開く。

 

7. ネットワークと共有センターからアダプターの設定の変更を開く。

 

8. 手順3で作成した仮想スイッチとつながるアダプターのプロパティを開く。

 

9. インターネット プロトコル バージョン 4 (TCP/IPv4)を選択し、プロパティを開く。

 

10. 「次のIPアドレスを使う」を選択し、IPアドレスとサブネットマスクに任意の値を入力する。
(今回は「IPアドレス:172.16.0.1」「サブネットマスク:255.255.255.0」としました。)
(プライベートアドレスの範囲については、こちらの記事を参考にしました。)

11. PowerShellで以下のコマンドを実行し、NATネットワークを構成する。
構文)New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix>
(手順10でホストOSに設定した内容をもとに、今回は「New-NetNat -Name “Internal Network” -InternalIPInterfaceAddressPrefix 172.16.0.0/24」と入力して実行しました。)
(NATネットワークの設定に関しては、こちらの記事を参考にしました。)

 

ホストOSのネットワークの設定は以上です。
最後に、ゲストOSに対してもホストOSと同様にIPアドレスの設定を行います。

 

12. ゲストOSの有線設定を開く。
(仮想環境の中では有線接続という扱いのようですね…)

 

13. ネットワークの設定画面で有線の設定(歯車マーク)を開く。

 

14. 有線の設定画面で「タブ:IPv4」を開き、「手動」を選択し、手順10でホストOSに設定した内容をもとに、「アドレス:172.16.0.2」「ネットマスク:255.255.255.0」「ゲートウェイ:172.16.0.1」「DNS:8.8.8.8, 8.8.4.4」を入力する。
(手順10より、アドレスは「172.16.0.x(x = 2~254)」なら何でもよいです。)
(※ここで、ゲートウェイとDNSを入力しないとうまくいかなかったのでご注意を!)

 

15. 有線接続をONにし、接続済みになることを確認する。

 

16. ターミナルを開き、以下のpingコマンドを実行して、疎通確認できれば完了です。
・ping 172.16.0.1(ホストOS)
・ping 8.8.8.8(Google Public DNS)
・ping google.com(Google検索サイト)

 


 

設定手順は以上です。
みなさん、外部ネットワーク接続まで無事行えましたか?

私はホストOSとゲストOS間の接続まではスムーズに行えましたが、どうしてもゲストOSから外部ネットワークに接続することができませんでした。
google.comにpingを送っても、「名前解決に一時的に失敗しました」と返され、どうしても解決方法が分からない…。
数時間悩み続けた結果、ゲストOSの「ゲートウェイ」と「DNS」の設定が原因だという答えに、やっとのことで辿り着きました。

Ubuntuの「/run/systemd/resolve/stub-resolv.conf(/etc/resolv.conf)」や「/run/systemd/resolve/resolv.conf」の中身をいじる方法などいろいろ試しましたが、そんな作業は一切不要でした(※むしろいじらないほうがよいという情報もありました。)。
ここはしつこく言っておきますが、ゲストOSの「ゲートウェイ」と「DNS」は、忘れずに必ず設定してくださいね!

ここまで読んだくださってありがとうございました。
今後もみなさんのお役に立てるような情報を発信していきます。




タイトルとURLをコピーしました