ちょっと使えるVMがすぐにほしい時用
確認OSはRHEL9.4(GUIインストール)
前提:サブスク
準備
ネットワーク周りの設定
bondingやbridge、VLANなどあれば
firewalld停止
[root@host01 ~]# systemctl stop firewalld
[root@host01 ~]# systemctl disable firewalld
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
SElinux無効化
root@host01 ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33
[root@host01 ~]# 
[root@host01 ~]# 
[root@host01 ~]# vi /etc/selinux/config     #"SELINUX=enforcing"を"disabled"に変える
[root@host01 ~]# 
[root@host01 ~]# shutdown -r now
[root@host01 ~]# sestatus
SELinux status:                 disabled
vncserverインストール
WEBブラウザ使いたいので
[root@host01 ~]# dnf install tigervnc-server
[root@host01 ~]# su - vncuser                 #VNCを使用するユーザーへスイッチ(任意)
[vncuser@host01 ~]$
[vncuser@host01 ~]$ vncpasswd                 #パスワード設定(初回のみ)
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
[vncuser@host01 ~]$ 
[vncuser@host01 ~]$ vncserver -list           #何も表示されない
WARNING: vncserver has been replaced by a systemd unit and is now considered deprecated and removed in upstream.
Please read /usr/share/doc/tigervnc/HOWTO.md for more information.
TigerVNC server sessions:
X DISPLAY #	PROCESS ID                        #	:1が存在した場合はkillする。$ vncserver -kill :1
[vncuser@host01 ~]$
[vncuser@host01 ~]$ vncserver -nolisten tcp   #VNCサーバ起動
WARNING: vncserver has been replaced by a systemd unit and is now considered deprecated and removed in upstream.
Please read /usr/share/doc/tigervnc/HOWTO.md for more information.
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
xauth:  file /home/vncuser/.Xauthority does not exist
New 'host01:1 (vncuser)' desktop is host01:1
Creating default startup script /home/vncuser/.vnc/xstartup
Creating default config /home/vncuser/.vnc/config
Starting applications specified in /home/vncuser/.vnc/xstartup
Log file is /home/vncuser/.vnc/host01:1.log
[vncuser@host01 ~]$ 
[vncuser@host01 ~]$ ss -nltp |grep vnc |grep -v "\[::\]"     # ポート590XがLISTENしていること。XはDISPLAY番号と同じになり、ここでは5901。複数起動した場合は5902,5903...
LISTEN 0      5            0.0.0.0:5901      0.0.0.0:*    users:(("Xvnc",pid=10852,fd=9))
[vncuser@host01 ~]$
[vncuser@host01 ~]$ vncserver -list
WARNING: vncserver has been replaced by a systemd unit and is now considered deprecated and removed in upstream.
Please read /usr/share/doc/tigervnc/HOWTO.md for more information.
TigerVNC server sessions:
X DISPLAY #	PROCESS ID
:1		10852
[vncuser@host01 ~]$ 
次から本題
KVM/QEMU/libvirt パッケージインストール
# dnf install qemu-kvm
# dnf install libvirt
# dnf install libguestfs-tools
# dnf install virt-install
# dnf install virt-viewer
KVM: kernelに組み込まれたCPUのハードウェア仮想化機能(Intel VT-xやAMD-Vなど)を利用してVMを操作できる。仮想CPUやメモリを提供するハイパーバイザー化するもの
QEMU: ゲストOSからの入出力I/O(DISK、NW)を仮想化する機能を提供するハードウェアエミュレータ。KVMと連携することで、KVMが仮想マシンの命令を直接CPUで実行するため、連携することでVMのパフォーマンスが大幅に向上する
libvirt: 仮想マシンの作成、管理、および監視に必要な共通APIを様々な仮想化環境に提供し、統一的な操作を可能にするツールキット(ソフトウェアライブラリ)。QEMU、KVMのほか、VMwareESX,VirtualBox等もサポートしている
[root@host01 ~]# systemctl status libvirtd
● libvirtd.service - libvirt legacy monolithic daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2025-02-01 06:59:04 JST; 10s ago
TriggeredBy: ● libvirtd-admin.socket
             ● libvirtd.socket
             ● libvirtd-ro.socket
       Docs: man:libvirtd(8)
             https://libvirt.org/
   Main PID: 136273 (libvirtd)
      Tasks: 22 (limit: 32768)
     Memory: 27.9M
        CPU: 407ms
     CGroup: /system.slice/libvirtd.service
             ├─136273 /usr/sbin/libvirtd --timeout 120
             ├─136376 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             └─136377 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
 2月 01 06:59:04 host01 systemd[1]: Started libvirt legacy monolithic daemon.
 2月 01 06:59:04 host01 dnsmasq[136376]: started, version 2.85 cachesize 150
 2月 01 06:59:04 host01 dnsmasq[136376]: compile time options: IPv6 GNU-getopt DBus no-UBus no-i18n IDN2 DHCP DHCPv6 no-Lua TFTP no-conntrack ipset au>
 2月 01 06:59:04 host01 dnsmasq-dhcp[136376]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
 2月 01 06:59:04 host01 dnsmasq-dhcp[136376]: DHCP, sockets bound exclusively to interface virbr0
 2月 01 06:59:04 host01 dnsmasq[136376]: reading /etc/resolv.conf
 2月 01 06:59:04 host01 dnsmasq[136376]: using nameserver 192.168.0.1#53
 2月 01 06:59:04 host01 dnsmasq[136376]: read /etc/hosts - 2 addresses
 2月 01 06:59:04 host01 dnsmasq[136376]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
 2月 01 06:59:04 host01 dnsmasq-dhcp[136376]: read /var/lib/libvirt/dnsmasq/default.hostsfile
