Решение вопроса заключается в этом:
Libvirtd hook для применения правил iptables
При установке виртуализации KVM/qemu и использовании NAT существует проблема применения правил /etc/sysconfig/iptables. При загрузке системы на ранней стадии стартует сервис iptables: /etc/rc3.d/S08iptables -> ../init.d/iptables
Далее в конце загрузки стартует libvirtd: /etc/rc3.d/S08iptables -> ../init.d/iptables который применяет свои default правила, если используется NAT для гостевых ОС.
Выглядеть это может так:
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
В итоге правила NAT не работают так, как это применялось в /etc/sysconfig/iptables.
Ниже указано решение использования hooks в libvirtd для перезапуска сервиса iptables после старта libvirtd:
1. mkdir /etc/libvirt/hooks
2. vi /etc/libvirt/hooks/network
#!/bin/bash
# Libvirt hook, see:
https://www.libvirt.org/hooks.html
# for iptables reloading after host booted
if [ "$2" = "started" ]; then
/etc/init.d/iptables restart
fi;
exit 0;
3. chmod 755 /etc/libvirt/hooks/network
То есть сервис iptables перезагружается после старта демона libvirtd, применяя системные правила iptables.
Описание libvirt hooks:
www.libvirt.org/hooks.html
libvirt.org/formatnwfilter.html
wiki.libvirt.org/page/Networking#NAT_forwarding_.2...