VMWare, VirtualBoxのネットワーク接続方式の違いを整理する

## はじめに
VMWare, VirtualBoxでネットワーク設定をする際、何をどう設定するのがよいかたびたびわからなくなるため、改めて接続方式・構成についてちゃんと理解しておこうと思いました。
そうすることで今後仮想環境を構築する際、ユースケースに応じて適切な設定を選択できればと思います。

### 対象
- 仮想環境のネットワークを何となく設定して繋がったので終わりにしている人
- 何となく設定したけれども思うように繋がらず困っている人
- ちょっと前の自分

### 想定環境
- ホストPC: Windows10 Pro 64bit
- 仮想化ソフトウェア:
 - VMware WorkStation Player 12
 - Oracle VM VirtualBox 6.0

会社内LANなどに接続したホストPCで仮想環境を構築し、仮想マシンをネットワーク接続させる場合を想定

## ネットワーク設定と概略
ざっくりまとめると以下のようになります。
NATに関してはVMwareとVirtual Boxで差分がありますが、他はほぼ同じと思われます。


| VMware         | Virtual Box            | 概要                                                                                                                                                                           | ホストPC→仮想マシン             | 仮想マシン→ホストPC | 仮想マシン→インターネット | 仮想マシン間 |
|----------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|---------------------|---------------------------|--------------|
| NAT            | -                      | ・ホストPCのNICを通じて外部に接続<br>・仮想マシンはNATネットワークに属して互いにアクセス可能<br>・ホストPCからも仮想NICでNATネットワークにアクセス可能                     | ○                               | ○                   | ○                         | ○            |
| -              | NAT                    | ・ホストPCのNICを通じて外部に接続<br>・仮想マシンごとの個別ネットワーク<br>・ホストPCからは仮想マシンは見えないがポートフォワードでアクセス可能                            | △<br>ポートフォワード設定が必要 | ○                   | ○                         | ×            |
| -              | NATネットワーク        | ・NAT(Virtual Box)は仮想マシンごとのネットワークだったのに対し、複数の仮想マシンが属して互いにアクセス可能<br>・ホストPCからのアクセスにポートフォワードが必要なのは変わらない | △<br>ポートフォワード設定が必要 | ○                   | ○                         | ○            |
| ブリッジ       | ブリッジアダプタ       | ・ホストPCのNICを通じてホストPCが属するLANに加わる<br>・ホストPCからだけでなく、LANに属する別PCからも仮想マシンへアクセス可能                                                  | ○                               | ○                   | ○                         | ○            |
| ホストオンリー | ホストオンリーアダプタ | ・ホストPCのNICとは繋がらず外部接続はできない<br>・仮想マシンと仮想NICでネットワークを構築し、ホストPCとは仮想NICを通じて互いにアクセス可能                                    | ○                               | ○                   | ×                         | ○            |
| LANセグメント  | 内部ネットワーク       | ・仮想マシン間のみでネットワークを構築<br>・DHCPが無いのでIPアドレスなどの設定は個別に実施                                                                                     | ×                               | ×                   | ×                         | ○            |

とりあえず仮想マシンでインターネット接続可能・ホストPCと相互アクセス可能としたい場合は
・VMware: NAT
・Virtual Box:
　　NAT(NATネットワーク) + ホストオンリーアダプタ (とりあえず広く仮想マシンにアクセス)
　　NAT(NATネットワーク) + NATのポートフォワード設定 (SSHや特定サービスのみ仮想マシンにアクセス)
としておけば悩まずに済むと思います。

## NAT
VMwareとVirtual Boxいずれもデフォルトのネットワーク設定であるNATですが
ネットワーク構成やできることに違いがあります。

### NAT(VMware)
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474074/5507fa85-a6c6-dd40-9eef-621dd45499e6.jpeg)
ホストPCのNICを通じて外部にアクセスできるようにします。(NAT=Network Address Translation)
仮想ネットワークVMnet8内でDHCPによって仮想マシンにIPアドレスが割り当てられ、そのIPアドレスを使ってホストPCから仮想マシンにアクセスできます。
VirtualBoxのNAT/NATネットワークでは、ホストPCから仮想マシンにアクセスするにはポートフォワードが必要ですが、VMWareでは不要という違いがあります。