[root@host01 ~]# systemctl enable libvirtd
[root@host01 ~]# 
[root@host01 ~]# for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done   #libvirtが提供する各種仮想化リソースのソケットサービスを一括起動
[root@host01 ~]# 
[root@host01 ~]# virsh net-list --all                #defaultでブリッジデバイスが作成される
 名前      状態     自動起動     永続 
---------------------------------------------
 default   動作中   はい (yes)   はい (yes)
[root@host01 ~]# 
[root@host01 ~]# ip a                                #host上のIFでも確認できる
(略)
10: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:7d:6c:d8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
仮想化サービスの確認
下2つ以外が成功になっていればOK
[root@host01 ~]# virt-host-validate
  QEMU: Checking for hardware virtualization                                 : 成功
  QEMU: Checking if device '/dev/kvm' exists                                 : 成功
  QEMU: Checking if device '/dev/kvm' is accessible                          : 成功
  QEMU: Checking if device '/dev/vhost-net' exists                           : 成功
  QEMU: Checking if device '/dev/net/tun' exists                             : 成功
  QEMU: Checking for cgroup 'cpu' controller support                         : 成功
  QEMU: Checking for cgroup 'cpuacct' controller support                     : 成功
  QEMU: Checking for cgroup 'cpuset' controller support                      : 成功
  QEMU: Checking for cgroup 'memory' controller support                      : 成功
  QEMU: Checking for cgroup 'devices' controller support                     : 成功
  QEMU: Checking for cgroup 'blkio' controller support                       : 成功
  QEMU: Checking for device assignment IOMMU support                         : 成功
  QEMU: Checking if IOMMU is enabled by kernel                               : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
  QEMU: Checking for secure guest support                                    : WARN (Unknown if this platform has Secure Guest support)
[root@host01 ~]# 
※
IOMMUは、物理PCIデバイスを仮想マシンでそのまま使用できるPCIパススルーと呼ばれる仮想化支援機能で使用する技術。主な警告の原因は以下
・CPU / マザーボードがIOMMU(Intel VT-d / AMD-V)に対応していない
・BIOS / UEFIで上記設定が有効化されていない
・カーネルのIOMMU機能が有効化されていない
secure guestは無視してよい
Cockpitインストール
RH公式のUIコンソールがあるので使ってみる。
[root@host01 ~]# dnf install cockpit                       #サーバGUI利用でインストールしている場合は不要
[root@host01 ~]# dnf install cockpit-machines
[root@host01 ~]#
[root@host01 ~]# systemctl enable --now cockpit.socket     #自動起動設定
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket → /usr/lib/systemd/system/cockpit.socket.
[root@host01 ~]# 
[root@host01 ~]# vi /etc/cockpit/disallowed-users          #"root"の記載をコメントアウトして、CockpitのWeb画面にrootでもアクセスできるようにする
ブラウザから "https://hostIP:9090" でアクセスできる

