vnc-proxied-session-w-xmpp

  • VNC server: ordenador con un servidor VNC, además de un bot XMPP para publicar el recurso 'compartir pantalla' en internet. Este bot también es el encargado de establecer la conexión cliente-cliente entre el servidor VNC local y el puerto TCP#1 publicado por el bot del proxy TCP.
  • Bot: este es el bot del proxy TCP, encargado de publicar los puertos #1 y #2 TCP y unirlos por detrás, permitiendo conectar los sockets que provienen del VNC servidor y el VNC cliente.
  • VNC client: también dispone de su bot XMPP a través del cual lanza la solicitud de conexión con el servidor VNC, pero esto lo hace a través el bot del proxy TCP.

Los dos elementos de VNC se encuentran detrás de una red con NAT, pero el bot TCP es un ordenador con todos los puertos visibles desde internet, o sea, que tiene una IP pública. Es importante notar que la seguridad de este último elemento se basa, en que:

  • los puertos que se abren para que se conecten los extremos VNC son aleatorios.
  • la información de los puertos viaja a través de la red XMPP que puede ir cifrada.
  • los sockets entre el VNC client y el proxy TCP sólo se pueden iniciar si la IP origen es aceptada por la ACL.
  • en caso de ser necesario se podrían cifrar de forma simple los sockets del proxy TCP.

(1) VNC client manda un mensaje XMPP al Bot, este mensaje es una petición de conexión con la pantalla #X contiene los siguientes datos: JID_pantalla con identificador del recurso, IP origen que se va a conectar al player #X.
(2) El bot, al recibir la petición hace las siguientes tareas:

  • publica dos puertos aleatorio TCP (en modo escucha) - puerto #1 y #2, ambos conectados de forma cruzada, o sea, que lo que escucha uno se escribe en el otro y vice-versa.
  • El puerto #2 sólo permite conectarse a la IP indicada por el cliente VNC.
  • envia un mensaje XMPP al VNC Server, informando de: IP:Puerto donde debe conectarse el server.

(3) VNC Server, lanza dos conexiones TCP una hacia el servidor local de VNC y otra hacia la IP:Puerto que le ha comunicado el bot.
(4) Cuando estos dos enlaces han sido confirmados, se comunica al bot via XMPP que estas conexiones ya estan OK.
(5) El bot, informa al VNC Client via XMPP de la IP:Puerto#2 donde puede conectarse para conectar directamente contra el servidor VNC de la pantalla.
(6) El cliente VNC abre un socket TCP contra la IP:Puerto#2 y se comunica a través del proxy transparente TCP que ha creado el Bot.

La idea de este tipo de enlaces se basa en los conceptos de DBUS-Tube de Telepathy y servidores TURN para NAT traversal.

  • vnc-proxied-session-w-xmpp.txt
  • Last modified: 2012/06/06 12:15
  • (external edit)