# Cómo montar un servidor rsync en Windows 11 usando WSL2 y Debian

- Link: https://binariocero.com/windows/como-montar-un-servidor-rsync-en-windows-11-usando-wsl2-y-debian
- Published: 2026-09-19T10:49:44+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

Esta guía explica cómo convertir un Windows 11 en un servidor rsync (modo daemon,
puerto 873) utilizando Debian sobre WSL2, para recibir copias de seguridad enviadas
desde un NAS u otro equipo Linux.

## 1. Instalar WSL2 y Debian

Abre PowerShell como administrador y ejecuta:

    ```wp-block-code
    wsl --install -d Debian
    ```

Reinicia el equipo si el sistema lo solicita. Al arrancar Debian por primera vez,
se te pedirá crear un usuario y contraseña de Linux.

## 2. Instalar rsync dentro de Debian

Dentro de la terminal de Debian:

    ```wp-block-code
    sudo apt update
    sudo apt install rsync -y
    ```

## 3. Configurar rsync en modo daemon

Crea el fichero `/etc/rsyncd.conf`:

    ```wp-block-code
    uid = nobody
    gid = nogroup
    use chroot = yes
    max connections = 4
    pid file = /var/run/rsyncd.pid
    log file = /var/log/rsyncd.log

    [backup]
        path = /mnt/c/BackupNAS
        comment = Copias desde el NAS
        read only = false
        auth users = copiasnas
        secrets file = /etc/rsyncd.secrets
    ```

path = /mnt/c/BackupNAS comment = Copias desde el NAS read only = false auth users
= copiasnas secrets file = /etc/rsyncd.secrets

La ruta `/mnt/c/BackupNAS` hace que los ficheros recibidos queden guardados directamente
en el disco `C:` de Windows.

Crea la carpeta de destino y el fichero de contraseñas del daemon (usuario propio
de rsync, no de Windows):

    ```wp-block-code
    sudo mkdir -p /mnt/c/BackupNAS
    echo "copiasnas:TuContraseñaSegura" | sudo tee /etc/rsyncd.secrets
    sudo chmod 600 /etc/rsyncd.secrets
    ```

## 4. Arrancar el servicio rsync

Para que arranque automáticamente con systemd (si tu Debian en WSL2 lo soporta):

    ```wp-block-code
    sudo systemctl enable rsync
    sudo systemctl start rsync
    ```

Si prefieres lanzarlo manualmente para probar:

    ```wp-block-code
    sudo rsync --daemon --config=/etc/rsyncd.conf
    ```

> **Nota:** si ves el error `failed to lock pid file /var/run/rsyncd.pid: Resource
> temporarily unavailable`, significa que el daemon ya está corriendo (probablemente
> por `systemctl start`). Compruébalo con `ps aux | grep rsync` y no lo relances
> manualmente si ya está activo. Usa solo **una** vía de arranque (systemd _o_ lanzamiento
> manual, no ambas) para evitar este conflicto.

## 5. Conseguir que Debian arranque sola tras reiniciar Windows

WSL2 no se levanta solo al arrancar Windows por defecto. Hay que forzarlo con una
tarea programada:

    ```wp-block-code
    $action = New-ScheduledTaskAction -Execute "wsl.exe" -Argument "-d Debian -- true"
    $trigger = New-ScheduledTaskTrigger -AtStartup
    Register-ScheduledTask -TaskName "WSL-Debian-Startup" -Action $action -Trigger $trigger -RunLevel Highest -User "SYSTEM"
    ```

Si `systemctl enable rsync` funciona correctamente dentro de Debian, esta tarea 
solo necesita iniciar la instancia de WSL; el propio systemd de Debian se encargará
de levantar el daemon rsync.

También conviene configurar la BIOS/UEFI del equipo con la opción **"Restore on 
AC Power Loss"** en **"Power On"**, para que la máquina encienda sola tras un corte
de energía.

## 6. Redirigir el puerto 873 desde Windows hacia WSL2

La IP interna de WSL2 cambia en cada reinicio, así que hace falta un reenvío de 
puerto (`portproxy`) desde la IP de Windows hacia la IP interna de Debian:

    ```wp-block-code
    $wslIP = (wsl -d Debian hostname -I).Trim()
    netsh interface portproxy add v4tov4 listenport=873 listenaddress=0.0.0.0 connectport=873 connectaddress=$wslIP
    ```

Este comando debe volver a ejecutarse en cada arranque (por ejemplo, añadiéndolo
a la misma tarea programada del paso 5), ya que la IP de WSL cambia.

## 7. Abrir el puerto en el firewall de Windows

    ```wp-block-code
    New-NetFirewallRule -DisplayName 'Rsync Daemon WSL' -Direction Inbound -Protocol TCP -LocalPort 873 -Action Allow
    ```

## 8. Comando de sincronización desde el NAS

    ```wp-block-code
    rsync -avz /origen_nas/ copiasnas@IP_WINDOWS::backup/
    ```

Se pedirá la contraseña definida en `rsyncd.secrets`. Para evitar introducirla manualmente
en tareas automáticas, puede pasarse mediante la variable de entorno `RSYNC_PASSWORD`
o un fichero con `--password-file`.

## 9. Solución de problemas: se crean las carpetas pero no los ficheros

Si al sincronizar aparece la estructura de directorios pero los ficheros no llegan,
revisa:

 * **Filtros en el comando del NAS**: patrones como `--include='*/' --exclude='*'`
   crean solo la estructura de carpetas a propósito. Revisa si tu NAS trae este 
   preset activado.
 * **El log del daemon**: `cat /var/log/rsyncd.log` — un error tipo `mkstemp failed:
   Permission denied` apunta a un problema de permisos.
 * **Permisos del usuario `nobody` sobre `/mnt/c/BackupNAS`**: prueba temporalmente
   con `uid = root` / `gid = root` en `rsyncd.conf` para descartar el problema; 
   si con root funciona, ajusta permisos en la carpeta en vez de dejar el daemon
   corriendo como root de forma permanente.
 * **Metadatos del mount `/mnt/c`**: edita `/etc/wsl.conf` añadiendo:`[automount]
   options = "metadata"` y reinicia WSL (`wsl --shutdown` desde PowerShell) para
   que los permisos POSIX se respeten de forma más consistente sobre NTFS.

## Resumen del flujo completo al arrancar el equipo

 1. La BIOS enciende el equipo tras un corte de energía.
 2. Windows arranca y ejecuta la tarea programada `WSL-Debian-Startup`.
 3. Esa tarea inicia la instancia de Debian en WSL2.
 4. Systemd, dentro de Debian, levanta automáticamente el servicio `rsync`.
 5. La misma tarea (o una complementaria) reconfigura el `portproxy` con la nueva IP
    de WSL.
 6. El NAS puede sincronizar contra el puerto 873 de la IP de Windows sin intervención
    manual.
