Algunos usuarios alquilan VPS de Windows relativamente económicos para ejecutar Servicios de escritorio remoto. Lo mismo se puede hacer en Linux sin colocar su propio hardware en el centro de datos o alquilar un servidor dedicado. Alguien necesita un entorno gráfico familiar para las pruebas y el desarrollo, o un escritorio remoto con un ancho de banda amplio para trabajar desde dispositivos móviles. Hay muchos usos para Virtual Network Computing (VNC) basados en el protocolo Remote FrameBuffer (RFB). En un breve artículo te mostraremos cómo configurarlo en una máquina virtual con cualquier hipervisor.
Tabla de contenido:
Selección de un servidor VNC
Instalación y configuración
Inicio de un servicio a través de systemd
Conexión a un escritorio
Elegir un servidor VNC
El servicio VNC puede integrarse en el sistema de virtualización y el hipervisor lo conectará a los dispositivos emulados y no se requiere ninguna configuración adicional. Esta opción implica una sobrecarga significativa y no es compatible con todos los proveedores, incluso en una implementación con menos recursos, cuando una abstracción simplificada (framebuffer) se transfiere a una máquina virtual en lugar de emular un dispositivo gráfico real. A veces, un servidor VNC está vinculado a un servidor X en ejecución, pero este método es más adecuado para acceder a una máquina física, mientras que en una máquina virtual crea una serie de dificultades técnicas. La forma más sencilla es instalar un servidor VNC con un servidor X integrado. No requiere dispositivos físicos (adaptador de vídeo, teclado y ratón) ni su emulación mediante hipervisor, por lo que es apto para cualquier tipo de VPS.
Instalacion y configuracion
Necesitamos una máquina virtual con Ubuntu Server 18.04 LTS en la configuración predeterminada. Hay varios servidores VNC en los repositorios estándar de esta distribución: TightVNC , TigerVNC , x11vnc y otros. Nos decidimos por TigerVNC, una bifurcación real que no es compatible con el desarrollador de TightVNC. Otros servidores están configurados de manera similar. También debe elegir un entorno de escritorio: en nuestra opinión, XFCE será la opción óptima debido a los requisitos relativamente bajos de recursos informáticos. Los interesados pueden instalar otro DE o WM: todo depende de las preferencias personales, pero la elección del software incide directamente en la necesidad de RAM y núcleos informáticos.
La instalación del entorno de escritorio con todas las dependencias se realiza con el siguiente comando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
A continuación, debe instalar el servidor VNC:
sudo apt-get install tigervnc-standalone-server tigervnc-common
Ejecutarlo como root es una mala idea. Crear usuario y grupo:
sudo adduser vnc
Agreguemos al usuario al grupo sudo para que pueda resolver tareas relacionadas con la administración. Si no existe tal necesidad, puede omitir este paso:
sudo gpasswd -a vnc sudo
El siguiente paso es iniciar el servidor VNC con privilegios de usuario vnc para crear una contraseña segura y archivos de configuración en el directorio ~ / .vnc /. La longitud de la contraseña puede ser de 6 a 8 caracteres (los extra se cortan). Si es necesario, también se establece una contraseña de solo lectura, es decir, sin acceso al teclado y al mouse. Los siguientes comandos se ejecutan como usuario de vnc:
su - vnc
vncserver -localhost no
De forma predeterminada, el protocolo RFB utiliza el rango de puertos TCP 5900 a 5906; este es el llamado. puertos de pantalla, cada uno correspondiente a una pantalla de servidor X. En este caso, los puertos están asociados con pantallas de: 0 a: 6. La instancia del servidor VNC que iniciamos está escuchando en el puerto 5901 (pantalla: 1). Otras instancias pueden funcionar en otros puertos con pantallas: 2 ,: 3, etc. Antes de continuar con la configuración, debe detener el servidor:
vncserver -kill :1
El comando debería mostrar algo como el siguiente mensaje: "Eliminando el ID de proceso de Xtigervnc 18105 ... ¡éxito!".
Cuando se inicia TigerVNC, ejecuta el script ~ / .vnc / xstartup para establecer los parámetros de configuración. Creemos nuestro propio script, habiendo guardado previamente una copia de seguridad del existente, si existe:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup
Una sesión de entorno de escritorio XFCE se inicia con el siguiente script xstartup:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &
El comando xrdb es necesario para que VNC lea el archivo .Xresources en el directorio de inicio. Allí, el usuario puede definir varios parámetros del escritorio gráfico: representación de fuentes, colores de terminal, temas de cursor, etc. El script debe hacerse ejecutable:
chmod 755 ~/.vnc/xstartup
Esto completa la configuración del servidor VNC. Si lo ejecuta con el comando vncserver -localhost no (en nombre del usuario de vnc), puede conectarse con la contraseña especificada anteriormente y ver la siguiente imagen:
Iniciar un servicio a través de systemd
Iniciar un servidor VNC manualmente no es adecuado para el uso de combate, por lo que configuraremos un servicio del sistema. Los comandos se ejecutan como root (use sudo). Primero, creemos un nuevo archivo de unidad para nuestro servidor:
sudo nano /etc/systemd/system/vncserver@.service
El símbolo @ en el nombre le permite pasar un argumento para configurar el servicio. En nuestro caso, establece el puerto de pantalla VNC. Un archivo de unidad consta de varias secciones:
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=/home/vnc
PIDFile=/home/vnc/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
Luego, debe notificar a systemd sobre la aparición de un nuevo archivo y activarlo:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.service
El número 1 en el nombre indica el número de pantalla.
Paramos el servidor VNC, lo iniciamos como servicio y verificamos el estado:
# vnc
vncserver -kill :1
#
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1
Si el servicio se está ejecutando, deberíamos obtener algo como esto.
Conexión de escritorio
Nuestra configuración no utiliza cifrado, por lo que los atacantes pueden interceptar paquetes de red. Además, las vulnerabilidades se encuentran a menudo en los servidores VNC , por lo que no debe abrirlos para acceder desde Internet. Para conectarse de forma segura en la computadora local, debe empaquetar el tráfico en un túnel SSH y luego configurar el cliente VNC. En Windows, puede utilizar un cliente SSH gráfico (por ejemplo, PuTTY). Por motivos de seguridad, TigerVNC en el servidor solo escucha localhost y no es directamente accesible desde redes públicas:
sudo netstat -ap |more
En Linux, FreeBSD, OS X y otros sistemas operativos similares a UNIX, el túnel desde la computadora cliente se realiza mediante la utilidad ssh (sshd debe estar ejecutándose en el servidor VNC):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip
La opción -L vincula el puerto 5901 de la conexión remota al puerto 5901 en localhost. La opción -C habilita la compresión y -N le dice a ssh que no ejecute un comando remoto. La opción -l especifica el inicio de sesión para inicio de sesión remoto.
Después de configurar el túnel en la computadora local, debe iniciar el cliente VNC y establecer una conexión con el host 127.0.0.1:5901 (localhost: 5901) utilizando la contraseña establecida anteriormente para acceder al servidor VNC. Ahora podemos comunicarnos de forma segura a través de un túnel cifrado con el entorno de escritorio gráfico XFCE en el VPS. En la captura de pantalla, la utilidad principal se ejecuta en el emulador de terminal para mostrar el consumo insignificante de recursos informáticos por parte de la máquina virtual. Entonces todo dependerá de las aplicaciones del usuario.
Puede instalar y configurar un servidor VNC en Linux en casi cualquier VPS. Esto no requiere configuraciones costosas y que consuman muchos recursos con emulación de adaptador de video o la compra de licencias de software comerciales. Además de la opción de servicio del sistema que hemos considerado, hay otras: iniciar en modo demonio (a través de /etc/rc.local) al iniciar el sistema o bajo demanda a través de inetd. Este último es interesante para crear configuraciones multiusuario. El superservidor de Internet iniciará el servidor VNC y asociará al cliente con él, y el servidor VNC creará una nueva pantalla e iniciará una sesión. Para la autenticación dentro de él, puede usar un administrador de visualización gráfica (por ejemplo, LightDM ), y después de desconectar el cliente, la sesión se cerrará y todos los programas que trabajan con la pantalla se cerrarán.