Virtualboxの閉じた環境でパケットキャプチャ（Wireshark）を実施【その1 ～要件定義、Virtualboxセットアップ～】

# まえがき
「パケットキャプチャ」はネットワークエンジニアの必須スキルです。日々起こるネットワーク障害の解決の第一歩はパケットを読み解くことから始まります。

パケットキャプチャの標準ツールといえば「Wireshark」ですね。基本的なパケット解析は十分に行える機能を備えていて、かつ無料で利用できます。パケットキャプチャ関連の書籍でも扱われていることが多く、初学者はまずはじめに「Wireshark」をいじることになると思います。

早速手持ちのPCにWiresharkをインストールしてパケットキャプチャをやってみましょう、と言いたいところですが、ホストOSに直接Wiresharkを入れると、いたずらに大量のパケットが流れてきてしまいます。

「パケットキャプチャって何？」状態で、大量に流れてくるパケットを一つ一つ読み解くのは苦労しますし、パケットキャプチャを行うネットワーク環境への理解がないとパケット解析が味気ないものになります。

**ならいっそ、特定のパケットだけが流れるように自分で仮想環境を整えて、パケットキャプチャ（Wireshark）の基礎知識・ツールの使い方を学習しましょう。**

# 対象読者
わたし自身インフラエンジニア1年目でして、ネットワーク構築・パケットキャプチャの学習の一環として今回の仮想環境の構築をしました。「学習前にこんな情報があったらよかったな」と思える記事にしています。対象となるのは次のような方です。

- 未経験からインフラエンジニアを目指す人
- 駆け出しインフラ、ネットワークエンジニア
- パケットキャプチャ初学者
- 仮想環境（Virtualbox）初学者


# 仮想環境でパケットキャプチャをする理由
仮想環境を使うメリットとして、

- ホストOSの環境を汚さずに済むので検証に向いている
- 特定のパケットだけが流れるように調整できる
- 自分でネットワーク/サーバー構築をすれば、パケットの成因が理解できるため、パケット解析がやりやすい
- 閉じた環境でパケットキャプチャができるので、仮想環境外のネットワークに影響を与えずに済む

などが挙げられます。ホストOSに大量に流れてくるパケットを見るよりも、必要最小限の動きをするサーバーを自分で構築して、パケットを観察するほうが理解が進みます。

# 仮想環境ネットワーク構成図
具体的には、次の要件を満たすネットワークを構築していきます。

- Virtualboxの内部ネットワークを利用して、仮想マシン同士だけが通信できる閉じた環境をつくる。
- 仮想環境にDNS、DHCP、Webサーバーを構築して、それぞれのプロトコルをWiresharkで観察する。
- Webサーバーへの問い合わせを曖昧としないため、WebサーバーとクライアントPCを別の仮想マシンに設定する。

:point_down:絵にしてみました


![ネットワーク構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/0049e067-39d3-6094-d9af-ac3826d054ba.png)
NATはサーバー構築で使うパッケージやWiresharkのインストールのときだけ接続します。

パケットキャプチャは内部ネットワークを使った閉じた環境で行うため、サーバーはすべて内部ネットワークのセグメント（172.16.0.0/24）に割り当てましょう。「子3」はクライアントPCとして扱うので、これにWiresharkをインストールします。

仮想環境外のネットワークは一般家庭のそれを想定しています。市販のルーターならDNSサーバー、DHCPサーバーの機能も備えているはずです（今回の場合、仮想環境以外はあまり関係ないですが…）

# 環境
#### ホストOS（Windows10 Pro）
プロセッサ：Intel(R) Xeon(R) CPU E5-1620 v2 @ 3.70GHz 3.70GHz
実装メモリ(RAM)：32.0GB
システムの種類：64bit
#### 仮想化ソフト（Virtualbox）
バージョン 6.1.14 r140239 (Qt5.6.2)
#### ゲストOS（CentOS-8.2.2004）
メインメモリ：2.0GB
システムの種類：64bit

# Virtualboxインストール
事前にホストOSにVirtualboxをインストールして、仮想環境が構築できる環境を整えておきます。
セットアップウィザードの説明にしたがって進めればインストールできます。

