ここでは、仮想ネットワークから物理ネットワークへの通信は、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
$