LoginSignup
0
0

【KVM入門②】〜複数の仮想マシンを作成して仮想マシン間で通信を行えるようにする〜

Last updated at Posted at 2024-06-01

KVM入門一覧

  1. 【KVM入門⓪】〜Linuxの基礎知識〜
  2. 【KVM入門①】〜KVMを使って仮想マシンを作成する〜
  3. 【KVM入門②】〜複数の仮想マシンを作成して、仮想マシン間で通信を行えるようにする〜👈今ここ
  4. 【KVM入門③】〜DNSとhostsの設定を行う〜
  5. 【KVM入門④】〜NFSを使って全ての仮想マシンでファイルを共有する〜
  6. 【KVM入門⑤】〜LDAPを使ってユーザ情報などを一元管理する〜

はじめに

KVMシリーズ第2回です。

今回は、複数の仮想マシンを作成して、仮想マシン間で通信できるようにしていきます。

まずは実際に行うコマンドを紹介し、その後解説をしていきます。

以下の図の赤色の部分のように、test-vm1からtest-vm4を作成して、それぞれのホスト間でpingが通るようにするところまでをこの回の目標とします。

image.png

すること

1. 仮想マシンの複製

前回作成したtest-vmという名前の仮想マシンを複製する。

sudo virt-clone --original test-vm --name test-vm1 --auto-clone

test-vm1の部分を、test-vm2test-vm3test-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. 仮想ネットワークの設定

流れは以下の通り。

  1. 仮想ネットワークに関する情報をxmlファイルに書く
  2. ネットワークインターフェースを作成する
  3. ネットワークインターフェースを起動する

まずはxmlファイルを作成する。

sudo vi net-define.xml

以下をコピペする。

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のサーバの設定を行っていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0