- [Downloads – Oracle VM VirtualBox](https://www.virtualbox.org/wiki/Downloads)


# ISOイメージインストール
今回はゲストOSにCentOS8を使いました。CentOSの公式サイトからISOイメージをインストールできます。今回私は[こちら](http://ftp.riken.jp/Linux/centos/8.2.2004/isos/x86_64/)から「CentOS-8.2.2004-x86_64-boot.iso」をインストールしました。

- [Download - CentOS](https://www.centos.org/download/)

# 仮想マシン起動
VirtualboxとISOイメージのインストールが完了したら、仮想マシンを起動しましょう。
仮想マシンは３台立てます。それぞれの仮想マシンの役割は違いますが、スペック（OS、メモリー、ストレージ容量など）は同じで問題ありません。

### 例）仮想マシン「子1」を立てる。
では、仮想マシンを起動してみましょう。上のネットワーク構成図でいうところの「子1」を例にあげますが、「子2」「子3」も同じ条件で作成します。仮想マシンの名前をそれぞれ「子1_CentOS8」「子2_CentOS8」「子3_CentOS8」とでもしてわかりやすく区別できていればOKです。

#### 仮想マシンをリストに追加する。
1. Virtualboxのマネージャー画面から「新規(N)」をクリックします。
<br>
2. 「名前」は「子1_CentOS」とでもしてください。自動的に「タイプ(T)」に「Linux」が、バージョン(V)に「Red Hat (64-bit)」が割り当てられます。CentOSはRed Hat系のLinuxディストリビューションなのでそのままで問題ありません。
**※ただし「Red Hat (64-bit)」が選択されているか必ず確認してください。ISOイメージは64ビット版をインストールしたので「Red Hat (32-bit)」などが割り当てられていると、仮想マシンが起動しません。**
![1. 仮想マシン_名前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/c1f8eece-8602-b918-a581-2e41d31626be.png)


3. メモリーサイズはご自身のホストOSの空きメモリと相談してください。2GB（2048MB）程度を割り当てれば十分です。
![2. メモリーサイズ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/67906b88-0f2d-c79b-2fb5-eead7e70b690.png)

4. ハードディスクは「仮想ハードディスクを作成する(C)」を選択して「作成」をクリックしてください。
![3. ハードディスク作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/926f9f7b-7df0-0e13-870b-9809d225fafc.png)

5. ハードディスクのファイルタイプは「VDI(VirtualBox Disk Image)」を選択して、「次へ(N)」をクリックしてください。
![4. ハードディスクのファイルタイプ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/2e25961a-f040-304b-7259-11e3264e2a9b.png)

6. ディスク容量は「可変サイズ(D)」を選択して、「次へ(N)」をクリックしてください。
![5. ハードディスク_可変サイズ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/be3699f7-bede-25e3-c410-1c6f8eb28c12.png)

7. ハードディスクの容量は「20GB」程度を割り当てれば十分です。「作成」をクリックすれば、仮想マシンがリストに追加されます。
![6. ハードディスク容量.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/0bcb5485-081b-b8e1-fb2f-40c530a22efd.png)


#### 仮想マシンのスペックを設定して起動する。
スペックを設定して仮想マシンを起動します。OS（CentOS8）のインストールにはある程度時間がかかります。

1. Virtualboxのマネージャー画面から「設定(S)」をクリックします。左側のリストの「ストレージ」を選択し、「ストレージデバイス(S)」の「コントローラー: IDE」にある「空」と表示されているディスクアイコンをクリックしてください。
![7. ストレージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/22caa3a2-4a74-667e-5232-8c9840a0a923.png)

2. 右側の属性の「光学ドライブ(D):」はデフォルトの「IDE セカンダリマスター」を選択し、ディスクアイコンをクリックしてください。「ディスクファイルを選択…」を選択し、インストールしたISOイメージを割り当てます。「空」と表示されていたディスク割り当てがISOイメージファイルに変更されたのを確認してください。
![8. ディスクファイルを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/c25038f1-10ca-df33-6341-eea1a14177ac.png)

3. 次はネットワークの設定をします。左側のリストの「ネットワーク」を選択してください。アダプター1にはNATが自動で割り当てられています。アダプター2のタブをクリックして、「ネットワークアダプターを有効化(E)」にチェックをいれて、「割り当て(A):」に「内部ネットワーク」を選択してください。「名前(N):」はデフォルトの「intnet」のままでOKです。なおその場合は、「子2」「子3」の内部ネットワークの「名前(N):」も「intnet」に統一してください。「名前(N):」が違うと仮想マシン同士で通信ができなくなります。
![9. 内部ネットワーク設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/e34e19f7-daab-37fb-ddaf-4ed3eebebaad.png)

4. 以上でネットワーク設定は完了です。「OK」をクリックし、Virtualboxマネージャー画面で新しい仮想マシンがリストに追加されたことを確認してください。
![10. 仮想マシンリストに追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/5da3644b-2b45-a486-538f-e688b9669731.png)

5. 「起動(T)」をクリックして仮想マシンを起動します。起動ハードディスクにインストールしたISOイメージを割り当てて、「起動」をクリックします。
![11. 仮想マシン起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/c5e65a9b-49c6-46b1-94ce-b4b32f238898.png)

6. 「Install CentOS Linux8」を選択し、エンターキーを押してください。
![12. CentOS install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/afa36dc0-9525-9e7c-9a4a-cfcf7898ff31.png)


7. しばらくするとCentOSのインストーラー画面に遷移します。インストール時の言語は日本語を選択して「続行(C)」をクリックします。
![13. 言語設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/f5332750-2319-1774-d734-eadb25895cc8.png)


8. インストール概要に進んだらネットワーク接続をオンにします。アダプター1にNATを割り当てているため「Ethernet(enp0s3)」はNATです。NATのネットワークは、Virtualboxが内部でDHCPサーバーを設定してくれているため、自動的にIPアドレス「10.0.2.15」を割り当ててくれます。（「Ethernet(enp0s8)」は内部ネットワークアダプターです。こちらは自分でIPアドレスを設定する必要があり、この時点では接続できません。）
![14. ネットワーク接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/f684804e-eabb-c786-a7d8-cda71d761a2c.png)



9. インストールするデバイスはそのまま「ローカルの標準ディスク」にあるハードディスクを選択して、「完了(D)」をクリックしてください。
![15. ハードディスク割り当て.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/a8b2dcec-c9b5-97b2-cec5-c889a0d12442.png)


10. 次に「ソフトウェアの選択(s)」です。ベース環境はGUIがあったほうがわかりやすいので「サーバー（GUI使用）」を選択し、右側の「選択した環境用のその他のソフトウェア」では「開発ツール」を選択してください。
![16. ソフトウェアの選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/dc0e8a0c-c751-56bf-4d48-6600263ba0c5.png)


11. 「時刻と日付(T)」は日本時間（アジア/東京）に設定しましょう。以上でCentOSインストール時の設定は完了です。「インストールの開始」をクリックしてください。GUIをインストールするため、ある程度時間がかかります。
![17. 時刻設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/ff27d0a2-920b-24d9-61cd-e93e0e9e8031.png)


12. CentOSのインストールの間にユーザーの設定をします。「rootパスワード(R):」でrootユーザーのパスワードと、「ユーザーの作成(U)」で一般ユーザーの作成を行ってください。
![19. ユーザー設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/86cfb44a-22ff-9a27-3804-84837398f4bb.png)


13. インストールが終わったらインストーラー画面の「再起動」ではなく、クローズボタン（Windowsなら右上のバツ印）をクリックして、「仮想マシンの電源オフ(P)」を選択してください。（「再起動」を押すと、またCentOSのインストールが始まってしまいます。）
![22.1. CentOSインストール完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/24af33c0-a24c-d333-a84a-274cf1a43805.png)


14. Virtualboxのマネージャー画面から「設定(s)」を選択し、「ストレージデバイス」からISOイメージの割り当てを除去します。
![20. ISOイメージ割り当て除去.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/aab84c31-9abb-4bbf-e9b8-33d825ad5adc.png)

15. この状態で「起動(T)」をクリックし、仮想マシンを起動してください。すでにISOイメージはマウント済みなので、CentOS8が立ち上がります。
![21. CentOS8起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/d10e4a68-03b1-6ec8-9b5c-149e23cb67b0.png)


16. 「License Information」をクリックしたら、「ライセンス契約に同意します。(A)」にチェックを入れて「完了(D)」をクリックしてください。「設定の完了」を押すとログイン画面に遷移します。
![22. ライセンス同意.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/970e6819-1dca-5e02-8662-195592a5a4a5.png)


17. CentOSインストール時に設定した一般ユーザーでログインしてください。これで仮想マシンの起動は完了です。お疲れさまでした。
![23. CentOS8デスクトップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/523850/f381aa0e-29fb-2772-558b-075502f01667.png)


# 参考
- [パケットキャプチャの教科書、みやたひろし](https://www.sbcr.jp/product/4797390711/)
- [VirtualBoxのネットワーク設定を絵で説明する](https://qiita.com/feifo/items/0fde474005589afcff68)
- [User Manual - VirtualBox](https://www.virtualbox.org/manual/ch06.html)