【VirtualBox】インストール～ネットワーク接続時のトラブルシューティング

VirtualBoxインストール～ネットワーク接続時に発生した不具合とその解決方法についてまとめました。

## 環境情報
- OS（ホストOS）：Windows10
- VirtualBox 6.1.4
- 仮想マシンのOS（ゲストOS）:CentOS8.1.1911

## 発生した不具合と解決方法
※以下の手順はrootユーザーで実施してください。

#### 1. インストール後に再起動すると、再度最初からインストールになる
isoファイルを仮想マシンに入れたままによることが原因で発生します。
インストール後、再起動する前に一度電源を落とし、isoファイルを除去してから起動しましょう。
手順は以下の通り。

①VirtualBox マネージャーの「設定」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/b299a851-6af7-8d85-a208-70323ca60858.png)

②「ストレージ」を選択し、isoファイルの上で右クリックし、「割り当てを除去」し、「OK」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/9db01c1f-c332-e754-dedd-adb981c4506d.png)

#### 2. 右Ctrlキー（ホストキー）がない
Windows版のVirtualBoxでは、仮想マシン（ゲストOS）から、本体（ホストOS）に戻る際にデフォルトでは右Ctrlキーを押すことになっています。
が、そもそもこのキーがないPCもあるので、その場合や別のキーを使いたい場合は以下の手順で変更してください。

1.VirtualBoxマネージャーで「ファイル」 > 「環境設定」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/c734b968-c76d-51ba-4673-aef34ab1f98a.png)

2.「入力」>「仮想マシン」を選択すると、いちばん上に「ホストキーの組み合わせ」があるのでこちらを変更します。
※デフォルトでは「Right Control」= 「右Ctrlキー」になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/8d7d5f0f-15f1-d6c9-4a9d-70ec73a8aaf8.png)

3.「ホストキーの組み合わせ」のショートカットキーのスペースをクリックし、変更したいキーを押し（今回はF9キーにしました）、「OK」をクリックして反映させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/af85aeb8-d475-eee3-2759-9d477c53655f.png)

#### 3. ネットワーク接続できない（pingが通らない）
##### (1)IPアドレスによるpingは通るが、ドメイン名だと通らない
IPアドレスによるpingの応答はあるが、ドメイン名だと「名前またはサービスが不明です」などと出て、通らないケースです。
この場合、/etc/resolv.confが存在しない or 設定が間違っている可能性があります。
以下のコマンドを実行し、GoogleのパブリックDNSをリゾルバとして設定してください。

```
# nmcli c mod コネクション名 ipv4.addresses 8.8.8.8,8.8.4.4
# systemctl restart NetworkManager
```
最後に、以下のコマンドを実行してIPアドレスが正しく設定されていることを確認します。

```
# cat /etc/resolv.conf
```
設定した内容がうまく反映されていない場合は一度仮想マシン自体を再起動してみましょう。
以下のコマンドを実行します。

```
# reboot
```
その後再度接続確認してみてください。

##### (2)IPアドレスでもドメイン名でもpingが通らない
###### (2)-1.IPアドレスによるping結果が「connect: ネットワークに届きません」、「名前またはサービスが不明です」と出る場合
ネットワーク接続に必要なデバイスに接続されていない可能性が高いです。
TYPEがethernetのデバイスが接続されているか確認します。
以下のコマンド

```
# nmcli d
```
を実行して、TYPEがethernetのDEVICEのSTATEが以下のように「切断済み」になっていたらデバイスに接続する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/ede6f27a-b178-8531-bcdc-8700d908c78d.png)

デバイスに接続するコマンドは以下の通り。

```
# nmcli connect up デバイス名
```
「接続が正常にアクティベートされました」と出れば接続成功です！
再度pingしてうまくいくか確認してみましょう。


###### (2)-2.IPアドレスによるpingが「Destination Host Unreachable」、ドメイン名によるpingが「名前またはサービスが不明です」などと出る場合
IPアドレスの設定が間違っている可能性があります。
以下のコマンドを実行して状況を確認します。

```
# nmcli d show デバイス名
```
すると、デバイスに関する情報が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/8148cec2-1bd4-2dd4-fd22-ea0d3f4cfc91.png)

ネットワークアダプターが「ブリッジアダプター」の場合はIP4.ADDRESS（上記キャプチャの赤枠で囲まれた部分）がホストOSと別に、「NAT」の場合は同じ必要があります。

ホストOSにてコマンドプロンプトを開き、

```
> ipconfig
```
を実行して、ホストOSの接続情報を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356958/9cbe82c2-7f0f-bf4b-dc70-b31e2661c743.png)

ゲストOS側で適切な設定を行い、仮想マシンを再起動します。

```
# nmcli c mod コネクション名 ipv4.addresses 適切なIPアドレス
# reboot
```

上記キャプチャの場合（ブリッジアダプターだが、ホストOSと同じIPアドレスを指定していた）は以下の通り。

```
# nmcli c mod enp0s3 ipv4.addresses 192.168.100.26/24
# reboot
```

これで再度pingコマンドを実行してうまくいくか確認してみましょう。

####(3)(1),(2)をやってもうまくいかない場合
一度、不具合のある仮想マシンを削除するか、VirtualBox自体をアンインストールして再度インストールしなおします（最終手段です）。

後者の場合、

- 仮想マシンフォルダの削除
- ログ等の削除

も忘れずに（アンインストールではこれらは削除されません）。

デフォルトでは、

- 仮想マシンフォルダ：C:\Users\ユーザー名\VirtualBox VMs
- ログ等：C:\Users\ユーザー名\.VirtualBox

に入っているので、フォルダごと削除します。

## 終わりに
上記の事象で躓いて、ネットワーク接続できるまでに丸2日かかりました・・・。
少しでも、今後VirtualBoxを使う方の参考になれば幸いです。

## 参考
- [VirtualBoxの設定でつまずいたところ | Qiita](https://qiita.com/KANTU/items/0cf39aacdecc48cda4e2)
- [右Ctrlがないキーボードでホストキー(右Ctrl)を入力する方法 | Life with IT](https://l-w-i.net/t/virtualbox/key_001.txt)
- [CentOS 7～8 ネットワーク設定、及び IPv6 無効化
2019.11.270 Comment4 Images24 Codes | etuts+](https://server.etutsplus.com/centos-7-network-configuration/)
- [【CentOS8/nmcli】使い方とオプション一覧～自動接続,デフォルトゲートウェイ/ip/dns変更,ステータス確認～ | SEの道標](https://milestone-of-se.nesuke.com/sv-basic/linux-basic/nmcli/)