※本記事では、分かりやすさを重視して、親パーティションをホスト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」は、忘れずに必ず設定してくださいね!
ここまで読んだくださってありがとうございました。
今後もみなさんのお役に立てるような情報を発信していきます。