Com as respostas de Christophe Drevet e DukeLion Consegui fazer funcionar a configuração desejada.
Vou me responder explicando minha solução. Por favor, sinta-se livre para comentar sobre isso, como eu não fiz coisas de rede em poucos anos e pode muito bem ter perdido algo muito importante aqui.
A configuração abaixo funciona perfeitamente e permite adicionar mais VMs, cada uma usando um endereço IP público diferente (os IPs de 172.16.0.0 usados aqui são "públicos").
Interfaces de rede
VM-Host, eth0 -> 172.16.0.1
VM-Host, eth0:0 -> 172.16.0.2
VM-Host, br0 -> 192.168.10.1
Virt. machine, eth0 -> 192.168.10.2 (added to br0)
gateway: 172.16.0.2
iptables
Acompanhamento de conexão:
iptables -I FORWARD -m conntrack -d 192.168.10.0/24 --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
DNAT para o servidor da Web em nossa VM:
iptables -t nat -A PREROUTING -p tcp -d 172.16.0.2 --dport 80 -j DNAT --to-destination 192.168.10.2:80
SNAT para nossa VM alcançar o mundo externo:
iptables -t nat -I POSTROUTING -j SNAT --src 192.168.10.2 --to-source 172.16.0.2
Bloqueia todas as outras portas na VM:
iptables -A INPUT -d 172.16.0.2 -j REJECT --reject-with icmp-port-unreachable