InicioLinuxAdministracion Remota Inversa - VNC Reverso

Administracion Remota Inversa - VNC Reverso

Linux11/27/2008

Durante un tiempo estuve rebuscándomelas para poder responderme una pregunta que no me dejaba dormir...

¿Qué sucede si queremos administrar una computadora que está detrás de un firewall y no podemos o no queremos hacer un "portforwarding" en el firewall por cuestiones de seguridad?


Sobre todo, el "no podemos" me molestaba, porque al firewall no lo podía administrar yo ni me querían hacer un portforwarding a un simple puertito...

Pues, para usar las X y cualquier cosa que necesitemos remotamente, podremos instalar un VNCServer en la máquina remota y un VNCViewer en la máquina local, la máquina remota ejecuta a intervalos de tiempo especificados por nosotros la petición de administración remota a una IP/host que nosotros programamos también, por lo tanto es seguro y no dejan abierto el agujero para que entren otros, ya que la máquina "administrada" es la que solicita atención a la IP que nosotros queramos, sea fija o por host dinámico (tipo http://www.no-ip.com o http://www.dyndns.com). Básicamente, iniciaremos un "VNC Invertido" o "Reverse VNC"

Lo más importante que quiero recalcar aquí, es que la máquina servidora no tiene puertos abiertos en ningún momento ya que ella es la que inicia el pedido de conexión, y cuando se conecta con el administrador crea el túnel y luego de autenticar usuario/clave recién brinda acceso (encima este acceso es restringido, obviamente con la clave de root después podemos hacer lo que necesitemos

Materiales necesarios:

0) Primero crearemos en nuestra cabeza, las siguientes variables

$GUEST: La máquina personal, la que físicamente tenemos posibilidad de acceder en cualquier momento, en mi ejemplo será una máquina llamada vnctester.dyndns.com
$HOST: La máquina servidora, la que necesitamos administrar remotamente de vez en cuando (algún backup, reinicio de servicios, etc)
$PORT: El puerto por el cual nosotros queremos conectar ambas computadoras, generalmente se usa el 5500, pero como automatizaremos el proceso, utilizaremos un puerto diferente, el 5501 (vaya diferencia no?)

1) Máquina Servidora con sistema operativo Linux (el mío es OpenSuSE 10.3 por ahora)

2) Máquina Personal, puede ser Güindow, pero el ejemplo lo tiro con Linux, también OpenSuSE 10.3

3) Conexión entre ambas máquinas

4) La máquina servidora tiene que poder llegar a conectarse con la máquina personal vía puerto $PORT

5) La máquina personal tiene que poder recibir conexiones vía el puerto $PORT, por lo tanto si hay un firewall "delante" de la máquina personal, hay que hacer un portforwarding


Pasos a seguir:

0) Nos ubicamos en la máquina servidora ($HOST) (vía SSH o "personalmente" e ingresamos con permisos de superusuario (root)

1) Instalamos en la máquina servidora el paquete x11vnc

Yo probé con el x11vnc-0.9.2-20 que ya viene en mi OpenSuSE 10.3 actualizado...

2) Creamos un usuario en la máquina servidora para más seguridad del VNC (en este ejemplo es llamado "vncuser" ) y nos logueamos en el KDE (o el WM que fuere) con ese usuario.

3) Nos aseguramos de estar logueados con el usuario creado en el paso 2)

4) Creamos un archivo en la máquina servidora llamado "x11auto.sh" con el siguiente contenido


#!/bin/bash
x11vnc -usepw -connect vnctester.dyndns.com:5501 -loop -sleepin 2 -timeout 4 -notruecolor -solid



y lo ubicamos dentro de la carpeta de AutoInicio o "AutoStart" del usuario "vncuser" (en OpenSuSE 10.1 y 10.3 con KDE, la carpeta de "AutoStart" se encuentra en /home/vncuser/.kde/Autostart, en openSuSE 11.4 en /home/vncuser/.kde4/Autostart).

¿Qué hace el script anterior? muy simple:

-usepw: utiliza la clave ya almacenada en /home/vncuser/.vnc/passwd
-connect: se conecta a un VNCViewer que está en modo escucha (listen)
vnctester.dyndns.com: el nombre de host de la máquina personal
5501: el número de puerto por el cual accederemos, debe ser el mismo en las dos "puntas"
-loop: hace un ciclo de reintentos de conexión
-sleepin 2: espera 2 segundos antes de intentar la conexión
-timeout 4: espera 4 segundos y vuelve a iniciar el ciclo
-notruecolor y -solid son solamente para reducir la calidad y por ende mejorar la performance (muy bueno con conexiones vía internet muy lenta)

