Introducción

La asistencia remota es una práctica que en nuestros días está cobrando cada vez más importancia. Se usa para reparar ordenadores, enseñar a distancia, etc. Gracias al desarrollo del complemento NVDA Remote, también está al alcance de cualquier persona que utilice NVDA.

Sin embargo, hasta hace algún tiempo, las conexiones indirectas sólo se podían hacer a través de dos servidores: nvdaremote.com y allinaccess.com. Estos servidores están lejos (dependiendo de dónde te encuentres, claro), se sobrecargan si muchos usuarios se conectan a la vez, y si se caen y la persona a la que asistes no tiene los puertos abiertos para una conexión directa, se acabó la asistencia… a no ser que tengas tu propio servidor para conexiones remotas.

En la documentación de NVDA Remote se habla de conectarse a un equipo desde fuera de casa y controlarlo. ¿Te imaginas hacer eso con una red local entera? ¿Te imaginas teniendo un servidor que nadie más conoce, donde disminuye el riesgo de que un intruso pueda acertar con alguna de tus claves?

En esta guía hablaremos de la instalación, configuración y uso del servidor de NVDA Remote. Las instrucciones para compilarlo desde el código fuente pueden encontrarse en el repositorio oficial en GitHub.

Descarga e instalación

La última versión del servidor para NVDA Remote, también llamado NVDA Remote Server, se puede encontrar en la página de publicaciones de GitHub (abre en nueva ventana). Se encuentra disponible para Windows, Mac y varias distribuciones de Linux. A continuación vamos a ver los pasos para hacer la instalación en cada plataforma.

Debian

Debian es, sin duda, una de las distribuciones más populares de Linux. En este apartado se contemplan todas ellas, incluyendo Ubuntu. Encontrarás dos paquetes distintos:

  • nvda-remote-server-x.y_debian7.deb: para Debian 7 y versiones anteriores, versiones de Ubuntu anteriores a la 16.04, servidores vps montados en contenedores (sin kernel propio, tipo Docker y OpenVZ), y en general cualquier sistema que no tenga el paquete systemd instalado. Si no sabes cuál elegir, quédate con esta.
  • nvda-remote-server-x.y_debian8.deb: para Debian 8 y versiones posteriores, y cualquier otra distribución donde systemd funcione. Si el paquete systemd-sysv no está presente en tu sistema, deberás instalarlo antes de instalar este.

Nota: para comprobar si tienes systemd, ejecuta el comando sudo systemctl. Si dice que no encuentra ese comando, no tienes systemd instalado. Si da un error de conexión de bus, significa que no funciona y por tanto debes usar el paquete para Debian 7.

Una vez descargado, ejecuta el siguiente comando para instalarlo o actualizar desde una versión anterior: sudo dpkg -i nvda-remote-server-x.y_debianZ.deb (x, y y z son los distintos números de versión, reemplázalos según corresponda).

Para desinstalar el servidor conservando la configuración (quién sabe, más adelante podrías volver a instalarlo), ejecuta: sudo dpkg –remove nvda-remote-server

Para desinstalar el servidor y eliminar todo rastro de su existencia en tu sistema, ejecuta: sudo dpkg –purge nvda-remote-server

Centos

Vamos con otra distribución bastante importante, conocida por su estabilidad. En esta familia nos podemos encontrar a RedHat, Centos, Fedora, Oracle / Amazon Linux, y casi cualquier distribución derivada que use rpm como su gestor de paquetes. Al igual que en el caso anterior, tenemos:

  • NVDARemoteServer-x.y-1.el6.noarch.rpm: para Centos 6 y distribuciones similares, y para todo aquel sistema que, al igual que en el caso anterior, no tenga systemd instalado u operativo.
  • NVDARemoteServer-x.y-1.el7.noarch.rpm: para Centos 7, últimas versiones de Fedora y sistemas derivados.

Una vez obtenido el archivo correspondiente a nuestra plataforma, hacemos lo siguiente para instalarlo o actualizarlo desde una versión anterior: sudo rpm -U NVDARemoteServer-x.y-1.elZ.noarch.rpm

Para desinstalarlo, ejecuta el siguiente comando: sudo rpm -e NVDARemoteServer

Arch Linux y MSYS2 en Windows

Para instalar el servidor en Arch Linux y distribuciones derivadas, ejecuta el siguiente comando: sudo pacman -U NVDARemoteServer-archlinux-x.y-1-any.pkg.tar.xz

Para desinstalar, ejecuta: sudo pacman –remove NVDARemoteServer

