Se știe bine că firewalld va șterge regulile Libvirt la reîncărcare și, astfel, va întrerupe redirecționarea portului către VM până când reporniți libvirtd. Iată ce am făcut:
- Crea
/etc/systemd/system/firewalld-reload-hook.service
[Unitate]
Description=firewalld reload hook - rulează un script hook la reîncărcare firewalld
Wants=dbus-broker.service
După=dbus-broker.service
[Serviciu]
Tip=simplu
ExecStart=/bin/bash -c '/bin/busctl monitor --system --json=short --match "interface=org.fedoraproject.FirewallD1,member=Reloaded" | while read -r line ; do [ -x /sbin/firewalld-reload-hook ] && /sbin/firewalld-reload-hook ; Terminat'
[Instalare]
WantedBy=multi-user.target
- Crea
/sbin/firewalld-reload-hook
#!/bin/bash
# Invocat de /etc/systemd/system/firewalld-reload-hook.service
set -e
logger „$BASH_SOURCE: Firewalld reîncărcare cârlig declanșat.”
/usr/bin/systemctl reporniți libvirtd
logger „$BASH_SOURCE: Libvirt a fost repornit”.
iesirea 0
și faceți-l executabil chmod +x /sbin/firewalld-reload-hook
- Instalare
libvirt-hook-qemu
git clone https://github.com/saschpe/libvirt-hook-qemu.git
face instalarea
- Editați | ×
/etc/libvirt/hooks/hooks.json
pentru a se potrivi nevoilor dvs. Acesta este doar un exemplu
{
„www”: {
"private_ip": "192.168.122.100",
"port_map": {
„tcp”: [80, 443]
}
},
"Poștă": {
"private_ip": "192.168.122.101",
"port_map": {
„tcp”: [25, 465]
}
}
}
- Activați și porniți
firewalld-reload-hook.service
systemctl activa firewalld-reload-hook.service
systemctl porniți firewalld-reload-hook.service
firewall-cmd --reîncărcare
In acest punct systemctl reporniți libvirtd
și firewall-cmd --reîncărcare
produce aceleași rezultate și supraviețuiește repornirilor (testat pe Debian bullseye cu nftables și rețeaua libvirt 7.0/NAT)
Deci, acesta este cel mai bun mod de a face asta?
Consultați
libvirt-hook-qemu, firewalld-reload-hook.service, firewalld.dbus