VM作成
ゲストOS用のメディアをダウンロードする(ここでは9.4)
isoファイルを/var/lib/libvirt/boot/へ配置
VM作成
コマンドラインで作成
# virt-install \
  --name guest01 \
  --memory 32768 \
  --vcpus 16 \
  --cpu host-passthrough \
  --os-variant rhel9.4 \                       # "osinfo-query os" コマンドで確認できる
  --machine q35 \
  --disk path=/var/lib/libvirt/images/guest01.qcow2,size=480,format=qcow2,bus=virtio \
  --cdrom /var/lib/libvirt/boot/rhel-9.4-x86_64-dvd.iso \
  --network bridge=br0,model=virtio \          # 複数NICを付ける場合は下に行追記
  --graphics vnc,listen=127.0.0.1 \
  --noautoconsole"
自動起動設定
# virsh autostart guest-vm01
Cockpitから設定
CockpitのコンソールからでもVM作成ができる。
メディアを使う場合、インストールソースはcockpitが動いているホスト上のパスを選択する。

VM設定
作成されると、 /var/lib/libvirt/images/にqcow2ファイルができる
[root@host01 ~]# ls -lh /var/lib/libvirt/images/
合計 5.6G
-rw------- 1 qemu qemu 1001G  2月  3 13:39 guest01.qcow2
仮想マシンの画面からそのままVMコンソールがみれるので、そこでポチポチインストール

ホスト側にvnetのIFが作成される
[root@host01 ~]# ip a
(略)
10: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:7d:6c:d8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
21: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:9e:c3:b4 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe9e:c3b4/64 scope link 
       valid_lft forever preferred_lft forever
virbr0
libvirtが作るホストマシンで動作する仮想BridgeIF。KVMデフォルトネットワーク(192.168.X.0/24)のDHCPサーバとなっているため、VM同士が内部で通信できる他、VMはホストが持つアドレスでソースNAT(192.168.X.1)で外部NWにアクセスできる(外部から直接VMへのアクセスはデフォルトでは不可)
vnet0
ホスト側で作られる仮想マシン1つ1つに対応するIFで、TAPデバイスとも言われる。
vnetXはVMのNICと紐づき、仮想Bridge(virbr0)を通じて外部NWと通信するorVM同士が通信する
VM(vNIC)が増えるとvnet1,2...とが作成される。
VM確認
vnet0のアドレスはDHCPで払い出される
[root@host01 ~]# 
[root@host01 ~]# virsh list --all
 Id   名前         状態
---------------------------
 8    guest01   実行中
[root@host01 ~]# 
[root@host01 ~]# virsh domifaddr guest-vm01
 名前     MAC アドレス     プロトコル     アドレス
-------------------------------------------------------------------------------
 vnet0      52:54:00:9e:c3:b4    ipv4         192.168.122.226/24
[root@host01 ~]# 
[root@host01 ~]# virsh domiflist guest-vm01
 インターフェイス   種類      ソース    モデル   MAC
--------------------------------------------------------------------
 vnet0              network   default   virtio   52:54:00:9e:c3:b4
[root@host01 ~]# 
今の状態では、
KVM host → virbr0 → vnet0 → VM NIC
VM → vnet0 → virbr0 → KVM host → 別NW
の通信が可能
VMログイン
[root@host01 ~]# 
[root@host01 ~]# ssh 192.168.122.226
root@192.168.122.226's password: 
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Mon Feb  3 13:48:30 2025 from 192.168.122.1
[root@guest01 ~]# 
[root@guest01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:9e:c3:b4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.226/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
       valid_lft 2620sec preferred_lft 2620sec
    inet6 fe80::5054:ff:fe9e:c3b4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@guest01 ~]# 
