ここでは、仮想ネットワークから物理ネットワークへの通信は、NAT経由で行う構成の設定を紹介する。
仮想スイッチのブリッジインターフェイス(ifcfg-ovsbr0)を新規で作成する。作業はホストマシン上で行う。
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-ovsbr0
※ 以下設定を入力/保存
DEVICE=ovsbr0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.24.254
NETMASK=255.255.255.0
HOTPLUG=no
ZONE=trusted
network サービスを再起動し、仮想スイッチのブリッジインターフェイスを反映する。
$ sudo systemctl restart network
$
$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.11.100 netmask 255.255.255.0 broadcast 192.168.11.255
inet6 fe80::fa22:fb46:1747:8118 prefixlen 64 scopeid 0x20<link>
ether 0c:9d:92:7f:d0:76 txqueuelen 1000 (Ethernet)
RX packets 274922 bytes 231437776 (220.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 279484 bytes 74292221 (70.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xa1100000-a1120000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 7960 bytes 686304 (670.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7960 bytes 686304 (670.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ovsbr0: flags=67<UP,BROADCAST,RUNNING> mtu 1500
inet 192.168.24.254 netmask 255.255.255.0 broadcast 192.168.24.255
inet6 fe80::54d3:efff:feef:4148 prefixlen 64 scopeid 0x20<link>
ether ee:05:80:f2:67:4f txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 900 (900.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$
libvirt に仮想スイッチのネットワークを登録するための設定ファイル(ovsbr0.xml)を作成する。
■ libvirtに登録されている default ネットワークの設定ファイルをコピー
$ sudo cp -p /etc/libvirt/qemu/networks/default.xml /tmp/
$
■ コピーしたファイル名を変更
$ sudo mv /tmp/default.xml /tmp/ovsbr0.xml
■ ovsbr0.xml 編集
$ sudo vi /tmp/virbr0.xml
※ 以下に設定
<network>
<name>ovsbr0</name>
<forward mode='bridge'/>
<bridge name='ovsbr0'/>
<virtualport type='openvswitch'/>
</network>
作成した ovsbr0.xml を libvirt に登録する。
$ sudo virsh net-define /tmp/ovsbr0.xml
ネットワーク ovsbr0 が /tmp/ovsbr0.xml から定義されました
登録した ovsbr0.xml を libvirt で起動する。
$ sudo virsh net-start ovsbr0
ネットワーク ovsbr0 が起動されました
ovsbr0.xml を libvirt で自動起動するように設定する。
$ sudo virsh net-autostart ovsbr0
ネットワーク ovsbr0 が自動起動に設定されました
仮想マシンからホストマシンを経由して外部ネットワークへ接続できるようにNATの設定する。まずは、カーネルでパケット転送を有効にする。
■ パケット転送を有効化
$ sudo sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
$
■ 有効化できていることを確認
※ net.ipv4.ip_forward = 1が登録されていることを確認
$ sudo cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1
$
次に、ファイアウォールの trusted ゾーンに ovsbr0 インターフェイスを追加し、ホストマシンが仮想マシンからのパケットを全て許可する。
■ trusted ゾーンに登録する
$ sudo firewall-cmd --zone=trusted --add-interface=ovsbr0
success
$
■ trusted ゾーンに登録されていることを確認
※ interfaces に ovsbr0 が登録されている
$ sudo firewall-cmd --list-all --zone=trusted
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: ovsbr0
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
$
ファイアウォールの public ゾーンにIPマスカレードを追加し、NATを有効にする。
■ public ゾーンに登録する
$ sudo firewall-cmd --zone=public --add-masquerade --permanent
success
$
■ public ゾーンに登録されていることを確認
※ masquerade が yes になっている
$ sudo firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: breno1.101 breno1.100 eno1 eno1.100 eno1.101
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
$
ファイアウォールの設定をリロードし反映する。
$ sudo firewall-cmd --reload
success
$