Internet del cliente en una máquina virtual aislada QEMU que utiliza la tunelización de puertos a través de un canal SPICE

El enfoque habitual para conectar una máquina virtual a Internet es similar a la conexión de cualquier otro dispositivo a la red y consiste en conectar una interfaz de red real virtual o probros, así como en configurar y verificar conexiones de red, servicios, reglas de enrutamiento y filtrado de tráfico, etc.


Si la máquina virtual es un servidor o es un escritorio virtual y está asignada a un usuario específico, este enfoque está completamente justificado, pero ¿qué pasa si la máquina virtual es un escritorio virtual público y cualquiera puede conectarse a él de forma gratuita?


Es necesario asegurarse de que Internet en la máquina virtual no se inicie desde el lado del host, sino desde el lado del cliente.


Conectar una máquina virtual al canal de Internet del cliente permitirá:


  • Reduzca la carga computacional de la emulación de red y la interfaz de red.
  • Excluya la posibilidad de un ataque de piratas informáticos en una máquina virtual desde Internet y la red virtual.
  • Alivie la responsabilidad del administrador del host por las acciones del usuario de la máquina virtual en los siguientes casos:
    • Spamming
    • Descargar / publicar contenido ilegal / prohibido,
    • Piratería o ataque de piratería en los recursos de Internet del administrador de alojamiento, terceros,
    • Minería
    • y así sucesivamente ...
  • Reduzca el tiempo para verificar y configurar el acceso a la máquina virtual de Internet

La forma más fácil de obtener Internet del cliente es reenviar el adaptador de red USB o el módem. Pero este método es muy exigente con la calidad de la red. Si la máquina virtual se encuentra en el extranjero, es probable que haya retrasos y se congele.


Una alternativa al reenvío de dispositivos USB puede ser la tunelización de puertos entre el cliente y la máquina virtual a través del canal SPICE, similar a la tunelización de puertos en SSH.


En las máquinas virtuales QEMU, hay un canal para transmitir datos desde el cliente a la máquina virtual, el llamado canal SPICE. Este canal transfiere datos del dispositivo de entrada, contenido del portapapeles y más.


Teóricamente, puede reenviar los puertos del cliente local (dirección IP 127.0.0.1) a la máquina virtual y organizarlos como locales.


Un algoritmo de ejemplo para conectarse al canal de Internet de un cliente a través de la tunelización de puertos:


  • En el lado del cliente, puede generar un servidor proxy o un servidor VPN que proporcionará acceso a la red.
  • En el cliente SPICE, la tunelización de puertos se configura para que los puertos del servidor proxy o del servidor VPN en la máquina virtual se vean como puertos locales.
  • En el sistema operativo y en el navegador, se configura un subsistema Proxy local para conectarse al servidor Proxy a través del puerto local o se configura un cliente VPN que se conecta al servidor VPN en el host local y emula un dispositivo de red virtual (Tun o Tap en el caso de OpenVPN).

Implementación


Todo lo que queda por hacer para hacer realidad la tunelización de puertos es ajustar el código fuente del cliente SPICE y los complementos invitados SPICE, formar parches y enviarlo a los desarrolladores. Todo esto es posible porque el código fuente de SPICE está abierto.


Además, durante las negociaciones con los desarrolladores de SPICE, resultó que dicha funcionalidad se implementó en la bifurcación FlexVDI de SPICE. El código fuente de la bifurcación se publica parcialmente en el repositorio [ https://github.com/flexvdi ], según dicen, hay un fragmento responsable de la tunelización.


La grabación de conversaciones está disponible en la lista de distribución de Spice-devel , el tema es " Sugerencia de características: túnel de puerto entre VM y el cliente a través del canal de especias ".


Campo de aplicación


Esta tecnología puede ser ampliamente utilizada en máquinas virtuales de demostración y públicas y en el alojamiento VDI ordinario.


Si alguien desea ayudar a implementar esta funcionalidad, puede implementar esta funcionalidad y crear parches. Si tiene algún comentario y sugerencia, puede dejar comentarios.

Source: https://habr.com/ru/post/es430592/


All Articles