Problema

Muchas pequeñas oficinas siguen usando SMB/CIFS para compartir carpetas de trabajo entre PCs. Cuando se desea migrar a una solución basada en la nube (por ejemplo, Nextcloud) aparecen varios retos recurrentes:

  1. Acceso remoto fiable – los usuarios necesitan conectar sus portátiles desde fuera de la red sin depender de VPN propietarias o de configuraciones DNS avanzadas del router.
  2. Seguridad en la exposición pública – la aplicación debe estar protegida tras TLS y, opcionalmente, autenticación adicional (basic auth, 2FA) antes de que el tráfico llegue a Nextcloud.
  3. Visibilidad de los archivos desde Windows Explorer – la mayoría de los programas de oficina solo aceptan rutas de tipo UNC (\\servidor\share) y no manejan clientes web.
  4. Control de permisos por usuario – se requiere que cada colaborador vea únicamente sus carpetas asignadas, similar a los permisos SMB tradicionales.
  5. Migración de datos existentes – mover los archivos almacenados en un NAS TrueNAS a la nueva plataforma sin perder estructura ni historial.

El patrón es: una infraestructura SMB funcional que debe transformarse en una pila basada en Nextcloud, manteniendo la experiencia de “unidad de red” en Windows y garantizando acceso seguro desde cualquier ubicación.

Causa

Los obstáculos aparecen por la diferencia de protocolos y de modelo de autenticación:

  • SMB está pensado para redes locales; su descubrimiento y autenticación dependen de NetBIOS/AD o de credenciales locales. Cuando el tráfico atraviesa Internet, el protocolo se vuelve inseguro y los routers domésticos rara vez permiten la apertura de puertos necesarios.
  • Nextcloud usa HTTP/HTTPS y WebDAV. Los clientes Windows pueden mapear un recurso WebDAV, pero el proceso requiere una URL estable, certificado válido y, a veces, ajustes de política de seguridad (p. ej., desactivar “WebClient” restrictions).
  • Los routers de gama media no soportan DNS dinámico ni split‑DNS, lo que impide que los dispositivos internos resuelvan un nombre interno mientras están fuera.
  • La capa de autenticación de Nextcloud (OAuth, 2FA) no se combina con HTTP Basic Auth de forma nativa, lo que deja la puerta abierta a ataques de fuerza bruta si se expone directamente.
  • Los permisos granulares de SMB se gestionan mediante ACL de sistema de archivos; Nextcloud necesita grupos y “carpetas externas” para reproducir esa lógica.

Solución

