KVM入門一覧
- 【KVM入門⓪】〜Linuxの基礎知識〜
- 【KVM入門①】〜KVMを使って仮想マシンを作成する〜
- 【KVM入門②】〜複数の仮想マシンを作成して、仮想マシン間で通信を行えるようにする〜👈今ここ
- 【KVM入門③】〜DNSとhostsの設定を行う〜
- 【KVM入門④】〜NFSを使って全ての仮想マシンでファイルを共有する〜
- 【KVM入門⑤】〜LDAPを使ってユーザ情報などを一元管理する〜
はじめに
KVMシリーズ第2回です。
今回は、複数の仮想マシンを作成して、仮想マシン間で通信できるようにしていきます。
まずは実際に行うコマンドを紹介し、その後解説をしていきます。
以下の図の赤色の部分のように、test-vm1
からtest-vm4
を作成して、それぞれのホスト間でpingが通るようにするところまでをこの回の目標とします。
すること
1. 仮想マシンの複製
前回作成したtest-vmという名前の仮想マシンを複製する。
sudo virt-clone --original test-vm --name test-vm1 --auto-clone
test-vm1
の部分を、test-vm2
、test-vm3
、test-vm4
に変えて4回コマンドを入力し、4つの仮想マシンを作成する。
以下のように表示されれば、仮想マシンの複製は成功している。
[xxx@localhost ~]$ sudo virt-clone --original test-vm --name test-vm1 --auto-clone
Allocating 'test-vm1.qcow2' | 30 GB 00:00:01
Clone 'test-vm1' created successfully.
[xxx@localhost ~]$ sudo virt-clone --original test-vm --name test-vm2 --auto-clone
Allocating 'test-vm2.qcow2' | 30 GB 00:00:01
Clone 'test-vm2' created successfully.
[xxx@localhost ~]$ sudo virt-clone --original test-vm --name test-vm3 --auto-clone
Allocating 'test-vm3.qcow2' | 30 GB 00:00:01
Clone 'test-vm3' created successfully.
[xxx@localhost ~]$ sudo virt-clone --original test-vm --name test-vm4 --auto-clone
Allocating 'test-vm4.qcow2' | 30 GB 00:00:01
Clone 'test-vm4' created successfully.
[xxx@localhost ~]$ sudo virsh list --all
Id Name State
---------------------------
- test-vm1 shut off
- test-vm2 shut off
- test-vm3 shut off
- test-vm4 shut off
作成できたら全て起動しておく。
sudo virsh start test-vm1
2. 仮想ネットワークの設定
流れは以下の通り。
- 仮想ネットワークに関する情報をxmlファイルに書く
- ネットワークインターフェースを作成する
- ネットワークインターフェースを起動する
まずはxmlファイルを作成する。
sudo vi net-define.xml
以下をコピペする。
<network>
# 任意の名前
<name>test-net</name>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge stp='on' delay='0'/>
# デフォルトゲートウェイのIPアドレス
<ip address='172.16.1.254' netmask='255.255.255.0'></ip>
</network>
sudo virsh net-define net-define.xml
成功すると以下のように表示される。
[xxx@localhost ~]$ sudo virsh net-list --all
Name State Autostart Persistent
---------------------------------------------
default active yes yes
test-net active no no
仮想ネットワークを起動し、自動起動を有効にする。
sudo virsh net-start test-net
sudo virsh net-autostart test-net
以下のように表示されれば、仮想ネットワークの設定は成功している。
[xxx@localhost ~]$ sudo virsh net-list --all
Name State Autostart Persistent
---------------------------------------------
default active yes yes
test-net active yes yes
3. 仮想マシンへの適用
仮想マシンの設定の編集をする。
sudo virsh edit test-vm1
上のコマンドを入力するとviが起動するので、以下の部分を変更する。(/netで検索すると早い。)
<interface type='network'>
<mac address='52:54:00:39:22:ed'/>
<source network='test-net'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
仮想ネットワークを再起動する。
sudo virsh net-destroy test-net
sudo virsh net-start test-net
仮想マシンを再起動する。
sudo virsh shutdown test-vm1
sudo virsh start test-vm1
以下のように表示されれば、仮想マシンへの適用は成功している。
[xxx@localhost ~]$ sudo virsh domiflist test-vm1
Interface Type Source Model MAC
------------------------------------------------------------------
vnet1 network test-net virtio 52:54:00:39:22:ed
[xxx@localhost ~]$ sudo virsh domiflist test-vm2
Interface Type Source Model MAC
------------------------------------------------------------------
vnet1 network test-net virtio 52:54:00:39:22:ed
[xxx@localhost ~]$ sudo virsh domiflist test-vm3
Interface Type Source Model MAC
------------------------------------------------------------------
vnet1 network test-net virtio 52:54:00:39:22:ed
[xxx@localhost ~]$ sudo virsh domiflist test-vm4
Interface Type Source Model MAC
------------------------------------------------------------------
vnet1 network test-net virtio 52:54:00:39:22:ed
4. IPアドレスとデフォルトゲートウェイの設定
ここからは仮想マシン内で作業を行う。test-vm1
を例に説明する。
仮想マシンに接続する。
sudo virsh console test-vm1
test-vm1
のIPアドレスを設定する。
nmcli con mod enp1s0 ipv4.address "172.16.1.1/24"
デフォルトゲートウェイを設定する。
nmcli con mod enp1s0 ipv4.gateway "172.16.1.254"
IPアドレスを固定する。
nmcli con mod enp1s0 ipv4.method manual
ネットワーク接続を再起動する。
nmcli con down enp1s0
nmcli con up enp1s0
以下のように表示されればIPアドレスとデフォルトゲートウェイの設定は成功している。
[xxx@localhost ~]# nmcli dev show enp1s0
GENERAL.DEVICE: enp1s0
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 52:54:00:39:22:ED
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: enp1s0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveC>
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 172.16.2.1/24
IP4.GATEWAY: 172.16.2.254
IP4.ROUTE[1]: dst = 172.16.2.0/24, nh = 0.0.0.0, mt =>
IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 172.16.2.100, mt >
IP6.ADDRESS[1]: fe80::5054:ff:fe39:22ed/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024
5. pingで導通確認
4つの仮想マシンでのIPアドレスとデフォルトゲートウェイの設定が終わったら、最後にping
コマンドで導通確認を行う。
仮想マシン間で通信できることを確認する。
ping 172.16.1.2 -c 3
以下のように表示されれば成功している。
[root@localhost ~]# ping 172.16.1.2 -c 3
PING 172.16.2.2 (172.16.2.2) 56(84) bytes of data.
64 bytes from 172.16.2.2: icmp_seq=1 ttl=64 time=0.131 ms
64 bytes from 172.16.2.2: icmp_seq=2 ttl=64 time=0.238 ms
64 bytes from 172.16.2.2: icmp_seq=3 ttl=64 time=0.358 ms
--- 172.16.2.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2083ms
rtt min/avg/max/mdev = 0.131/0.242/0.358/0.092 ms
[root@localhost ~]# ping 172.16.1.3 -c 3
PING 172.16.2.3 (172.16.2.3) 56(84) bytes of data.
64 bytes from 172.16.2.3: icmp_seq=1 ttl=64 time=0.254 ms
64 bytes from 172.16.2.3: icmp_seq=2 ttl=64 time=0.350 ms
64 bytes from 172.16.2.3: icmp_seq=3 ttl=64 time=0.343 ms
--- 172.16.2.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2050ms
rtt min/avg/max/mdev = 0.254/0.315/0.350/0.043 ms
[root@localhost ~]# ping 172.16.1.4 -c 3
PING 172.16.2.4 (172.16.2.4) 56(84) bytes of data.
64 bytes from 172.16.2.4: icmp_seq=1 ttl=64 time=0.264 ms
64 bytes from 172.16.2.4: icmp_seq=2 ttl=64 time=0.351 ms
64 bytes from 172.16.2.4: icmp_seq=3 ttl=64 time=0.391 ms
--- 172.16.2.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2036ms
rtt min/avg/max/mdev = 0.264/0.335/0.391/0.053 ms
Google Public DNSと通信できるか確認する。
ping 8.8.8.8 -c 3
以下のように表示されれば成功している。
[root@vm1 schema]# ping 8.8.8.8 -c 3
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=2.41 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=2.64 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=115 time=2.89 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.411/2.645/2.889/0.195 ms
さいごに
今回は仮想マシンを複製して、仮想マシン同士で通信できるようにする方法を紹介しました。
次回はDNSのサーバの設定を行っていきます。