[root@guest01 ~]# ip r                       #DGWはhost01のvirbr0のアドレス
default via 192.168.122.1 dev enp1s0 proto dhcp src 192.168.122.226 metric 100 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.226 metric 100 
[root@guest01 ~]# 
[root@guest01 ~]# ping 172.16.0.130          #host01のeth0アドレス
PING 172.16.0.130 (172.16.0.130) 56(84) bytes of data.
64 バイト応答 送信元 172.16.0.130: icmp_seq=1 ttl=64 時間=0.069ミリ秒
64 バイト応答 送信元 172.16.0.130: icmp_seq=2 ttl=64 時間=0.050ミリ秒
^C
--- 172.21.224.130 ping 統計 ---
送信パケット数 2, 受信パケット数 2, 0% packet loss, time 1033ms
rtt min/avg/max/mdev = 0.050/0.059/0.069/0.009 ms
[root@guest01 ~]# 
[root@guest01 ~]# ping 172.16.1.245          #host01から到達できる別のNW
PING 172.16.1.245 (172.16.1.245) 56(84) bytes of data.
64 バイト応答 送信元 172.16.1.245: icmp_seq=1 ttl=254 時間=4.67ミリ秒
64 バイト応答 送信元 172.16.1.245: icmp_seq=2 ttl=254 時間=4.61ミリ秒
64 バイト応答 送信元 172.16.1.245: icmp_seq=3 ttl=254 時間=4.70ミリ秒
^C
--- 172.17.112.245 ping 統計 ---
送信パケット数 3, 受信パケット数 3, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 4.607/4.657/4.701/0.038 ms
[root@guest01 ~]# 
VM snapshot
[root@host01 ~]# 
[root@host01 ~]# virsh snapshot-create guest01
ドメインのスナップショット 1738649255 が作成されました 
[root@host01 ~]# 
[root@host01 ~]# virsh snapshot-list guest01
 名前         作成時間                    状態
---------------------------------------------------
 1738649255   2025-02-04 15:07:35 +0900   running
[root@host01 ~]# 
[root@host01 ~]# virsh snapshot-revert guest01 --snapshotname 1738649255
VMに外部から接続可能にする
KVMのデフォルトであるvirbr0ブリッジはNATタイプのため、VM→外NWとVM→KVMホストとVM間では通信ができるが、外NW→VMにアクセスすることはできない。
※以下の手順は一度デフォルトネットワーク(virbr0)で作成されたVMに対して外部から接続させるようにする手順。
VM作成時に指定したい場合は、ホスト側で作成したbridgeデバイスをネットワークに指定すること。
・CUIならvirsh-install時に  --network bridge=BRIDGE名を指定して作成
・cockpitなら仮想マシンを作成する前に編集でネットワークをbridgeに変更する
0. 状態確認
[root@host01 ~]# nmcli con
NAME      UUID                                  TYPE      DEVICE   
eth0      f7597c7c-4b7e-358b-8f41-067660cc0174  ethernet  eth0 
lo        218321c6-81e6-4749-9dad-c0f6d98cfdb6  loopback  lo       
virbr0    7e83e49c-b7f4-494c-a696-ecddc4776865  bridge    virbr0   
vnet3     4b773abf-d807-4d62-988c-b154f251e99c  tun       vnet3
...
1. Bridge Interface (br0) の作成
ホスト上でBridgeIFを作成
# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
2. 物理IF (eth0) のBridgeへの追加
次に、ホストの物理IFをBridgeIFに追加
# nmcli connection add type bridge-slave autoconnect yes con-name br0-port1 ifname eth0 master br0
3. ホストのIPアドレスをBridgeIF (br0) に移行
ホストのIPアドレスを物理IFからBridgeIFに移行
※ここではbridgeIFにアドレスを設定しているが、bridgeには振らずにVM接続だけさせるパターンもある
# nmcli connection modify br0 ipv4.addresses 172.16.0.130/24 ipv4.gateway 172.16.0.254 ipv4.dns 192.168.1.1 ipv4.method manual
# nmcli connection up br0
# nmcli connection down eth0          #アドレスが重複するのですぐに落とす
br0が作成されている
[root@host01 ~]# nmcli con
NAME       UUID                                  TYPE      DEVICE   
br0        bbee405e-45aa-452f-9423-84619e79a371  bridge    br0      
br0-port1  c7cc0ae5-7e21-4887-a282-d15b631308ad  ethernet  eth0
lo         218321c6-81e6-4749-9dad-c0f6d98cfdb6  loopback  lo       
virbr0     7e83e49c-b7f4-494c-a696-ecddc4776865  bridge    virbr0   
vnet0      4b773abf-d807-4d62-988c-b154f251e99c  tun       vnet0    
4. VM のネットワーク設定変更
VMのネットワークインターフェイスをvirbr0からbr0に変更する
仮想マシン→ネットワークインターフェースの追加

