Virtual Network Computing ( VNC ) es un sistema gráfico de uso compartido de escritorio que utiliza el protocolo Remote Frame Buffer (RFB) para controlar de forma remota otra computadora . Transmite la entrada del teclado y el mouse de una computadora a otra, retransmitiendo las actualizaciones de la pantalla gráfica a través de una red . [1]
VNC es independiente de la plataforma: existen clientes y servidores para muchos sistemas operativos basados en GUI y para Java . Varios clientes pueden conectarse a un servidor VNC al mismo tiempo. Los usos populares de esta tecnología incluyen soporte técnico remoto y acceso a archivos en la computadora del trabajo desde la computadora del hogar, o viceversa.
VNC se desarrolló originalmente en el Laboratorio de Investigación de Olivetti y Oracle en Cambridge, Reino Unido. El código fuente original de VNC y muchos derivados modernos son de código abierto bajo la Licencia Pública General de GNU .
Hay varias variantes de VNC [2] que ofrecen su propia funcionalidad particular; por ejemplo, algunas están optimizadas para Microsoft Windows u ofrecen transferencia de archivos (que no es parte de VNC propiamente dicho), etc. Muchas son compatibles (sin sus características añadidas) con VNC propiamente dicho en el sentido de que un visor de una versión puede conectarse con un servidor de otra; otras se basan en el código VNC pero no son compatibles con VNC estándar.
VNC y RFB son marcas registradas de RealVNC Ltd. en los EE. UU. y algunos otros países.
El Laboratorio de Investigación Olivetti & Oracle (ORL) [3] de Cambridge, Reino Unido, desarrolló VNC en una época en la que Olivetti y Oracle Corporation eran propietarios del laboratorio. En 1999, AT&T adquirió el laboratorio y en 2002 cerró sus actividades de investigación.
Los desarrolladores que trabajaron en VNC mientras aún estaban en el Laboratorio de Investigación de AT&T incluyen: [4]
Tras el cierre de ORL en 2002, varios miembros del equipo de desarrollo (incluidos Richardson, Harter, Weatherall y Hopper) formaron RealVNC para seguir trabajando en software VNC comercial y de código abierto bajo ese nombre.
El código fuente original con licencia GPL se ha utilizado en varias otras versiones de VNC. Dicha bifurcación no ha provocado problemas de compatibilidad porque el protocolo RFB está diseñado para ser extensible. Los clientes y servidores de VNC negocian sus capacidades mediante protocolos de enlace para utilizar las opciones más adecuadas admitidas en ambos extremos.
A partir de 2013 [actualizar], RealVNC Ltd reclama el término "VNC" como marca registrada en los Estados Unidos y en otros países. [5]
El nombre de Virtual Network Computer/Computing (VNC) se originó con el trabajo de ORL en un cliente ligero llamado Videotile, que también utilizaba el protocolo RFB. El Videotile tenía una pantalla LCD con entrada de lápiz y una conexión ATM rápida a la red. En ese momento, "computadora de red" se usaba comúnmente como sinónimo de cliente ligero; VNC es esencialmente una computadora de red solo de software (es decir, virtual). [ cita requerida ]
En el método normal de funcionamiento, un visualizador se conecta a un puerto del servidor (puerto predeterminado: 5900). Alternativamente (según la implementación), un navegador puede conectarse al servidor (puerto predeterminado: 5800). Y un servidor puede conectarse a un visualizador en "modo de escucha" en el puerto 5500. Una ventaja del modo de escucha es que el sitio del servidor no tiene que configurar su cortafuegos para permitir el acceso en el puerto 5900 (o 5800); la responsabilidad recae en el visualizador, lo que resulta útil si el sitio del servidor no tiene conocimientos informáticos y el usuario del visualizador tiene más conocimientos.
El servidor envía pequeños rectángulos del framebuffer al cliente. En su forma más simple, el protocolo VNC puede utilizar mucho ancho de banda , por lo que se han ideado varios métodos para reducir la sobrecarga de comunicación. Por ejemplo, existen varias codificaciones (métodos para determinar la forma más eficiente de transferir estos rectángulos). El protocolo VNC permite que el cliente y el servidor negocien qué codificación utilizarán. La codificación más simple, compatible con todos los clientes y servidores, es la codificación sin procesar , que envía datos de píxeles en orden de línea de exploración de izquierda a derecha y, después de que se haya transmitido la pantalla completa original, transfiere solo los rectángulos que cambian. Esta codificación funciona muy bien si solo una pequeña porción de la pantalla cambia de un cuadro al siguiente (como cuando el puntero del mouse se mueve por un escritorio o cuando se escribe texto en el cursor), pero las demandas de ancho de banda se vuelven muy altas si muchos píxeles cambian al mismo tiempo (como cuando se desplaza una ventana o se ve un video en pantalla completa).
VNC utiliza de forma predeterminada el puerto TCP 5900+ N , [6] [7] donde N es el número de pantalla (normalmente :0 para una pantalla física). Varias implementaciones también inician un servidor HTTP básico en el puerto 5800+ N para proporcionar un visor VNC como un subprograma Java , lo que permite una conexión sencilla a través de cualquier navegador web habilitado para Java. Se pueden utilizar diferentes asignaciones de puertos siempre que tanto el cliente como el servidor estén configurados en consecuencia. También existe una implementación de cliente VNC HTML5 para navegadores modernos (no se requieren complementos). [8]
Aunque es posible incluso con un ancho de banda bajo, el uso de VNC a través de Internet se facilita si el usuario tiene una conexión de banda ancha en ambos extremos. Sin embargo, puede requerir una traducción avanzada de direcciones de red (NAT), un firewall y una configuración del enrutador , como el reenvío de puertos, para que la conexión se realice. Los usuarios pueden establecer comunicación a través de tecnologías de red privada virtual (VPN) para facilitar el uso a través de Internet, o como una conexión LAN si se utiliza VPN como proxy, o a través de un repetidor VNC (útil en presencia de un NAT). [9] [10]
Xvnc es el servidor VNC de Unix, que se basa en un servidor X estándar . Para las aplicaciones, Xvnc aparece como un "servidor" X (es decir, muestra ventanas de cliente), y para los usuarios remotos de VNC es un servidor VNC. Las aplicaciones pueden mostrarse en Xvnc como si fuera una pantalla X normal, pero aparecerán en cualquier visor VNC conectado en lugar de en una pantalla física. [11] Alternativamente, se puede configurar una máquina (que puede ser una estación de trabajo o un servidor de red) con pantalla, teclado y mouse para que arranque y ejecute el servidor VNC como un servicio o demonio, luego se pueden quitar la pantalla, el teclado y el mouse y almacenar la máquina en una ubicación apartada.
Además, la pantalla que se muestra a través de VNC no es necesariamente la misma que ve un usuario en el servidor. En equipos Unix/Linux que admiten varias sesiones X11 simultáneas, VNC puede configurarse para que sirva a una sesión X11 existente en particular o para iniciar una propia. También es posible ejecutar varias sesiones VNC desde el mismo equipo. En Microsoft Windows, la sesión VNC que se muestra siempre es la sesión del usuario actual. [ cita requerida ]
Los usuarios suelen implementar VNC como un sistema de escritorio remoto multiplataforma. Por ejemplo, Apple Remote Desktop para Mac OS X (y durante un tiempo, " Back to My Mac " en "Leopard" - Mac OS X 10.5 hasta "High Sierra" - macOS 10.13) interopera con VNC y se conectará al escritorio actual de un usuario de Unix si se sirve con x11vnc , o a una sesión X11 separada si se sirve una con TightVNC . Desde Unix, TightVNC se conectará a una sesión de Mac OS X servida por Apple Remote Desktop si la opción VNC está habilitada, o a un servidor VNC que se ejecute en Microsoft Windows. [12]
En julio de 2014, RealVNC publicó una vista previa para desarrolladores de Wayland . [13] [14]
De manera predeterminada, RFB no es un protocolo seguro. Si bien las contraseñas no se envían en texto sin formato (como en Telnet ), el descifrado podría resultar exitoso si tanto la clave de cifrado como la contraseña codificada se rastrearan desde una red. Por este motivo, se recomienda utilizar una contraseña de al menos 8 caracteres. Por otro lado, también existe un límite de 8 caracteres en algunas versiones de VNC; si se envía una contraseña que supera los 8 caracteres, se eliminan los caracteres sobrantes y la cadena truncada se compara con la contraseña.
UltraVNC admite el uso de un complemento de cifrado de código abierto que cifra toda la sesión VNC, incluida la autenticación de contraseñas y la transferencia de datos. También permite que la autenticación se realice en función de las cuentas de usuario de NTLM y Active Directory . Sin embargo, el uso de dichos complementos de cifrado lo hace incompatible con otros programas VNC. RealVNC ofrece cifrado AES de alta resistencia como parte de su paquete comercial, junto con la integración con Active Directory. Workspot lanzó parches de cifrado AES para VNC. Según TightVNC, [15] TightVNC no es seguro ya que los datos de las imágenes se transmiten sin cifrado. Para evitarlo, se deben tunelizar a través de una conexión SSH (consulte a continuación).
Se puede crear un túnel VNC a través de una conexión SSH o VPN , lo que añadiría una capa de seguridad adicional con un cifrado más fuerte. Los clientes SSH están disponibles para la mayoría de las plataformas; se pueden crear túneles SSH desde clientes UNIX , clientes Microsoft Windows, clientes Mac (incluidos Mac OS X y System 7 y superiores) y muchos otros. También hay aplicaciones gratuitas que crean túneles VPN instantáneos entre ordenadores.
Una preocupación adicional en materia de seguridad en el uso de VNC es comprobar si la versión utilizada requiere autorización del propietario del equipo remoto antes de que alguien tome el control de su dispositivo. Esto evitará la situación en la que el propietario del equipo al que se accedió se dé cuenta de que hay alguien en control de su dispositivo sin previo aviso.