VMnet8用のネットワークアダプタを無効化した場合はホストPC-仮想マシン間はアクセスできなくなりますが、本来(？)のNATとしての仮想マシン→インターネット接続は可能です。

### NAT/NATネットワーク(Virtual Box)
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474074/82714055-730e-b1f2-252e-c81b9e5af110.jpeg)
ホストPCのNICを通じて外部アクセスするのはVMwareのNATと同様です。
仮想環境内部ではVirtual BoxのNATエンジンが10.0.n.0/24のネットワークを構築します。([参考](https://www.virtualbox.org/manual/ch09.html#changenat))
NATは仮想マシンごとに個別ですが、NATネットワークは複数の仮想マシンで互いにアクセス可能となるのでVMwareに少し近い構成です。
ただホストPCから仮想マシンにアクセスする仮想NICは無いので、必要に応じてポートフォワード設定することになります。


## ブリッジ
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474074/19aa1b47-98fd-ebe3-f77e-537c02f97d4b.jpeg)
ホストPCの既存のNICを使用し、ホストPCが属するLANに接続します。
ネットワーク設定で「VMWare Bridge Protocol」「VirtualBox NDIS6 Bridged Networking Driver」などが有効になっているネットワークアダプタを選択して使用します。
なおVMwareとVirtual Boxを両方インストールしている環境などで、互いの仮想NICがブリッジ接続有効な状態で存在し、それをブリッジ接続先として選択しているとうまく接続できない要因となったりするようです。

ホストPCと仮想マシンは双方が属するLANを通じて互いにアクセス可能で、同じLANに接続された別PCからも仮想マシンにアクセス可能です。
仮想マシンにはホストPCと同じサブネットのIPアドレスが割り振られ、単純にLANに属するPCが1台増えた扱いとなります。LAN上のプリンタなども普通に使えます。
ホストPCに限定しないサーバーとして用いるならブリッジ接続がよいですが、PCを厳密に管理する会社内などでは、PC追加やネットワーク接続に別途申請が必要だったりするかもしれないので注意が必要です。

とりあえずブリッジにしておけばよい…という話を聞くこともありますが、ホストPCと仮想マシンの相互アクセスと仮想マシンからのインターネット接続がしたいのであれば、前述のようにNATやNAT+ホストオンリーで実現する方が適切かなと思われます。


## ホストオンリー
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474074/ae9450e0-5898-cd5e-eee5-204227b14fad.jpeg)
仮想ネットワーク内でDHCPによって仮想マシンにIPアドレスが割り当てられ、そのIPアドレスを使ってホストPCから仮想マシンにアクセスできます。
構成はNATと似ていますがNAT部分が無く、ホストPC-仮想マシン間のアクセスのみ可能です。
仮想マシンがインターネット接続する必要がなく、ホストPC内に閉じた仮想環境という位置づけで使用するのみであればホストオンリーネットワークが妥当かと思います。

## LANセグメント/内部ネットワーク
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474074/4de2b5c7-7b64-12f6-a7f1-695ac479e885.jpeg)
複数の仮想マシン間でのみ接続できる構成です。
VMwareではネットワーク設定で任意の名前のLANセグメントを作成してプルダウンメニューで選択し
Virtual Boxでは仮想マシン側のネットワーク設定で任意の名前を入力します。
DHCPはないのでIPアドレスなどのネットワーク設定は仮想マシンごとに個別に行い、互いに疎通できることも自分で確認してから使います。

## 最後に
汎用アダプタとかカスタムとかは自分には敷居が高そうなので手を出していません。
まずは自分に必要なネットワーク設定についてちゃんと理解して選択できるようになっておきたいと思います。
読まれた方で何かご指摘・アドバイスなどありましたら是非いただければと思います。

以上です。