または既に付与されているIFを編集してbr0に変更する。
CUIの場合は、
virsh edit guest01
interfaceのセクションを変更する。既にtype=networkでdefaultが付いているはずなので、その下に追記する
<interface type='bridge'>
  <source bridge='br0'/>
  <model type='virtio'/>
</interface>
これで完了
(OMAKE)★VMにアタッチする仮想ネットワーク
Bridge to LAN
→ VMのNICを直接ブリッジに接続。L2トラフィックを物理に流したい時
Virtual network
→ libvirt管理の仮想ネットワークを経由して接続する
xmlファイルを作成してVirtualNetworkを定義する
KVMに作成したbridgeを認識させる
<network>
  <name>br0-network</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
</network>
[root@host01 ~]# 
[root@host01 ~]# virsh net-define br0-network.xml
ネットワーク br0-network が br0-network.xml から定義されました
[root@host01 ~]# 
[root@host01 ~]# virsh net-autostart br0-network
ネットワーク br0-network が自動起動に設定されました
[root@host01 ~]# virsh net-start br0-network
ネットワーク br0-network が起動されました
[root@host01 ~]# 
[root@host01 ~]# virsh net-list --all
 名前          状態     自動起動     永続
-------------------------------------------------
 default       動作中   はい (yes)   はい (yes)
 br0-network   動作中   はい (yes)   はい (yes)
 
[root@host01 ~]# 
virsh edit コマンドでVMのネットワークを定義したものに修正する
<interface type='network'>
  <source network='br0-network'/>
  <model type='virtio'/>
</interface>
VM作成時に --network network=br0-network と指定 → br0-networkがブリッジbr0と紐づいている
VMへログイン
[root@guest01 ~]# ip a   #enp7s0というIFが新規にアタッチされている
(略)
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:09:05:d4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.226/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
       valid_lft 2990sec preferred_lft 2990sec
    inet6 fe80::5054:ff:fe09:5d4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
5: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:08:b3:58 brd ff:ff:ff:ff:ff:ff
[root@guest01 ~]# 
[root@guest01 ~]# nmcli connection add type ethernet con-name enp7s0 ifname enp7s0 ipv4.method manual ipv4.addresses 172.16.0.226/24 ipv4.gateway 172.16.0.254    #アドレス付与
接続 'enp7s0' (7e582403-2a6e-49b7-89c1-4ec30be729d3) が正常に追加されました
[root@guest01 ~]# 
[root@guest01 ~]# ip a                    #アドレスが付いている
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:09:05:d4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.226/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
       valid_lft 2863sec preferred_lft 2863sec
    inet6 fe80::5054:ff:fe09:5d4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
5: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:08:b3:58 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.226/24 brd 172.21.224.255 scope global noprefixroute enp7s0
       valid_lft forever preferred_lft forever
    inet6 fe80::efbc:535:2883:38b1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@guest01 ~]# 
[root@guest01 ~]# 
[root@guest01 ~]# ip r                 #DGWが2つ登録されている.192.168.122.1のエントリを削除
default via 192.168.122.1 dev enp1s0 proto dhcp src 192.168.122.226 metric 100 
default via 172.16.0.254 dev enp7s0 proto static metric 101 
172.16.0.0/24 dev enp7s0 proto kernel scope link src 172.16.0.226 metric 101 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.226 metric 100 
[root@guest01 ~]# 
(option)defaultのnetworkを削除
Cockpitからdefaultのnetwork(192.168.122.226)を削除
アドレスとともにDGWも削除され、VMにホストが持つNWのアドレスを付与外のNWからbr0経由でVMへ通信させることができる
[root@guest01 ~]# 
[root@guest01 ~]# ip a
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:08:b3:58 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.226/24 brd 172.21.224.255 scope global noprefixroute enp7s0
       valid_lft forever preferred_lft forever
    inet6 fe80::efbc:535:2883:38b1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@guest01 ~]# 
[root@guest01 ~]# ip r
default via 172.16.0.254 dev enp7s0 proto static metric 100 
172.16.0.0/24 dev enp7s0 proto kernel scope link src 172.16.0.226 metric 100 
[root@guest01 ~]# 
ついでにホスト側からvirbr0(192.168.122.1)自体を抹消
[root@host01 ~]# 
[root@host01 ~]# virsh net-list
 名前           状態     自動起動     永続
