Cómo desplegar un entorno de control remoto usando RustDesk y un servidor propio. Este proceso permitirá disponer de un sistema de control remoto gratuito y, además, con el servidor de gestión en nuestras instalaciones, sin salir a Internet, más seguro y sin costes de licencias.
- Control remoto gratuito con RustDesk.
- Desplegar servidor RustDesk en Docker.
- Configurar DNS, router y cortafuegos para acceso externo al servidor RustDesk.
- Medidas de seguridad si activamos el acceso externo a nuestro servidor RustDesk.
- Exportar e importar configuración del servidor en el cliente RustDesk.
Control remoto gratuito con RustDesk
RustDesk es una software de control remoto profesional, open source y gratuito. Es similar a otros softwares como Teamviewer, LogMeIn o AnyDesk. La diferencia principal es que RustDesk es open source, con el código fuente disponible y gratuito.
Además, RustDesk permite crear el servidor de gestión en cualquier equipo de la organización, evitando la dependencia de servidores externos de terceros. Por ejemplo, cuando usamos Teamviewer, todos nuestros datos de acceso se almacenan en los servidores de este fabricante, no teniendo control sobre ellos. Con RustDesk todos los datos de conexión quedarán almacenados en un servidor de nuestra propiedad.
RustDesk admite desplegar el servidor en diversos entornos. Por simplicidad y rapidez, desplegaremos el servidor en Docker. Por ello, el único requisito será disponer de un equipo (sea Windows o Linux) con Docker Desktop. En el siguiente tutorial explicamos cómo instalar Docker Desktop en Linux Ubuntu:
En este otro tutorial explicamos cómo instalar Docker Desktop en Windows:
Desplegar servidor RustDesk en Docker
En este caso, crearemos una URL pública con su correspondiente DNS, para poder acceder a equipos remotos de fuera de la red usando nuestro servidor RustDesk. Para ello, seguiremos los pasos de este punto, para crear el DNS y abrir los puertos pertinentes en el cortafuegos, así como el mapeo de puertos en el router.
En primer lugar, crearemos una carpeta en el equipo que contiene Docker Desktop. Dentro de dicha carpeta crearemos un fichero con el nombre compose.yml y el contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
networks: rustdesk-net: external: false services: hbbs: container_name: hbbs ports: - 21115:21115 - 21116:21116 - 21116:21116/udp - 21118:21118 image: rustdesk/rustdesk-server:latest command: hbbs -r re.proyectoa.com:21117 volumes: - ./data:/root networks: - rustdesk-net depends_on: - hbbr restart: unless-stopped hbbr: container_name: hbbr ports: - 21117:21117 - 21119:21119 image: rustdesk/rustdesk-server:latest command: hbbr volumes: - ./data:/root networks: - rustdesk-net restart: unless-stopped |
En este caso, hemos usado el DNS re.proyectoa.com, indicado en el fichero compose.yml. Como es lógico, cambiaremos este valor por el DNS asignado a tal efecto en la organización. RustDesk permite el acceso sin necesidad de usar un DNS, directamente con la IP pública, pero usar DNS es más eficiente de cara a un posible cambio en la IP pública. Si tenemos muchos clientes RustDesk configurados y nos cambia la IP pública (por el motivo que sea), al usar DNS no necesitamos cambiar configuraciones en los clientes RustDesk, únicamente necesitaremos cambiar la IP en la zona DNS de nuestro hosting por la nueva asignada.
Por otro lado, es muy importante tener en cuenta que con el fichero compose.yml anterior, el volumen donde se almacenarán los datos del servidor RustDesk (base de datos SQLite y fichero de clave (key) de publicación) se almacenará en la carpeta «data», en la ruta donde se realice el despliegue del servidor. Por lo tanto, nos aseguraremos de crear el fichero compose.yml y de desplegarlo en una carpeta del equipo anfitrión que debe ser persistente.
Para desplegar el entorno RustDesk, desde la carpeta donde hemos creado el fichero compose.yml, ejecutaremos el siguiente comando (recordando que será en esta carpeta donde se cree la subcarpeta «data» con los datos del servidor RustDesk):
1 |
docker-compose up -d |

El servidor RustDesk quedará desplegado y a la escucha por el puerto, tanto local como interno, 21116. Podremos comprobar su estado ejecutando, en la misma carpeta:
1 |
docker compose logs -f |

Una vez desplegado el contenedor y la imagen Docker con el servidor de RustDesk, puesto que hemos establecido el volumen en el equipo local anfitrión, accederemos a él para obtener el contenido del fichero id_ed25519.pub que contendrá la Key (clave privada) para la conexión de los clientes al servidor. Podremos abrir el fichero con un editor de texto plano:
1 |
notepad id_ed25519.pub |

Guardaremos este valor para usarlo posteriormente en la configuración de los clientes RustDesk. Este valor debe almacenarse en lugar seguro y nunca publicarse:

Configurar DNS, router y cortafuegos para acceso externo al servidor RustDesk
Si queremos acceder a equipos remotos, de fuera de nuestra red, de Internet y que estos equipos usen nuestro servidor RustDesk, es recomendable crear un DNS (no es obligatorio). Con este DNS definiremos la URL para el acceso a la IP pública de nuestra organización, donde se encuentra el servidor RustDesk. En primer lugar, obtendremos nuestra IP pública, por ejemplo accediendo a:
Nota: la IP pública, si no es estática/fija, puede variar. Si varía, deberemos modificar la zona DNS con la nueva IP. Por lo que es muy recomendable disponer de una IP pública estática/fija, no dinámica.