MSYS2 es un proyecto para traer algunas herramientas de desarrollo nativas de Linux a Windows. Utiliza también el gestor de paquetes pacman, por lo que puedes hacer lo mismo que en Arch Linux.

Mac os x

Nota: los procedimientos que se indican a continuación reducirán la seguridad de tu Mac, y podrían dejarte expuesto a amenazas externas. Ejecútalos bajo tu responsabilidad.

Hay dos cosas que debes hacer para instalar el servidor de NVDA Remote en el Mac, ya que es un paquete no firmado.

  1. Abre las preferencias del sistema, ve al panel seguridad y privacidad, y permite la instalación de aplicaciones desde cualquier origen.
  2. Si tienes El capitan o una versión posterior, deshabilita la protección de integridad del sistema. Para ello:
    • Reinicia el sistema. Mientras se reinicia, mantén pulsado comando+r para entrar en el modo recuperación.
    • Ve al menú de utilidades, y abre la terminal.
    • Escribe el siguiente comando: csrutil disable
    • Reinicia de nuevo y vuelve al sistema principal.

Hecho todo esto, abre el paquete para Mac desde el finder e instálalo siguiendo el asistente. Si prefieres instalarlo desde una terminal, ejecuta: sudo installer -pkg NVDARemoteServer-macosx-x.y.pkg -target /

Para desinstalarlo, abre una terminal y ejecuta el siguiente comando: sudo NVDARemoteUninstall

Cygwin en Windows

Si tienes instalada una distribución Cygwin y quieres ejecutar el servidor desde allí, deberás hacerlo desde el código fuente. Para ello, descarga el archivo NVDARemoteServer-x.y-src.zip y descomprímelo en una carpeta cualquiera de tu disco duro. A continuación, abre la consola bash de Cygwin, y navega al subdirectorio cygwin que se encuentra en la carpeta donde has descomprimido el código fuente. Allí, ejecuta el siguiente comando: ./install.sh

Para desinstalar, ejecuta el comando NVDARemoteUninstall

Windows

En Windows apenas hace falta instalación. El servidor es casi portable. Para ejecutarlo en modo consola o con la depuración habilitada simplemente debes descomprimirlo en una carpeta de tu disco duro y abrir los archivos correspondientes. En cambio, si quieres instalarlo como un servicio del sistema, deberás ejecutar como administrador el archivo service_manager.cmd. Cuando se abra la consola verás un menú de opciones. Desde allí podrás instalar y desinstalar el servicio, cambiar el modo que tiene de iniciarse en Windows, e iniciarlo o pararlo. ¡No olvides desinstalar el servicio antes de borrar el servidor de tu sistema!

Docker

Si usas habitualmente Docker para crear contenedores y ejecutar aplicaciones en su interior, puede serte útil instalar este servidor como un contenedor más. Usa el siguiente comando para descargar o actualizar la imagen del servidor: docker pull jmdaweb/nvda-remote-server:latest

Podrás crear un contenedor usando los comandos habituales. Esta imagen expone el puerto 6837, que podrás redirigir al exterior.

Cómo usar el servidor

En primer lugar, comprueba que el puerto 6837 está abierto en tu cortafuegos o router. Es el que usa por defecto el servidor, aunque en el siguiente apartado te explicaremos cómo cambiarlo.

En todas las plataformas salvo en Windows, existe un script llamado NVDARemoteServer. Se instala en /usr/bin, por lo que para llamarlo desde la consola simplemente deberás escribir su nombre. Llamarlo sin argumentos sólo te servirá en Cygwin, donde se activará el servidor en modo consola, sin mostrar información por pantalla. En todos los demás sitios debes pasarle un argumento, así como opciones extra que veremos más adelante.

En Windows, hay 2 archivos que puedes ejecutar simplemente pulsando intro sobre ellos:

  • NVDARemoteServer.exe: inicia el servidor en modo consola sin mostrar nada por pantalla.
  • debug.cmd: inicia el servidor en modo depuración.

Argumentos de NVDARemoteServer

Aparte de las opciones, los siguientes argumentos están disponibles:

  • start: inicia el servidor.
  • stop: detiene el servidor.
  • restart: reinicia el servidor.
  • kill: detiene el servidor de forma forzosa (por ejemplo, si se cuelga).
  • enable: habilita el inicio automático del servidor al arrancar el equipo (sólo en distribuciones soportadas de Linux).
  • disable: deshabilita el inicio automático del servidor (sólo en distribuciones soportadas de Linux).
  • debug: inicia el servidor en modo depuración.