---------------------------------------------
 default       動作中   はい (yes)   はい (yes)
 br0-network   動作中   はい (yes)   はい (yes)
 
[root@host01 ~]# 
[root@host01 ~]# virsh net-destroy default
ネットワーク default は強制停止されました
[root@host01 ~]# 
[root@host01 ~]# virsh net-list
 名前           状態     自動起動      永続
---------------------------------------------
 br0-network   動作中   はい (yes)   はい (yes)
 
[root@host01 ~]# 
[root@host01 ~]# virsh net-undefine default
ネットワーク default の定義が削除されました
ホストのIPからvirbr0が表示されなくなる。
いじょ
(OMAKE)■一連のnmcliコマンドリスト
サクッと設定したい時用のリスト
物理NICx2(eth0,eth1)
   ↓
bond0  ← trunk (VLAN 1101, 1102)
   ├─ bond0.1101  ← ホスト用、IPあり(192.168.110.10)
   └─ bond0.1102  ← VM用、IPなし
          ↓
        br0.1102  ← VMが接続
① bond0 の作成
# nmcli connection add type bond con-name bond0 ifname bond0 mode 802.3ad miimon 100 lacp-rate fast ipv4.method disabled ipv6.method ignore
# nmcli connection add type ethernet con-name bond0-slave1 ifname eth0 master bond0
# nmcli connection add type ethernet con-name bond0-slave2 ifname eth1 master bond0
#bondIF自体にアドレスを振らない場合、methodをv4:disabled/ignoreに指定
② VLAN 1101(ホスト用)を定義
vlan1101でホスト自体にSSHアクセスできるようにする
# nmcli connection add type vlan con-name bond0.1101 ifname bond0.1101 vlan.parent bond0 id 1101
# nmcli connection modify bond0.1101 ipv4.method manual ipv4.addresses 192.168.110.10/24
# nmcli connection modify bond0.1101 ipv6.method ignore
# nmcli connection up bond0.1101
③ VLAN 1102(VM用)を作成
VMがVLAN1102で通信する。ホスト自体は1102のアドレスは持たない。
# nmcli connection add type vlan con-name bond0.1102 ifname bond0.1102 vlan.parent bond0 id 1102
④ Bridge br0.1102 を作成して、bond0.1102 を 接続
# nmcli connection add type bridge con-name br0.1102 ifname br0.1102
# nmcli connection modify bond0.1102 master br0.1102
⑤ IFを起動
# nmcli connection up bond0.1102
# nmcli connection up br0.1102
(option) VM 側の接続(virt-manager/virt-install)
br0.1102をVMのNICにブリッジ接続
VM側のIPを設定
libvirt 用の virtual network を定義(任意)
確認
NAME              UUID                     TYPE      DEVICE
bond0             ...                      bond      bond0
bond0-slave0      ...                      ethernet  eth0
bond0-slave1      ...                      ethernet  eth1
bond0.1101        ...                      vlan      bond0.1101
bond0.1102        ...                      vlan      bond0.1102
br0.1102          ...                      bridge    br0.1102
virbr0            ...                      bridge    virbr0
DEVICE        TYPE      STATE                   CONNECTION
eth0          ethernet  接続済み                 bond0-slave0
eth1          ethernet  接続済み                 bond0-slave1
bond0         bond      接続済み                 bond0
bond0.1101    vlan      接続済み                 bond0.1101
bond0.1102    vlan      接続済み                 bond0.1102
br0.1102      bridge    接続済み                 br0.1102
lo            loopback  接続済み (外部)           lo
virbr0        bridge    接続済み (外部)           virbr0
また、NeworkManagerの設定が反映されるファイルは/etc/NetworkManager/system-connectionsディレクトリに各IFごとにファイルで分かれている
[connection]
id=bond0
uuid=12cc0647-7f21-49f0-93b2-6575db5680fc
type=bond
interface-name=bond0
[bond]
lacp_rate=fast
miimon=100
mode=802.3ad
[ipv4]
method=disabled
[ipv6]
addr-gen-mode=default
method=ignore
[proxy]
参考
