Para configurar o NAT na sua rede virtual libvirt
está adicionando algumas regras do iptables que se parecem com isso:
$ iptables -t nat -S
[...]
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
[...]
As ações do MASQUERADE nessas regras estão traduzindo o IP interno para o IP externo da NIC. Há uma outra ação chamada SNAT que faz a mesma coisa, mas usa um ip de origem específico que você mesmo define. Então, o que você pode fazer é inserir algumas regras do SNAT antes do seu MASQUERADE
regras como esta:
$ iptables -t nat -I POSTROUTING -s 192.168.1.x ! -d 192.168.1.0/24 -j SNAT --to-source <public ip>
$ iptables -t nat -I POSTROUTING -s 192.168.1.x ! -d 192.168.1.0/24 -p udp -j SNAT --to-source <public ip>:1024-65535
$ iptables -t nat -I POSTROUTING -s 192.168.1.x ! -d 192.168.1.0/24 -p tcp -j SNAT --to-source <public ip>:1024-65535
Agora, o tráfego de saída de 192.168.1.x receberá um IP de origem de < public ip >