5) Al archivo le tenemos que dar los permisos de ejecución con el siguiente comando

chmod +x rutadelarchivo/x11auto.sh

6) Y no nos tenemos que olvidar de ejecutar el comando siguiente para crear las claves iniciales del VNC

x11vnc -usepw

Ahora nos pide la clave y su confirmación, luego comienza a funcionar como servidor y lo cortamos con Ctrl+C

7) Yo además, como root, agregué en el archivo /etc/crontab las líneas siguientes


0 16 * * * root rckdm restart
0 * * * * root rcnscd restart

¿Por qué la primer línea? Porque a veces necesito que a las cuatro de la tarde (cuando no hay nadie allá y yo todavía sigo trabajando) se reinicie el KDE de la máquina servidora, ya que cuando hay muchas conexiones fallidas por cortes de internet o lo que fuere, el VNC no sigue intentando la conexión y el script deja de funcionar, por lo tanto necesito largarlo de nuevo.

¿Por qué la segunda línea? Porque a veces uso dyndns, y por ahí cambia la IP, pero la máquina servidora sigue teniendo la vieja IP en su caché, por lo tanto, necesito que se reinicie el servicio de Caché de Nombres de Dominio. Obviamente, si apuntamos a una IP fija, ni nos gastamos en eso

8) MUY IMPORTANTE! El usuario vncuser debe iniciar sesión en el KDE (o el Window Manager que fuere) automáticamente cada vez que la máquina se inicia, en OpenSuSE 10.3 configurar eso es muy fácil:

a) Menú principal --> Centro de Control --> Administración del Sistema --> Administrador de acceso --> Comodidad

b) Click abajo en el botón "Modo administrador"

c) Ponemos la clave de root

d) Tildamos "Activar acceso automático" para el Usuario creado en el paso 2) (vncuser) y tildamos (si queremos) también "Persistente" y "Bloquear sesión"

e) Click abajo en el botón "Aceptar"

f) Entonces, cada vez que se reinicie el KDE (como en el paso 7)), el usuario vncuser ingresará automáticamente disparando a su vez el archivo creado en el paso 4)

9) Nos ubicamos físicamente en la máquina personal ($GUEST) y nos logueamos con nuestra cuenta de usuario normal

10) Este paso y los 10.x son opcionales, yo preferí el VNCViewer recompilado y no el que ya viene instalado por comodidad y preferencias personales

Bajamos el código fuente del VNC para linux en http://realvnc.com/cgi-bin/download.cgi

Fijarse en el link que dice:

VNC Free Edition Source Code for Unix
Full source code to both Viewer and Server
Version 4.1.x

y bajarlo, obviamente aceptando la licencia

Este ejemplo fue hecho con la versión 4.1.3

10.1) Descomprimimos el archivo

tar xvzf vnc-4_1_3-unixsrc.tar.gz

10.2) Entramos al directorio unix

cd vnc-4_1_3-unixsrc/unix

10.3) Leemos el archivo README o ejecutamos lo siguiente para compilar

./configure
make

Nota 1: Si en la ejecución del comando ./configure nos tira algun error de falta de dependencias, lamentablemente
tendremos que instalarlas y volver a este paso
Nota 2: Obviamente necesitamos tener instalado el make y el gcc
Nota 3: Yo sólo lo compilé, no lo instalé así que la ruta de ejecución la tengo que poner manualmente

11) Cada vez que queremos administrar la máquina servidora, nos sentamos el la máquina personal, ingresamos al KDE (o el WM que fuere)
abrimos una terminal y en la misma escribimos lo siguiente

a) Si usamos el VNC recompilado en el paso 10)
vnc-4_1_3-unixsrc/unix/vncviewer/vncviewer -listen 5501

b) Si no, directamente con

vncviewer -listen 5501

esperamos unos segundos y nos aparece la ventana de autenticación, ponemos la clave del paso 6) y voilá

12) Si no, en un Güindow, configuran el VNCViewer para que escuche por el puerto 5501 y usan el VNC para Güindow en modo Listener, pero este post no fué escrito para hablar de Güindow...

Espero que a alguien le sirva de algo, o por lo menos le haya gustado lo que leyó, gracias por llegar hasta este punto -->. Y gracias por comentar
Datos archivados del Taringa! original
20puntos
8,867visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
1visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

c
ctqeo🇦🇷
Usuario
Puntos0
Posts10
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.