Configuración y opciones

Puedes personalizar el servidor a tu gusto, cambiando el puerto tcp en el que escucha, la ubicación de sus archivos e incluso la interfaz de red sobre la que operará. Para ello, puedes editar el archivo NVDARemoteServer.conf. En Windows, este se encuentra en la misma carpeta del programa. En todos los demás sistemas, lo encontrarás en el directorio /etc.

Su sintaxis es muy sencilla: en cada línea hay una única clave con su valor, separados por el signo igual y sin espacios al principio, al final o en medio. Si la línea empieza con un signo de número (#), se trata como un comentario y es ignorada. Los retornos de línea deben ser siempre de estilo Unix, y el archivo debe estar codificado en UTF-8.

Las siguientes opciones están disponibles:

  • interface=ip: interfaz IPV4 en la que escuchará el servidor. Por defecto, todas las interfaces (0.0.0.0). En algunas plataformas con pila tcp/ip única, este ajuste no servirá para nada si el servidor escucha en todas las interfaces IPV6.
  • interface6=ip: escuchar en la interfaz IPV6 especificada. Por defecto, todas las interfaces (::).
  • port=puerto: puerto en el que escuchará el servidor. Por defecto 6837.
  • port6=puerto: escuchar en el puerto especificado cuando se hagan conexiones desde una dirección IPV6. Por defecto tiene el mismo valor que port.
  • logfile=ruta: establece la ruta al archivo log donde el servidor guardará los mensajes de registro. Por defecto /var/log/NVDARemoteServer.log, o la carpeta del programa si estamos en Windows.
  • pidfile=ruta: en sistemas Unix, ruta donde se alojará el archivo con el identificador de proceso del servidor. Por defecto /var/run/NVDARemoteServer.pid
  • loglevel=n: cantidad de información que se almacenará en el registro. Acepta un valor entero entre 0 y 3. Por defecto se establece a 3, máxima información. Para una seguridad óptima en entornos de producción, establécelo a 0 ó 1.
  • pemfile=ruta: ruta a un archivo que contenga concatenadas una clave privada y un certificado ssl. Por defecto se busca el archivo server.pem en la ruta del script server.py

Puedes probar en el modo depuración estas opciones sin tener que modificar el archivo de configuración. Para ello, ponlas en la consola anteponiendo dos guiones. Por ejemplo:
sudo NVDARemoteServer debug –interface=192.168.1.2 –interface6=::1 –port=6443
En modo depuración, las opciones logfile y pidfile no hacen nada. Además dispondrás de una nueva opción para modificar la ruta al archivo de configuración:
sudo NVDARemoteServer debug –configfile=/home/usuario/NVDARemoteServer.conf
Puedes especificar el resto de opciones junto con configfile, y tendrán prioridad sobre aquellas leídas desde la configuración.

Creación de un certificado autofirmado

La seguridad es un factor clave si deseas usar este servidor en producción. Por él circulará mucha información sensible de los usuarios, y existe el riesgo de que esta información sea interceptada y descifrada. Teniendo en cuenta que el certificado por defecto es el mismo que viene incluido en el complemento NVDA Remote (con clave privada y todo), a efectos prácticos es como si no hubiera cifrado. Cualquier atacante que sepa claramente lo que quiere conseguir podría descifrar sin dificultad la información.

Para mitigar esta gran amenaza, existe la posibilidad de generar tu propio certificado. Esto lo puedes hacer ejecutando el comando sudo NVDARemoteCertificate en Linux y Mac, y el archivo NVDARemoteCertificate.cmd en Windows. Al hacerlo, un asistente interactivo nos irá solicitando ciertos datos. Al acabar se generará un nuevo archivo server.pem, ya personalizado con un cifrado distinto. Para acabar y que los cambios tengan efecto, deberás reiniciar el servidor.

Haz esta operación la primera vez que uses el servidor, y cada vez que lo actualices (o usa la opción pemfile).

Ya tengo instalado el servidor y lo he configurado a mi gusto. ¿Y ahora qué?

Si ya tienes todo listo, comparte la dirección del servidor con quien tú quieras: amigos, familiares, clientes de tu empresa, o el público en general. Los usuarios podrán conectarse a tu servidor exactamente de la misma manera que lo hacen a nvdaremote.com o allinaccess.com. Puedes pasarles un nombre de host, una dirección IPV4 o una dirección IPV6; y por supuesto, el puerto!