A versão estável mais recente do libvirt para o Ubuntu é a versão 0.7.5, que não possui alguns recursos mais novos (por exemplo, ganchos de script e filtros de rede) que facilitam a configuração automática da rede. Dito isso, aqui está como habilitar o encaminhamento de porta para o libvirt 0.7.5 no Ubuntu 10.04 Lucid Lynx.
Estas regras do iptables devem funcionar:
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to-destination 10.0.0.1:80
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 10.0.0.2:22
iptables -I FORWARD -m state -d 10.0.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
A configuração NAT do KVM padrão fornece uma regra semelhante à 3ª acima, mas omite o estado NEW, que é essencial para aceitar conexões de entrada.
Se você escrever um script de inicialização para adicionar essas regras e não tomar cuidado, a libvirt 0.7.5 as substituirá inserindo as suas próprias. Portanto, para garantir que essas regras sejam aplicadas corretamente na inicialização, é necessário certificar-se de que o libvirt tenha inicializado antes de inserir suas regras.
Adicione as seguintes linhas ao /etc/rc.local, antes da linha exit 0
:
(
# Make sure the libvirt has started and has initialized its network.
while [ 'ps -e | grep -c libvirtd' -lt 1 ]; do
sleep 1
done
sleep 10
# Set up custom iptables rules.
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 80 -j DNAT --to-destination 10.0.0.1:80
iptables -t nat -I PREROUTING -p tcp -d 1.2.3.4 --dport 22 -j DNAT --to-destination 10.0.0.2:22
iptables -I FORWARD -m state -d 10.0.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
) &
O sleep 10
acima é um truque para garantir que o daemon libvirt tenha a chance de inicializar as regras do iptables antes de adicionarmos o nosso próprio. Eu não posso esperar até que eles liberam a versão 0.8.3 do libvirt para o Ubuntu.