Aqui está uma maneira melhor de configurar o encaminhamento de porta, usando um script de gancho ( source ).
Em /etc/libvirt/hooks/qemu
:
#!/bin/sh
GUEST_NAME=
HOST_PORT=
GUEST_IPADDR=
GUEST_PORT=
if [ "$1" = "$GUEST_NAME" ]; then
if [ "$2" = start ]; then
iptables -t nat -A PREROUTING -p tcp --dport "$HOST_PORT" \
-j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
iptables -I FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
--state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
elif [ "$2" = stopped ]; then
iptables -t nat -D PREROUTING -p tcp --dport "$HOST_PORT" \
-j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
iptables -D FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
--state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
fi
fi
Você deve definir as quatro variáveis no topo para ajustar sua configuração libvirt.
Você precisará reiniciar o libvirt-bin, que no ubuntu é feito com:
sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'
você precisará reiniciar o convidado. No Ubuntu, você precisará ajustar /etc/apparmor.d/usr.sbin.libvirtd
para permitir que o script de gancho seja executado:
Próximo a
/usr/sbin/* PUx,
anexe
/etc/libvirt/hooks/* PUx,
Em seguida, recarregue apparmor:
sudo service apparmor reload
Provavelmente, existe uma maneira de autoconfigurar $GUEST_IPADDR
usando virsh / dumpxml / iface-dumpxml, mas não o encontrei. Como alternativa, o IP pode ser definido estaticamente no xml da rede: documentação .
Até onde eu sei, os filtros de rede só podem ser usados para restringir o que acontece na rede virtual e não são úteis para o encaminhamento de portas.