Saltar al contenido

Reenvío de puertos a invitados en libvirt / KVM

Esta duda se puede solucionar de diferentes formas, pero en este caso te damos la que para nosotros es la solución más completa.

Solución:

Solución 1:

La última versión estable de libvirt para Ubuntu es la versión 0.7.5, que no tiene algunas funciones más nuevas (es decir, ganchos de secuencias de comandos y filtros de red) que facilitan la configuración automática de la red. Dicho esto, aquí se explica cómo habilitar el reenvío de puertos para libvirt 0.7.5 en Ubuntu 10.04 Lucid Lynx.

Estas reglas de iptables deberían 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

La configuración predeterminada de KVM NAT proporciona una regla similar a la tercera que mencioné anteriormente, pero omite el estado NUEVO, que es esencial para aceptar conexiones entrantes.

Si escribe un script de inicio para agregar estas reglas y no tiene cuidado, libvirt 0.7.5 las anula insertando las suyas propias. Entonces, para asegurarse de que estas reglas se apliquen correctamente al inicio, debe asegurarse de que libvirt se haya inicializado antes de insertas tus reglas.

Agregue las siguientes líneas a /etc/rc.local, antes de la línea 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
) &

los sleep 10 arriba hay un truco para asegurarse de que el demonio libvirt haya tenido la oportunidad de inicializar sus reglas de iptables antes de que agreguemos las nuestras. No puedo esperar hasta que lancen la versión 0.8.3 de libvirt para Ubuntu.

Solución 2:

Hay una manera de configurar la redirección de puertos sobre la marcha cuando el invitado está utilizando redes en modo usuarioEscribí un blog sobre esto aquí:

port redirection from kvm host to guest

Puede ver los detalles allí, pero para mayor comodidad, aquí está la solución que descubrí:

virsh qemu-monitor-command --hmp sles11 'hostfwd_add ::2222-:22'

Este one-liner es mucho más fácil que las otras respuestas, pero solo funciona en algunos escenarios (pila de red en modo usuario).


Solución 3:

Una más “oficial”[1] La forma de hacerlo es crear un script de enlace como se describe en el sitio web de libvirt:

http://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections

… básicamente, este script se invocará cuando se inicie un invitado KVM. El script en sí agregará las reglas de iptable apropiadas (similares a la respuesta anterior de Isaac Sutherland) con el estado de conexión ‘NUEVO’ agregado correctamente. Tenga en cuenta que debe modificar el script con los valores correctos para sus hosts y puertos.

[1] aunque la propia documentación de libvirt dice que esto es una especie de truco, imagínense

Más adelante puedes encontrar las explicaciones de otros desarrolladores, tú asimismo puedes mostrar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *