Conexión remota por VNC inverso

nullSeguro que en mas de una ocasión os ha llamado algún conocido o familiar para que le solucionéis algún problema con su querido ordenador.

Al grito de “como tu entiendes de ordenadores” cualquier excusa es buena para hacerte ir a su casa a solucionar lo que en ese momento quiera que le pase al equipo [ y es que leer en Internet soluciones a problemas no entra dentro de sus habilidades técnicas :( ]

Para evitar desplazamientos innecesarios que te hacen perder más tiempo del que necesitas para solucionar el fallo quiero explicaros cómo usar VNC para conectar remotamente al equipo, siempre y cuando le funcione la conexión a Internet ;)

¿Por qué conexión inversa?

Debido a firewalls y routers no nos queda mas remedio que abrir algunos puertos para poder establecer la conexión entre los equipos y, partiendo de la base que la persona a la que vamos a ayudar anda corta de recursos, dudo que sepa cómo hacerlo.

La idea de la conexión inversa por VNC (o reverse VNC connection) es que el puerto que se abra sea el de nuestro router (port forwarding) evitando molestias (y explicaciones innecesarias) a nuestro “cliente” (permitidme que a partir de ahora llame así a la persona que vamos a ayudar remotamente).

Instalación en casa del “cliente”

Lo único que tenemos que pedir al “cliente” es que ejecute en su terminal (supondremos que sabe copiar y pegar y puede abrir una terminal… en caso contrario, te vas a tener que dar un paseo a su casa y, ya que estás allí se lo instalas para no tener que volver)

sudo apt-get install x11vnc

Configuración en nuestra casa

Lo primero que tenemos que hacer es habilitar alguno de los puertos habituales de VNC (5500, 5800 y 5900, aunque podría ser el que te diese la gana) en nuestro router y apuntar (gracias a las reglas NAT del router) a nuestro ordenador.

Esta operación depende del router que tengas así que lo mejor será que te indique una web donde consultar (en perfecto inglés) cómo hacerlo en tu aparato concreto.

Nos preparamos para atender al “cliente”

La configuración anterior sólo tendremos que hacerla una vez (con suerte e ip fija), si tuviésemos ip dinámica (dhcp) lo mismo te va a tocar hacerlo n-cientas veces; tampoco hay que exagerar: los routers suelen traer la posibilidad de configurar el port forwarding en base a la MAC del equipo evitando de ese modo el problema del dhcp. Como la solución depende del router que tengas dejaré su estudio a la curiosidad del lector y a un posible artículo posterior para no extendernos más de lo que ya lo hemos hecho.

Antes de poder atender al “cliente” deberás ejecutar en tu equipo un

vncviewer -listen

y con esto ya tendremos nuestro ordenador esperando la conexión del cliente en el puerto 5500; si el puerto que abriste en el router en el paso anterior es, por ejemplo el 7089 deberás ejecutar

vncviewer -listen 7089

Que comience el espectáculo

Ahora que ya tenemos abierto el puerto y vnc listo para recibir conexiones debemos indicar al “cliente” que ejecute un

x11vnc -connect TU_IP_EXTERNA:5500

donde

  • TU_IP_EXTERNA es la dirección IP de tu ordenador; puedes obtenerla siguiendo las instrucciones que dimos en su momento para obtener la ip externa (en la página que hemos recomendado para el port forwarding también te la muestra)
  • 5500 es el puerto que hemos abierto en el router; si has puesto otro como 7089 ya sabes que debes cambiarlo

Una vez que el “cliente” ejecute esa instrucción automáticamente aparecerá su escritorio en nuestro ordenador y éste flipará viendo cómo le movemos el ratón y comenzamos a abrir ventanas remotamente :)

Resumiendo

Aunque pueda parecer excesivamente complejo (por la longitud del artículo), el proceso queda reducido a:

  1. Abrir puerto en nuestro router (una sola vez y queda para toda la vida)
  2. Ejecutar en nuestro equipo un vncviewer -listen
  3. Instalar (sólo la primera vez) en casa del cliente x11vnc (ejecutando sudo apt-get install x11vnc)
  4. Pedir al cliente que lance un x11vnc -connect TU_IP_EXTERNA:5500

El paso más complicado va a ser, con total seguridad, conseguir abrir el puerto en el router pero recuerda que con las instrucciones que aparecen en la web de port forward y la herramienta que recomendamos utilizar para comprobrar puertos abiertos tendrás más que suficiente para conseguirlo. Si aun así tuvieses problemas ya sabes dónde encontrarme ;)

22 comentarios hasta ahora

  1. [...] asistencia remota a través de vnc [...]

  2. pacomontoro on

    Hola, buenísimo este artículo, creo que es uno de los mejores que he visto y como siempre, todo tan fácil en Ubuntu, gracias a gente como tú.

    Una pequeña observación sería, si el cliente usa “el ventanucos” como sería.

    Imagino que algo más complicado o quizás con freenx-server y su respectivo cliente nxclient (para windows) solucionamos la conexión??

  3. jasvazquez on

    Gracias Paco, me alegra que te haya gustado el post.

    Respecto a la conexión con clientes que usan el “ventanuco” lo he resuelto utilizando tightVNC.

    No he escrito ningún artículo al respecto porque no cuento con “ventanucos” para hacer las pruebas necesarias pero cuando tuve la oportunidad lo monté sin problemas y, cosa extraña, funcionó a la primera ;)

  4. encalomante on

    Articulo de gran utilidad si señor.

    Solo tengo una duda: Se podrian intercambiar archivos entre el viewer y el listen?

  5. jasvazquez on

    Con vnc no pero se me ocurren varias posibilidades: uso de p2p, netcat, servicios gratuitos de alojamiento web, nfs habilitando el correspondiente puerto

    De ellas considero que la primera podría ser la más sencilla si no quieres complicarte demasiado la vida ;)

  6. jorquera on

    Yo tengo un ordenador con Ubuntu dentro de una red local al que puedo acceder por ssh desde un servidor conectado a Internet desde el cual también he accedido por ssh. Es decir, primero hago ssh a un ordenador y luego desde ahí hago ssh a otro ordenador.

    ¿Se puede lanzar x11vnc –connect ip:port en esta situación, teniendo vncviewer -listen desde el ordenador que estoy?

    • jasvazquez on

      @jorquera, ¿tienes permiso para ejecutar aplicaciones gráficas en el servidor que comentas?
      Normalmente te dan acceso FTP y, en algunos casos SSH.
      Un saludo

  7. jorquera on

    El servidor es mio y puedo tener los permisos que hagan falta.

    Se trata de un servidor ubuntu que conectado a un router monpuesto punto a punto. A partir de este servidor entro a toda la red local del Instituto.

    Lo que pretendo es administrar con vnc el escritorio de los equipos de la red local desde Internet.

    • jasvazquez on

      No te recomiendo “llevarte” el trabajo a casa ;)

      No obstante, ¿te valdría con ejecutar gráficamente aplicaciones individuales o es imprescindible poder controlar el entorno de ventanas completo?

  8. jorquera on

    Desde la red local accedo con ssh -X y puedo ejecutar aplicaciones gráficas, pero ya no es así desde fuera ya qua hago doble ssh y el servidor no tiene entorno gráfico.

    Quisiera poder controlar el entorno de ventanas para mayor comodidad, pero no lo consigo.

  9. jasvazquez on

    @jorquera, ahora que ando en “modo vacaciones” podríamos echarle un vistazo al tema para ver si lo solucionamos antes de que acabe el año ;)

    Si te parece, para no alargar mucho los comentarios de este post, mándame un correo y lo tratamos a título personal.

    Una vez solucionado (si tenemos suerte) y al personal le interesa, podemos publicarlo como artículo para que quede constancia

    ¿Te parece?

  10. [...] nos evitará problemas con el firewall evitando puertos que requieran ciertos [...]

  11. [...] sistemas VNC inversos, excelentemente descritos en el link, permiten la conexión a voluntad entre usuarios de los [...]

  12. braiam on

    Hola jasvasquez.
    Actualmente manejo un servidor con ssh que me funcionaria de las mil maravillas si no tuviera que utilizar gnome para configurar dos impresoras y un scaner que tengo en mi red. He instalado gnome, x11vnc y xorg, pero no he logrado hacer que tightVNC funcione. El error el el servidor es
    wait_for_client: got client
    wait_for_client: running: env X11VNC_SKIP_DISPLAY=” /bin/sh /tmp/x11vnc-find_display.8Ubpah
    wait_for_client: find display cmd failed
    wait_for_client: FINDCREATEDISPLAY cmd: /bin/sh /tmp/x11vnc-find_display.8Ubpah Xvfb
    trying N=20 …
    wait_for_client: read failed: /bin/sh /tmp/x11vnc-find_display.8Ubpah Xvfb
    fgets: Bad file descriptor
    Espero me puedas ayudar. (aunque el post sea viejo es util)

    • jasvazquez on

      ¿Has probado el parámetro -X en SSH para ejecutar aplicaciones gráficas remotamente?

      Un saludo @Braiam

  13. braiam on

    Lo logre! Siguiendo el mismo tutorial busque mas abajo hasta llegar a Accessing a family PC over the Internet, corri sudo x11vnc -safer -localhost -nopw -once -auth /var/lib/gdm/:0.Xauth -display :0 en PuTTy y luego hice un forward según las instrucciones y voila!

    Gracias de todos modos!

    • braiam on

      Luego de (intentar) logearme me tiro error y por poco lo dejo así, por suerte soy terco y lo intente nuevamente, y ¡funciono!

      • jasvazquez on

        Bien está lo que bien acaba.

        Enhorabuena @Braiam y gracias por compartirlo con los demás.

        ¿¡¿Putty?!? uy , uy… eso me suena a “ventanuco” ;)

        • braiam on

          Lamentablemente así es. En mi pais no se acostumbran a los cambios. Pero yo he tenido la oportunidad de probarlo todo (lease Mac, Window$ desde 3.11, y Linux).

  14. jasvazquez on

    No te preocupes @braiam, no te lo tendremos en cuenta ;)

    • braiam on

      Me siento aliviado.


Replica