ネットワークの勉強のために、ソケットを扱ったプログラミングをしています。実際にプログラムを動かすときに、本当はPC2台使ってやりたかったのですが、色々な意味でPC2台を準備できませんでした。そこで、自分のPC1台だけで済む環境を用意しました。こういった、環境を整える記事はネットにあまりないと思ったので、今回書いてみます。
まずVirtualBoxでホストOSとゲストOSを用意します。私の環境は以下の通りです。
- Windows10
- Ubuntu18.04 (64bits)
- VirtualBox6.0.8
VirtualBoxにUbuntuを普通に入れるだけでは、ホストOSとゲストOS間の双方向通信が出来ません。
ゲストOSからホストOSにはpingは通るのですが、逆は上手くいきません。このままでは一方通行になってしまい、通信が出来ません。こうなるのは、ネットワーク設定が"NAT"というタイプにデフォルトで設定されているからです。なのでこのネットワーク設定をホストOSとゲストOS間で双方向通信が出来るように、変更してあげる必要があります。
ネットワーク(アダプター)のタイプには"NAT"の他にいくつかありますが、各種タイプの具体的な違いについては、詳しく説明した記事がたくさんありますので割愛します。今回は、いくつかあるタイプの中から"ホストオンリーアダプター"というのを使っていきます。

上の画像のように、
設定>>ネットワーク>>アダプター2
というように進んでください。ネットワークアダプタ-を有効にするにチェックボックスを入れると、好きなタイプを選択することができるようになります。デフォルトのアダプター1(NAT)に加え、アダプター2にホストオンリーアダプターを追加していきます。ホストオンリーアダプターを追加すると、自動でVirtualBox Host-Only Ethernet Adapterが選択されると思います。上の画像では#2がついていますが、初めて追加する人は#2が付きません。
ここのネットワークアダプターの設定をいじれば、最大4つまでインターフェースを追加することができます。
それではしっかり追加出来ているかipconfigとifconfigで確認してみましょう。

しっかりと追加されているのが確認できます。ちなみにホストオンリーアダプターは、ホストOSとゲストOS間でローカルネットワーク(192.168.198.0/24)を形成しているのが分かりますね。上の画像では分かりませんが、192.168.198.2はDHCPサーバに割り当てられています。
補足ですが、ubuntu画面の"enp0s3"というインターフェースは、ネットワークアダプターにNATを指定してあるので、windowsからenp0s3にpingを通そうとしても、通りません。
それでは、双方向通信ができるなら、どちらからでもpingは通るはずです。試しにpingを通してみます。

両方ともpingが通っていますね。あとは両者を通信するプログラムを書けば上手くいくはずです。
最後まで読んでいただきありがとうございました。