[03] Vagrant を使って VM「192.168.101.1」と「192.168.101.2」を立てる

|シリーズトップページ|
|:--|
|https://qiita.com/robozushi10/items/bbdcb9e3548fb5d22dcb|

# 概要

仮想PC (以降「VM」) が 2台必要になった場合に、Vagrant + VirtualBox を使って
VM 2台「192.168.101.1」「192.168.101.2」を立てるための手順である.

なお、VM の OS は Linux を想定しており、ここでは「Centos-7-v7.4-Minimal-CLI」を使う.


# 環境

## 物理PC

```
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
```

# 前提条件

次の (a)(b) の両方を満たしていること.
(a) 物理PC 上に VirtualBox と Vagrant がインストール済みであること.
(b) Vagrant を使って VirtualBox の操作ができること.


# 手順

## 1. Vagrantfile を作成する

https://app.vagrantup.com/CentosBox/boxes/Centos-7-v7.4-Minimal-CLI より、
下図の要領で「Centos-7-v7.4-Minimal-CLI」の雛形となる Vagrantfile を入手する.

なお、VM へのログインIDとパスワードも「`vagrant`」と記されている.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/2a3b6a00-5ea2-e6bf-3567-328c3544d140.png)

### 雛形

```ruby
Vagrant.configure("2") do |config|
  config.vm.box = "CentosBox/Centos-7-v7.4-Minimal-CLI"
  config.vm.box_version = "17.11.24"
end
```

## 2. Vagrantfile に今回構築したい VM「192.168.101.1」と「192.168.101.2」を定義する

下記🛑のように、VM「192.168.101.1」と「192.168.101.2」を定義している.
また、 VM のマシン名をそれぞれ「ansibleclient1」「ansibleclient2」としている.
加えて、メモリの割り当て量も 1024MB (1GB) としている.

なお、別の Box (Dockerで例えるとイメージ) を使いたい場合は、🔥 を変更すれば良い.

```ruby
# coding: utf-8
# -*- mode: ruby -*-
# vi: set ft=ruby :
 
LINUX_OS = 'CentosBox/Centos-7-v7.4-Minimal-CLI' # 🔥

# ハッシュの配列として定義している
vm_spec = [
  {
    name: 'ansibleclient1',
    cpu: 1,
    memory: 1024,
    box: LINUX_OS,
    private_ip: '192.168.101.1', # 🛑
  },
  {
    name: 'ansibleclient2',
    cpu: 1,
    memory: 1024,
    box: LINUX_OS,
    private_ip: '192.168.101.2', # 🛑
  },
]
 
Vagrant.configure("2") do |config|
  # ハッシュ配列から 1個ずつ取り出してセットアップしている
  vm_spec.each do |spec|
    config.vm.define spec[:name] do |v|
      v.vm.box      = spec[:box]
      v.vm.hostname = spec[:name]
      v.vm.network :private_network,ip: spec[:private_ip]
      v.vm.provider "virtualbox" do |vbox|
        vbox.gui = false
        vbox.cpus = spec[:cpu]
        vbox.memory = spec[:memory]
      end
    end
  end
end
```

## 3. VM を稼働させる

```bash
$ vagrant up
```

## 4. VM が稼働確認をする

### vagrant status 

VM 2台が running 状態であることを確認する

```bash
$ vagrant status
Current machine states:
 
ansibleclient1            running (virtualbox)
ansibleclient2            running (virtualbox)
```

### vagrant ssh <VM>

ホストから VM 2台に対して SSH 接続できることを確認する

```bash
$ vagrant ssh ansibleclient1
Last login: Thu Jul 27 18:09:11 2017
```
```bash
$ vagrant ssh ansibleclient2
Last login: Thu Jul 27 18:09:21 2017
```


## 5. ネットワーク設定をする

下図の要領で以下ができるようにする.
・ホストと VM 間の接続
・VM 同士の接続

### 5-1. ポートフォワーディングルールを開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/b417a3fc-c7e1-6ed6-9eea-3372e40aa3b4.png)

### 5-2. 2台の VM に対して次のようにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1246056/c1620162-e8f8-6b04-053f-8c947f33e635.png)

### 5-3. vboxnet(N) (ホストオンリーアダプター) を作成する.

#### 参考にした情報

・https://qiita.com/tukiyo3/items/24dff2b3c234382a83e2

#### 5-3-1. 192.168.101.1 の vboxnet しか存在しないことを確認する

物理ホスト上で以下を実行する.
もしも 192.168.101.2 が存在する場合は 5-3-2 以降は不要である.

```bash
$ ip a s
(略)
14: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.1/24 brd 192.168.101.255 scope global vboxnet0
       valid_lft forever preferred_lft forever
```

#### 5-3-2. 192.168.101.2 用の vboxnet を作成する

物理ホストで以下を実行する.

```bash
$ VBoxManage hostonlyif create
```

#### 5-3-3. 192.168.101.2 用の vboxnet が作成されたことを確認する

下記🛑の通り、追加された.

```bash
$ ip a s
(略)
14: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.1/24 brd 192.168.101.255 scope global vboxnet0
       valid_lft forever preferred_lft forever
15: vboxnet1:🛑 <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 0a:00:27:00:00:01 brd ff:ff:ff:ff:ff:ff
```

#### 5-3-4. VM の設定を有効にする

```bash
$ vagrant reload
```

#### 5-3-5. ネットワーク疎通確認をする

最小確認として次を実行すれば良い

・ホストから「192.168.101.1」への ping チェック
・ホストから「192.168.101.2」への ping チェック
・「192.168.101.1」から「192.168.101.2」への ping チェック

　

以上.