En este caso, desde nuestro hosting, donde tenemos registrado el dominio, crearemos una zona DNS de tipo A, por ejemplo con el host:
re.proyectoa.com
Asignándole la IP pública de nuestra organización:

En el cortafuegos o router de nuestra organización, crearemos una regla de NAT (mapeo de puertos o redirección de puertos), asignando el puerto 21116 (TCP y UDP) (el de defecto establecido en el despliegue del servidor RustDesk) a la IP interna del equipo que contiene Docker Desktop y el servidor RustDesk:

Por último, en el cortafuegos del equipo con Docker Desktop y el servidor RustDesk, añadiremos una regla de entrada para abrir el puerto 21116:

Configurar los clientes con RustDesk para control remoto usando nuestro servidor
Una vez instalado RustDesk en el equipo, descargando el programa de instalación desde su web oficial:
Accederemos a los ajustes, pulsando en los tres puntos verticales:

Pulsaremos en «Red» [1] y en «Desbloquear Ajustes de Red» [2]:

Pulsaremos en «Servidor ID/Relay»:

Introduciremos en «Servidor Relay» el DNS establecido en este punto, que apuntará al servidor de RustDesk. Introduciremos también la Key obtenida en el proceso de despliegue del servidor RustDesk, como hemos explicado anteriormente:

Es recomendable establecer RustDesk como servicio, para poder tener siempre disponible el acceso remoto. Para ello pulsaremos en «Iniciar servicio»:

O bien, desde los Ajustes, también podremos iniciar el servicio:

Si la conexión con nuestro servidor personal de RustDesk es correcta nos mostrará el mensaje «Listo» en la parte inferior:

Si queremos permitir el acceso remoto sin consentimiento, podremos establecer una contraseña permanente. para ello pulsaremos en «Seguridad» [1] y en «Desbloquear ajustes de seguridad» [2]:

En la sección «Contraseña», marcaremos «Usar contraseña permanente» y pulsaremos en «Establecer contraseña permanente»:

Una vez establecida la contraseña permanente, si queremos disponer de ambos métodos, o bien una contraseña aleatoria que el usuario nos proporciona o bien usar la contraseña permanente definida anteriormente, marcaremos:

A partir de ahora, podremos hacer control remoto a este equipo tanto desde dentro de nuestra red LAN como desde fuera, desde Internet, a través de su ID y su contraseña permanente o bien si el usuario nos permite el acceso o nos proporciona la contraseña de un solo uso.
Medidas de seguridad si activamos el acceso externo a nuestro servidor RustDesk
Si queremos establecer un nivel de seguridad superior (es lo recomendable), en el cortafuegos perimetral de nuestra organización permitiremos el acceso al servidor RustDesk únicamente desde determinadas IP públicas, limitando así la exposición a Internet. Para ello, desde los equipos cliente con RustDesk, deberemos conocer la IP pública desde la que se conectan.
Otra medida de seguridad recomendable es no usar el puerto por defecto 21116 para el servicio de RustDesk y cambiarlo por otro «desconocido» para un posible atacante. Esto se puede hacer modificando el fichero compose.yml y cambiando los puertos por defecto con los que se levantará y en los que escuchará el servidor de RustDesk.
Otra medida más de seguridad es NO publicar el DNS de acceso al servidor RustDesk para que los bots no lo rastreen. Así como intentar establecer un nombre para el host DNS que no esté en diccionarios, por ejemplo:
ewxgtdqa1.proyectoa.com
De forma que aunque se intenten descubrir, mediante uso de diccionario, subdominios de nuestro dominio principal, no podrán obtener el de RustDesk, al ser una combinación de letras y números aleatorios.
Otra opción más recomendables es no usar el dominio principal de nuestra organización para este propósito y usar, en cambio, un dominio no publicado y sin sitio web asociado, que no pueda ser indexado por los motores de búsqueda ni por las arañas de Internet.
La clave privada generada en el servidor RustDesk debemos almacenarla siempre en lugar seguro y no publicarla. Aunque en los equipos cliente puede mostrarse, es recomendable no exponerla al exterior.
Exportar e importar configuración del servidor en el cliente RustDesk
Si queremos exportar la configuración de acceso a nuestro servidor, para tenerla disponible y poder importarla en los clientes, sobre un cliente RustDesk ya configurado, accederemos a los Ajustes, y a «Red» – «Desbloquear Ajustes de Red»:

Pulsaremos en «Servidor ID/Relay»:

Pulsaremos en el botón «Exportar configuración del servidor»:

Se copiará al portapapeles un texto cifrado, de este estilo:
1 |
=0nI9Ekcl1nOVDOoxcpwUTC6Vl7ud8Sl9FdQ0mNdBDdPpnsoVDOsZgapxEnWZjM6I6el7mI8Ii86IarFmtsTSbrNmLr9GtjVFewJHduUhcgojh5FGbhJnIhIShvNhLhhGdhVWhvJhcuhmchojh0NhbohyJ |
Si guardamos este valor en un fichero de texto (que NO sea accesible públicamente), lo podemos usar para importar la configuración en clientes RustDesk no configurados, desde la misma ventana anterior, copiando el valor exportado al portapapeles y pulsando en el botón «Importar configuración de servidor»:

Si teníamos el texto cifrado correcto de exportación de los datos del servidor, el cliente configurará el servidor RustDesk de forma correcta:
