Syncthing sincroniza carpetas entre dispositivos de forma directa, sin un servidor central: cada equipo se conecta con los demás mediante TLS y los datos nunca pasan por terceros salvo, cifrados, cuando hace falta un relay. En este tutorial instalarás Syncthing en un servidor Ubuntu 24.04 desde su repositorio oficial, lo ejecutarás como servicio de systemd con un usuario dedicado, accederás a su interfaz web de forma segura y sincronizarás una carpeta con tu equipo usando versionado de archivos y patrones de exclusión.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo.
  • Un segundo dispositivo con Syncthing instalado (tu portátil, otro servidor o un móvil) para emparejarlo. En Windows y macOS puedes instalarlo desde la web oficial de Syncthing.
  • UFW activo, o cualquier cortafuegos donde puedas abrir el puerto 22000.

Sustituye your_user y your_server_ip por tus valores a lo largo de la guía.

Paso 1: Instalar Syncthing desde el repositorio oficial

Ubuntu 24.04 incluye Syncthing en sus repositorios, pero con una versión antigua. El repositorio oficial del proyecto ofrece la versión estable actual. Descarga su clave de firma:

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg

Añade el repositorio:

echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" | \
  sudo tee /etc/apt/sources.list.d/syncthing.list

Instala el paquete:

sudo apt update
sudo apt install -y syncthing

Comprueba que la versión instalada procede del repositorio oficial:

apt policy syncthing
syncthing:
  Installed: 2.x.x
  Candidate: 2.x.x
  Version table:
 *** 2.x.x 500
        500 https://apt.syncthing.net syncthing/stable-v2 amd64 Packages

Paso 2: Ejecutar Syncthing como servicio

El paquete incluye la unidad de systemd [email protected], que arranca Syncthing con el usuario indicado tras la @. Crea un usuario de sistema dedicado, de modo que Syncthing solo pueda leer y escribir en sus propias carpetas:

sudo useradd --system --create-home --home-dir /var/lib/syncthing --shell /usr/sbin/nologin syncthing

Activa y arranca el servicio para ese usuario:

sudo systemctl enable --now [email protected]

Comprueba que está en marcha:

systemctl status [email protected]
● [email protected] - Syncthing - Open Source Continuous File Synchronization for syncthing
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; preset: enabled)
     Active: active (running) since ...

En el primer arranque Syncthing genera su certificado, que define el identificador del dispositivo, y un archivo config.xml. Localiza el archivo:

sudo find /var/lib/syncthing -name config.xml
/var/lib/syncthing/.local/state/syncthing/config.xml

Las versiones recientes guardan la configuración en ~/.local/state/syncthing; las instalaciones antiguas usaban ~/.config/syncthing. Usa la ruta que devuelva el comando.

Por defecto la interfaz web escucha solo en 127.0.0.1:8384, así que no es accesible desde Internet. Compruébalo:

sudo ss -tlnp | grep syncthing
LISTEN 0 4096 127.0.0.1:8384    0.0.0.0:*  users:(("syncthing",pid=4123,fd=12))
LISTEN 0 4096         *:22000         *:*  users:(("syncthing",pid=4123,fd=10))

El puerto 22000 es el de sincronización entre dispositivos y el 8384 el de la interfaz web.

Paso 3: Abrir los puertos de sincronización

Syncthing necesita el puerto 22000 en TCP y en UDP (conexiones QUIC) para recibir conexiones directas de otros dispositivos. El puerto 21027/UDP solo sirve para el descubrimiento en la red local; en un servidor en Internet no es necesario.

sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp

Verifica las reglas:

sudo ufw status
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
22000/tcp                  ALLOW       Anywhere
22000/udp                  ALLOW       Anywhere

No abras el 8384. Sin el puerto 22000 abierto Syncthing sigue funcionando a través de relays, pero las transferencias serán más lentas.

Paso 4: Acceder a la interfaz web por un túnel SSH

La forma más segura de administrar Syncthing en un servidor es no exponer nunca la interfaz web y reenviarla por SSH. Desde tu equipo local, abre el túnel:

ssh -L 8385:127.0.0.1:8384 your_user@your_server_ip

Se usa el puerto local 8385 para no chocar con el Syncthing de tu propio equipo, que ya ocupa el 8384. Con el túnel abierto, visita http://127.0.0.1:8385 en el navegador.

La primera vez, Syncthing muestra un aviso porque la interfaz no tiene contraseña. Configúrala aunque solo accedas por túnel, ya que cualquier usuario del servidor podría conectarse al puerto local:

  1. Abre Actions > Settings > GUI.
  2. Rellena GUI Authentication User y GUI Authentication Password con un usuario y una contraseña robusta.
  3. Marca Use HTTPS for GUI y guarda.

La página se recarga y pide las credenciales. A partir de ahora accede con https://127.0.0.1:8385; el navegador mostrará un aviso de certificado autofirmado que puedes aceptar.

Paso 5: Emparejar el servidor con otro dispositivo

Cada dispositivo se identifica por un ID derivado de su certificado, con el formato XXXXXXX-XXXXXXX-... en ocho bloques. Para emparejar dos dispositivos, cada uno debe aceptar al otro.

En la interfaz web del servidor, abre Actions > Show ID y copia el identificador. Luego, en la interfaz de tu equipo local (http://127.0.0.1:8384):

  1. Pulsa Add Remote Device.
  2. Pega el ID del servidor en Device ID y ponle un nombre, por ejemplo servidor.
  3. En la pestaña Advanced, sustituye dynamic en Addresses por tcp://your_server_ip:22000. Así tu equipo se conecta directamente al servidor sin depender del descubrimiento global.
  4. Guarda.

En unos segundos la interfaz del servidor muestra un aviso: Device "tu-equipo" (ID...) wants to connect. Pulsa Add Device y guarda. Ambos dispositivos aparecen como Connected en la sección Remote Devices.

Paso 6: Compartir una carpeta

Crea en el servidor la carpeta que recibirá los datos. Debe pertenecer al usuario syncthing:

sudo install -d -o syncthing -g syncthing /srv/sync/documentos

En la interfaz de tu equipo local, pulsa Add Folder:

  1. General: pon una etiqueta como Documentos y elige la ruta local. El Folder ID se genera solo; debe ser el mismo en todos los dispositivos que compartan esta carpeta.
  2. Sharing: marca el dispositivo servidor.
  3. Guarda.

En el servidor aparece una notificación para aceptar la carpeta. Al aceptarla, cambia Folder Path a /srv/sync/documentos antes de guardar.

Syncthing ofrece cuatro tipos de carpeta, configurables en Edit > Advanced > Folder Type:

TipoComportamiento
Send & ReceiveSincronización bidireccional, el valor por defecto
Send OnlyEnvía cambios pero ignora los que llegan de otros dispositivos
Receive OnlyRecibe cambios; las modificaciones locales no se envían
Receive EncryptedGuarda los datos cifrados; el dispositivo no puede leerlos

Para un servidor que actúa como copia de tu equipo, Receive Only evita que un cambio accidental en el servidor se propague a tus dispositivos. Si el servidor no es de total confianza, comparte la carpeta desde tu equipo con una contraseña de cifrado (en la pestaña Sharing, al marcar el dispositivo) y el servidor la guardará como Receive Encrypted, sin acceso a los contenidos.

Comprueba que la sincronización funciona creando un archivo en tu equipo, dentro de la carpeta compartida, y listando la carpeta del servidor:

sudo ls -l /srv/sync/documentos
total 4
-rw-r--r-- 1 syncthing syncthing 12 Sep 25 10:31 prueba.txt

En la interfaz, la carpeta muestra el estado Up to Date.

Paso 7: Activar el versionado de archivos

Sin versionado, un archivo borrado o sobrescrito en un dispositivo se borra o sobrescribe en todos. El versionado guarda la versión anterior en la carpeta .stversions del dispositivo que recibe el cambio. Actívalo en el servidor, que es donde quieres conservar el historial: Edit en la carpeta, pestaña File Versioning.

TipoQué conserva
Trash CanLa última versión de cada archivo borrado o sustituido, durante los días que indiques
SimpleUn número fijo de versiones por archivo
StaggeredMás versiones recientes y menos antiguas, hasta una edad máxima
ExternalDelega en un comando propio

Staggered es el más útil para un servidor: conserva una versión cada 30 segundos durante la primera hora, una por hora durante el primer día, una por día durante 30 días y una por semana hasta la edad máxima. Selecciónalo y fija Maximum Age en 365 días.

Para comprobarlo, modifica prueba.txt en tu equipo y lista las versiones en el servidor:

sudo ls /srv/sync/documentos/.stversions
prueba~20260925-103512.txt

Paso 8: Excluir archivos con .stignore

Los patrones de exclusión se escriben en un archivo .stignore en la raíz de la carpeta compartida. El archivo no se sincroniza, así que cada dispositivo tiene el suyo; lo más cómodo es editarlo desde la interfaz, en Edit > Ignore Patterns, en el dispositivo desde donde se envían los datos. Un ejemplo para una carpeta de trabajo:

// Dependencias y artefactos de compilación
node_modules
.venv
__pycache__
dist
build

// Archivos temporales del sistema, borrables si bloquean un directorio
(?d).DS_Store
(?d)Thumbs.db
*.tmp
*.swp

// Incluir los patrones de otro archivo de la carpeta
#include .stignore-extra

Reglas de la sintaxis:

  • Las líneas que empiezan por // son comentarios.
  • Un patrón sin / inicial coincide en cualquier nivel; con / inicial, solo en la raíz de la carpeta.
  • * coincide dentro de un nivel de ruta y ** en varios.
  • Un patrón precedido de ! es una excepción: incluye lo que un patrón posterior excluiría. Syncthing aplica el primer patrón que coincide, así que las excepciones van antes.
  • (?d) permite a Syncthing borrar esos archivos si impiden eliminar un directorio, y (?i) hace el patrón insensible a mayúsculas.
  • #include añade los patrones de otro archivo; si el archivo no existe, la carpeta queda en error, así que créalo antes o elimina esa línea.

Tras guardar, los archivos que ya se habían sincronizado no se borran del otro dispositivo; simplemente dejan de actualizarse.

Solución de problemas

El dispositivo aparece como Disconnected. Comprueba desde tu equipo que el puerto está accesible con nc -zv your_server_ip 22000 y revisa que la regla de UFW existe. Si la conexión aparece como Relay en lugar de TCP o QUIC, el puerto 22000 no llega al servidor.

La carpeta queda en error con permission denied. La ruta no pertenece al usuario syncthing. Corrígelo con sudo chown -R syncthing:syncthing /srv/sync/documentos.

Aparecen archivos .sync-conflict-.... El mismo archivo se modificó en dos dispositivos antes de sincronizarse. Syncthing conserva ambas versiones: compara el archivo original con la copia en conflicto, quédate con la correcta y borra la otra.

Se pierde el acceso a la interfaz web por olvidar la contraseña. Detén el servicio, edita config.xml en la ruta del paso 2, borra el contenido de los elementos <user> y <password> dentro de <gui> y vuelve a arrancarlo; después define una contraseña nueva desde la interfaz.

Ver los logs del servicio. Usa sudo journalctl -u [email protected] -n 100.

Conclusión

Tienes Syncthing en un servidor Ubuntu 24.04 como servicio de systemd con un usuario dedicado, la interfaz web accesible solo por túnel SSH y con contraseña, una carpeta sincronizada con otro dispositivo, versionado escalonado y patrones de exclusión. Como siguientes pasos, añade más dispositivos a la misma carpeta (cada uno se conecta con todos los demás), incluye /srv/sync en tu sistema de copias de seguridad y considera la carpeta Receive Encrypted si el servidor almacena datos que no debe poder leer.