Incorporación de Tailscale en mi Servidor NAS.
Tailscale es una solución de red privada virtual (VPN) moderna, basada en el protocolo WireGuard, que permite conectar dispositivos (ordenadores, servidores, móviles) entre sí de forma segura, rápida y sin necesidad de configuraciones complejas de firewall o router.
- Seguridad y Privacidad: Utiliza cifrado de extremo a extremo basado en WireGuard. El tráfico fluye directamente entre dispositivos (peer-to-peer), no a través de un servidor central.
- Red Mesh (Malla): Todos los dispositivos se conectan entre sí (como si estuvieran en la misma red local), independientemente de su ubicación geográfica.
- Autenticación: Utiliza proveedores de identidad existentes (Google, Microsoft, GitHub) para gestionar el acceso.
- Versatilidad: Compatible con Linux, Windows, macOS, Android, iOS, NAS, y contenedores.
- Funciones Adicionales: Permite nodos de salida (exit nodes) para enrutar tráfico a través de otra ubicación, y (funnels) para exponer servicios locales a internet.
Tailscale simplifica el acceso remoto seguro, siendo una excelente opción para teletrabajo, acceso a servidores NAS domésticos o conectar infraestructura en la nube.
¿Qué soluciona Tailscale?
Tailscale resuelve el problema del acceso remoto seguro cuando no es posible abrir puertos ni configurar una VPN tradicional en el router.
En muchos entornos domésticos o de laboratorio (homelab), el acceso remoto suele depender de:
- Redirección de puertos (port forwarding).
- IP pública fija.
- Control total del router.
Sin embargo, en este caso el proveedor de internet que tengo contratado no permite acceder a la configuración avanzada del router, lo que impide abrir puertos, instalar una VPN tradicional o exponer servicios hacia internet.
¿Por qué Tailscale es la solución?
En lugar de requerir puertos abiertos, Tailscale:
- Crea una red privada virtual (VPN) basada en WireGuard.
- Establece conexiones salientes cifradas desde cada dispositivo.
- Atraviesa CGNAT y firewalls sin configuración adicional.
- Conecta los dispositivos directamente dentro de una tailnet privada.
Configuración
En este punto, al acceder a Nextcloud mediante la IP local del servidor, el servicio solo es accesible desde la red interna (localhost / LAN) y no cuenta con cifrado en tránsito (HTTP). Esto implica que la transferencia de datos no está encriptada, por lo que, en caso de que la red local sea comprometida o interceptada, la información almacenada y transmitida por la nube privada quedaría expuesta. Sin una capa adicional de seguridad como HTTPS, VPN o SSL, este escenario representa un riesgo crítico para la confidencialidad de los datos.
Iniciar Tailscale
Accedemos al panel web de Tailscale e iniciamos sesión con una cuenta válida. Durante este proceso se completa un asistente de configuración inicial, tras el cual se habilita el panel de administración, desde donde se gestionará la tailnet y los dispositivos conectados.
Aquí debemos hacer uso del siguiente script que nos da Tailscale para instalarlo en el Servidor:

curl -fsSL https://tailscale.com/install.sh | shUna vez instalado pedirá que levantemos el servicio:
sudo tailscale up
Al ejecutar este comando, Tailscale mostrará en la terminal un enlace de autenticación, el cual debe abrirse en un navegador web para autorizar el dispositivo y asociarlo a la tailnet.
Una vez abierto el enlace y finalizado el proceso de autenticación, el servidor quedará conectado correctamente y aparecerá como activo dentro de la tailnet:

Conectar dispositivos a la Tailnet
Luego de conectar el Servidor debemos conectar nuestros dispositivos para usar la VPN, en este apartado hacer click en (Add device).

Luego en Client device:

Accedemos al enlace que se proporciona a continuación (https://tailscale.com/download/windows/) clickear en (Download Tailscale for Windows):

Una vez descargado e instalado se abrirá una ventana en el navegador actual para conectar el dispositivos:

Aquí ya se puede ver conectado el dispositivo en la Tailnet:

Habilitar HTTPS y DNS
Debemos hacer click en la IP que Tailscale ha asignado y veremos el Dominio que fue asignado por default para hacer uso de las DNS:

Si abrimos el Dominio que se nos fue asignado en el navegador, veremos que Nextcloud dirá que no confía en ese Dominio, por consecuencia no se abrirá:

Primero nos dirigiremos al apartado DNS dentro del panel de administración de Tailscale, ya que desde allí se habilita el soporte para HTTPS y la resolución de nombres dentro de la tailnet. En este mismo apartado es posible renombrar el dominio asignado por defecto por Tailscale (por ejemplo: nombre.tailnet.ts.net), el cual será utilizado para acceder a los servicios internos de forma segura.
Cabe aclarar que en este caso se está utilizando la versión gratuita de Tailscale, por lo que no es posible asociar un dominio propio personalizado. Sin embargo, el dominio proporcionado por Tailscale es totalmente funcional y permite el uso de HTTPS y certificados SSL.

Habilitamos HTTPS:

Configuración del Servidor
En el Servidor se llevará a cabo la configuración inicial para que Nextcloud reconozca y confíe en el dominio proporcionado, junto con la habilitación de resolución DNS interna, HTTPS y certificados SSL para el cifrado de las comunicaciones.
Iremos al directorio (/var/www/nextcloud/config) y luego accedemos al archivo de configuración (config.php):
sudo nano /var/www/nextcloud/config/config.php
Luego colocar el siguiente código php (modificar según sus configuraciones):
'trusted_domains' =>
array (
0 => '192.168.88.14', // Tu IP local
1 => '100.112.12.52', // Tu IP de Tailscale
2 => '*.ts.net', // Permite cualquier subdominio de Tailscale
),
'trusted_proxies' =>
array (
0 => '100.64.0.0/10', // Rango de IPs que usa Tailscale
),
'overwrite.cli.url' => 'http://192.168.88.14', // URL base
'overwriteprotocol' => 'https', // Genera enlaces HTTPS
'overwritehost' => 'servernas.rufous-altair.ts.net', // Fuerza las URLs usando este hostname.
'overwrite_proxies' =>
array (
0 => '127.0.0.1', // Lista de proxies
),
¿Qué significa trusted_domains?
Nextcloud solo acepta peticiones si el dominio o IP que aparece en la URL del navegador está en esta lista. Si alguien intenta entrar con una URL que no está aquí, Nextcloud devuelve error.
'trusted_domains' =>
array (
0 => '192.168.88.14',
1 => '100.112.12.52',
2 => '*.ts.net',
),- 192.168.88.14 → Tu IP local del servidor (la que usas dentro de tu red LAN).
- 100.112.12.52 → IP que asigna Tailscale.
- *.ts.net → Permite cualquier subdominio de Tailscale ( servernas.rufous-altair.ts.net, mi-nas.ts.net, etc.).
¿Qué significa trusted_proxies?
'trusted_proxies' =>
array (
0 => '100.64.0.0/10',
),Nextcloud necesita saber qué IPs son proxies de confianza (es decir, reverse proxies o VPNs como Tailscale). Cuando el tráfico pasa por un proxy, el cliente real (tu celular, PC) se ve como si viniera desde la IP del proxy.
- 100.64.0.0/10 → Es el rango de IPs que usa Tailscale (CGNAT privado). Con esto le decís a Nextcloud: si la petición viene desde cualquier IP de Tailscale, confía en las cabeceras que me envíe.
¿Qué hacen estas tres líneas?
'overwrite.cli.url' => 'http://192.168.88.14',
'overwriteprotocol' => 'https',
'overwritehost' => 'servernas.rufous-altair.ts.net','overwrite.cli.url' => 'http://192.168.88.14'Es la URL base que usa el comandoocc(el CLI de Nextcloud). Sirve para que cuando ejecutes comandos comoocc maintenance:repairoocc files:scandesde el terminal, Nextcloud sepa desde dónde está corriendo. Normalmente se pone la IP o dominio interno.'overwriteprotocol' => 'https'Le dice a Nextcloud: aunque la petición llegue por HTTP, generá todos los enlaces como HTTPS.'overwritehost' => 'servernas.rufous-altair.ts.net'Fuerza que Nextcloud genere todas las URLs usando este hostname. Ejemplo: en vez de generar (https://192.168.88.14/index.php), generará (https://servernas.rufous-altair.ts.net/index.php).
¿Qué significa overwrite_proxies?
'overwrite_proxies' =>
array (
0 => '127.0.0.1',
),Es una lista de proxies en los que Nextcloud siempre va a aplicar las reglas de overwrite (protocolo, host, etc.), incluso si no están en trusted_proxies. En este caso solo tengo 127.0.0.1 (localhost).
Por último, procederemos a generar el certificado SSL para el servidor utilizando el dominio asignado . Este certificado permitirá cifrar las comunicaciones mediante HTTPS dentro de la tailnet:
sudo tailscale cert nombre.tailnet.ts.netA continuación, se utilizará Tailscale Serve para exponer el servicio web que corre localmente en el puerto 80, encapsulándolo de forma segura bajo HTTPS. De esta manera, el servicio quedará accesible únicamente a través del dominio de Tailscale y dentro de la VPN:
sudo tailscale serve --bg http://localhost:80Se habilita el puerto 443/TCP en el firewall del servidor para permitir conexiones HTTPS internas provenientes de la tailnet:
sudo ufw allow 443/tcpFinalmente, se reinicia el servicio de Apache para aplicar la configuración y asegurar el correcto funcionamiento del acceso HTTPS:
sudo systemctl restart apache2
Al acceder a (https://nombre.tailnet.ts.net) , podremos visualizar Nextcloud funcionando con normalidad, ahora bajo HTTPS, con cifrado SSL activo y resolución mediante DNS. De esta forma, el acceso se realiza a través del dominio asignado por Tailscale, en lugar de una IP directa, garantizando que toda la comunicación esté cifrada de extremo a extremo dentro de la tailnet.

Conclusión
Con esta implementación, el Servidor Linux y Nextcloud quedan accesibles de forma segura, cifrada y privada, sin necesidad de exponer puertos ni depender de configuraciones avanzadas del router o del proveedor de internet. Tailscale demostró ser una solución eficiente para entornos bajo CGNAT, permitiendo desplegar una VPN moderna, con DNS, HTTPS y SSL integrados, manteniendo un enfoque zero-trust y reduciendo significativamente la superficie de ataque. Esta arquitectura resulta ideal para servidores NAS, homelabs y servicios auto-alojados, ofreciendo simplicidad, seguridad y escalabilidad.
GabrielGR









