Aquí hay una mejor manera de configurar el reenvío de puertos, utilizando un script de enlace ( fuente ).
En /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
Debe configurar las cuatro variables en la parte superior para que se ajusten a su configuración de libvirt.
Deberá reiniciar libvirt-bin, que en ubuntu se hace con:
sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'
entonces deberá reiniciar el invitado. En Ubuntu, deberá ajustar /etc/apparmor.d/usr.sbin.libvirtd
para permitir que se ejecute el script de enlace:
Cerca de
/usr/sbin/* PUx,
adjuntar
/etc/libvirt/hooks/* PUx,
Luego vuelva a cargar apparmor:
sudo service apparmor reload
Probablemente haya una manera de autoconfigurarse $GUEST_IPADDR
usando virsh / dumpxml / iface-dumpxml, pero no la he encontrado. Alternativamente, la IP puede establecerse estáticamente en la red xml: documentación .
Por lo que puedo decir, los filtros de red solo se pueden usar para restringir lo que sucede en la red virtual, y no son útiles para el reenvío de puertos.