Una arquitectura que cubra los cinco puntos anteriores se compone de tres bloques:

  1. Tunelización de tráfico con WireGuard – crea una red privada entre el NAS/Nextcloud y los dispositivos remotos. Cada cliente (laptop, smartphone) se conecta al mismo túnel, lo que permite usar la dirección IP interna del servidor como si estuviera en la LAN.
  2. Reverse proxy con TLS y capa de autenticación básica – Nginx (o Caddy) termina el TLS, aplica HTTP Basic Auth (o una capa de autenticación de un proxy externo) y reenvía el tráfico a Nextcloud. De esta forma, la aplicación nunca se expone sin protección.
  3. Mapeo de unidades WebDAV en Windows – con la URL del proxy (https://files.ejemplo.com/remote.php/dav/files/usuario/) y credenciales del usuario, Windows crea una unidad de red que se comporta como un share SMB. El cliente de escritorio de Nextcloud también se puede usar como respaldo, pero la unidad WebDAV satisface los programas que solo aceptan rutas UNC.

Paso a paso

1. Configurar WireGuard en el NAS

  • Instala el paquete wireguard (TrueNAS SCALE lo incluye).
  • Genera una clave privada/pública para el servidor y para cada cliente.
  • Define una subred interna (p. ej., 10.200.0.0/24) y asigna direcciones estáticas a NAS y a los laptops.

2. Deploy de Nginx como reverse proxy

  • Crea un contenedor o servicio en el NAS que escuche en los puertos 80/443.
  • Obtén un certificado de Let’s Encrypt (certbot) para el dominio público (files.ejemplo.com).
  • Añade una sección auth_basic para requerir usuario/contraseña antes de pasar la petición a Nextcloud.

3. Habilitar WebDAV en Nextcloud

  • En la interfaz de Nextcloud, verifica que la app “External storage” está activada (no es obligatoria, pero permite montar SMB como fallback).
  • Cada usuario debe disponer de su carpeta de “Files” y, opcionalmente, de “External storage” apuntando a rutas específicas del NAS si se quiere mantener un repositorio de respaldo separado.

4. Mapear la unidad en Windows

  • Abre el Explorador de archivos → “Este equipo” → “Map network drive”.
  • Usa la ruta: https://files.ejemplo.com/remote.php/dav/files/USERNAME/.
  • Marca “Connect using different credentials” y escribe el usuario y la contraseña de Nextcloud (o la del proxy si se usa Basic Auth).
  • Opcional: crea un script de conexión que active el túnel WireGuard antes de montar la unidad.

5. Control de permisos

  • En Nextcloud, crea grupos (p. ej., ventas, soporte) y asigna carpetas a esos grupos mediante “Sharing”.
  • Si necesitas replicar ACL de SMB, habilita la app “File access control” para aplicar reglas basadas en usuario, IP o grupo.

Cuándo aplicar esta solución

  • Entornos con pocos usuarios (5‑30) que requieren acceso a archivos desde oficina y remoto, y donde la infraestructura de red no permite DNS avanzado ni apertura de puertos SMB.
  • Cuando la política de seguridad exige TLS y autenticación adicional antes de exponer cualquier servicio web.
  • Si los programas críticos solo aceptan rutas de Windows Explorer y no pueden modificarse para usar APIs de Nextcloud.
  • No es adecuada si la organización depende de alta concurrencia de transferencias SMB (p. ej., flujos de video en tiempo real) o necesita características avanzadas de bloqueos de archivos que Nextcloud aún no implementa.

Código

# 1. Generar claves WireGuard en el NAS
wg genkey | tee server_private.key | wg pubkey > server_public.key

# 2. Configuración del servidor WireGuard (wg0.conf)
cat > /etc/wireguard/wg0.conf <<EOF
[Interface]
Address = 10.200.0.1/24
ListenPort = 51820
PrivateKey = $(cat server_private.key)

# Cliente 1 (laptop)
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.200.0.2/32
EOF

# 3. Iniciar el servicio
systemctl enable --now wg-quick@wg0

# 4. Nginx reverse proxy con TLS y Basic Auth
apt-get install nginx apache2-utils -y
htpasswd -c /etc/nginx/.htpasswd admin   # se pedirá la contraseña

cat > /etc/nginx/sites-available/nextcloud <<'EOF'
server {
    listen 443 ssl;
    server_name files.ejemplo.com;

    ssl_certificate /etc/letsencrypt/live/files.ejemplo.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/files.ejemplo.com/privkey.pem;

    auth_basic "Acceso restringido";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF

ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Verificación

  1. Conexión WireGuard – en el laptop, ejecuta wg show y verifica que la interfaz wg0 muestra peer: <SERVER_PUBLIC_KEY> y que el tráfico a 10.200.0.1 responde (ping 10.200.0.1).
  2. Acceso HTTPS – abre https://files.ejemplo.com desde un navegador. Debe aparecer el login de Nextcloud tras la ventana de Basic Auth.
  3. Mapeo WebDAV – en Windows, abre la unidad mapeada. Crea, renombra y elimina un archivo; verifica que los cambios aparecen en la interfaz web de Nextcloud.
  4. Permisos – inicia sesión con dos usuarios diferentes y comprueba que cada uno solo ve sus carpetas compartidas.
  5. Rendimiento – copia un archivo de 500 MiB y mide la velocidad. Si el tiempo supera el esperado, revisa la MTU del túnel WireGuard (prueba con 1420).

Notas adicionales

  • MTU y fragmentación: WireGuard puede fragmentar paquetes grandes si la MTU no coincide con la del ISP. Ajusta MTU = 1420 en wg0.conf cuando notes caídas de velocidad.
  • Persistencia de credenciales: Windows guarda la contraseña del WebDAV en el Administrador de credenciales. Si cambias la contraseña de Nextcloud, actualiza la entrada correspondiente.
  • Backup de Nextcloud: sigue usando el NAS como destino de copias de seguridad mediante rsync o snapshots de ZFS; la migración de datos no requiere conversión de formato, solo copiar los archivos al directorio data/.
  • Desactivar SMB en el NAS: una vez que todas las máquinas usen WebDAV, puedes desactivar los shares SMB para reducir la superficie de ataque.
  • Escalabilidad: para más de 30 usuarios, considera desplegar un balanceador de carga delante de varios nodos Nextcloud y usar LDAP para la gestión de usuarios.