VirtualBoxでHostからGuestに通信する3つの方法

普段はVMwareを利用しておりますが、諸事情によりVirtualBoxを使うことになったのでメモ。

## やりたいこと

* Host(mac)からGuest(CentOS6.x)にhttpでアクセス（要はWebが見たい）
* Host(mac)からGuest(CentOS6.x)にSSHでアクセス（要はログインしたい）
* どのような場合でもGuestからのインターネットアクセスが可能であること(要はyumとかしたい）

## 環境

* macOS 10.14.3
* VirtualBox 6.0.4
* GustOS: CentOS6.10(httpdインストール＋起動済み）

## 方法

以下の３つの方法がとりあえずの選択肢のよう。

* NAT + Port forwarding
* ブリッジ
* NAT + ホストオンリーアダプタ

それぞれのやり方を見ていく。


## NAT + Port forwarding

### イメージ

私の頭の中のイメージはこんな感じ。
標準設定？のNATでは、Host, Guest共にインターネットには接続できるものの、Host-Guest間での通信はできない。

そこで、Hostの特定ポートをGuestの特定ポートに転送することで通信できるようにする。

![スクリーンショット 2019-02-05 6.51.15.png](https://qiita-image-store.s3.amazonaws.com/0/55188/e66e2da9-55b4-5fbb-6f88-010322770972.png)

>物理I/Fやネットワークとバーチャルの表現が難しい。。。おかしければご指摘を。

### 設定

VirtualBoxを起動し、VMを選んで設定をクリックします。

![スクリーンショット 2019-02-05 7.14.32.png](https://qiita-image-store.s3.amazonaws.com/0/55188/236409e1-447c-39e9-7089-b930f337bf92.png)

ネットワークから高度をチェック。ポートフォワーディングをクリックします。

![スクリーンショット 2019-02-05 7.14.46.png](https://qiita-image-store.s3.amazonaws.com/0/55188/51759987-1e7e-5c7a-2615-ccf1af8a2271.png)

右上の+ボタンでルールを追加します。
ここでは、

* Hostの8888をGuestの80に。
* Hostの2222をGuestの22に。

転送設定をしています。

![スクリーンショット 2019-02-05 7.14.51.png](https://qiita-image-store.s3.amazonaws.com/0/55188/b8dabc80-a1ad-ae98-7f12-967f143ef02d.png)

VMを起動して動作を確認します。

### 確認

#### http

http://localhost:8888 にアクセスしてGuest側のWebが見えるか確認します。

![スクリーンショット 2019-02-05 8.31.12.png](https://qiita-image-store.s3.amazonaws.com/0/55188/ca7df538-a16d-2707-0773-db38a03e10fb.png)

見えました。

#### ssh

ターミナルを起動し、ポートを指定してlocalhostにsshしてみます。

```
ssh -p 2222 root@localhost
```

>とりあえずroot使います。すみません。

いけるはず。

## ブリッジ

環境が許すならこれが一番楽。
MAMPとかでいいところをわざわざVM作るってことは別IPでサーバ立てたいとかだろうし。

>ただ、マシンがLAN上に公開されてしまうので、許可されていない、もしくは、安全ではない環境では次のNAT+ホストオンリアダプタの選択になる。

### イメージ

イメージは下記のような感じ。普通にLANにマシンが追加される。IPの払い出しもLANのDHCPサーバから行われる。

![スクリーンショット 2019-02-05 7.30.09.png](https://qiita-image-store.s3.amazonaws.com/0/55188/5ae32590-8ff8-7178-ff34-a3e1f8bab90a.png)


### 設定

設定は簡単。ネットワーク設定で「割り当て」をブリッジアダプターにするだけ。

![スクリーンショット 2019-02-05 7.23.19.png](https://qiita-image-store.s3.amazonaws.com/0/55188/a2605e24-5172-bf25-150c-31b7a0693487.png)

変更したらVMを起動して動作を確認。

### 確認

ifconfigでGuestのIPアドレスを確認し、WebおよびSSHによるアクセスが可能か確認します。

![スクリーンショット 2019-02-05 8.35.45.png](https://qiita-image-store.s3.amazonaws.com/0/55188/bf1a81b9-39ff-ddff-afa2-fb5386dcd17d.png)

Web。ifconfigで設定されたIPのままでアクセス可能。

![スクリーンショット 2019-02-05 8.37.02.png](https://qiita-image-store.s3.amazonaws.com/0/55188/6a181f06-34d6-c606-6244-9bcba364f4c7.png)
sh

SSHでは下記のようにポートを指定する必要はない。

```
ssh root@192.168.11.10
```


## NAT + ホストオンリーアダプタ

インターネットの接続が不要ならNATなくてもよい。が、私の環境だと必要なので調査＋メモ。

>CentOS7だと少し操作が違います（簡単です）。文中に注記を書きます。

### イメージ

イマージは下記の通り。NATに加え、両ホストに新規に（ネットワークとそれに接続可能な）ネットワークアダプタを追加して相互に通信する。

![スクリーンショット 2019-02-05 7.58.58.png](https://qiita-image-store.s3.amazonaws.com/0/55188/db62ee48-07aa-4351-62f8-ff815f9881bc.png)


### 設定

まず、Toolsメニューを選択し、Createボタンを押してネットワークとネットワークアダプタを追加します。

![スクリーンショット 2019-02-10 5.37.51.png](https://qiita-image-store.s3.amazonaws.com/0/55188/7fd25db1-d784-a7a5-e80e-797b9770b7e7.png)

Createアイコンがない場合は、Toolsのメニューボタン？をクリックし、ネットワークを選択します。

<img width="178" alt="スクリーンショット 2019-02-10 5.30.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/55188/39e1a513-dcda-4eb2-ceb8-14f901e697a5.png">


>CentOS7の場合はこの時点で（ネットワーク　or マシンを）再起動すれば追加されたアダプタが認識され、そのIPでアクセスできます。


追加されたら、Propetiesボタンを押して、設定内容を確認しておきます。

![スクリーンショット 2019-02-05 7.47.48.png](https://qiita-image-store.s3.amazonaws.com/0/55188/82587dc0-f58c-55d3-42e4-390dda86ee54.png)

この場合、

* ネット空間は192.168.56.0/24
* Host側に追加されたネットワークアダプタのIPは192.168.56.1

ということのようです。

次に、VM側の設定を行います。
ネットワークを選択肢、アダプタ2のタブを選び、

* ネットワークアダプタを有効化
* 割り当て：ホストオンリーアタプター
* 名前：vboxnet0（先程作ったやつ）

とします。あと、設定に利用するのでMACアドレスをメモしておきます。

![スクリーンショット 2019-02-05 7.49.30.png](https://qiita-image-store.s3.amazonaws.com/0/55188/061d6dd8-6be5-3cb4-897d-d714adecf185.png)


CentOSの以下のファイルをいじります（新規作成します）。

>eth0は既にあるので、eth1とします。

```
vi /etc/sysconfig/network-scripts/ifcfg-eth1
```

追加するネットワークアダプタの情報を設定します。

```
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
HWADDR=08:00:27:FB:D4:95
IPADDR=192.168.56.2
NETMASK=255.255.255.0
NETWORK=192.168.56.0
```
主な解説。

* DEVICE=eth1（ディバイス名）
* TYPE=Ethernet
* ONBOOT=yes（起動時に有効にするか）
* BOOTPROTO=static（IPアドレスの割り当て方法）
* HWADDR=08:00:27:FB:D4:95（Macアドレス。2文字ずつ、:で区切って入力）
* IPADDR=192.168.56.2（GuestOS側のアドレス。とりあえず、2とした）
* NETMASK=255.255.255.0（ネットマスク）
* NETWORK=192.168.56.0（ネットワーク）

設定が終わったらアダプタを起動させます。

```
/etc/sysconfig/network-scripts/ifup eth1
```

>service network restartでもいいかも。

### 確認

割り振ったIP(192.168.56.2)でWebおよびSSHアクセスができるか確認します。

ifconfigで見ると、eth0とeth1が確認できます。

![スクリーンショット 2019-02-05 8.41.17.png](https://qiita-image-store.s3.amazonaws.com/0/55188/541058bb-7556-0a86-14f7-fd398e9f612e.png)

eth1の方のIPアドレスでWebおよびSSHアクセスできるか確認します。

Web。

![スクリーンショット 2019-02-05 8.42.17.png](https://qiita-image-store.s3.amazonaws.com/0/55188/f297b622-141c-7c0e-6771-ab058188c2a3.png)

SSH。

```
ssh root@192.168.56.2
```