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
Notael canal
stable-v2corresponde a Syncthing 2.x. El canalstablese mantiene en la serie 1.x. Todos los dispositivos que sincronizas deberían usar la misma versión mayor.
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:
- Abre Actions > Settings > GUI.
- Rellena GUI Authentication User y GUI Authentication Password con un usuario y una contraseña robusta.
- 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):
- Pulsa Add Remote Device.
- Pega el ID del servidor en Device ID y ponle un nombre, por ejemplo
servidor. - En la pestaña Advanced, sustituye
dynamicen Addresses portcp://your_server_ip:22000. Así tu equipo se conecta directamente al servidor sin depender del descubrimiento global. - 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:
- General: pon una etiqueta como
Documentosy elige la ruta local. El Folder ID se genera solo; debe ser el mismo en todos los dispositivos que compartan esta carpeta. - Sharing: marca el dispositivo
servidor. - 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:
| Tipo | Comportamiento |
|---|---|
| Send & Receive | Sincronización bidireccional, el valor por defecto |
| Send Only | Envía cambios pero ignora los que llegan de otros dispositivos |
| Receive Only | Recibe cambios; las modificaciones locales no se envían |
| Receive Encrypted | Guarda 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.
| Tipo | Qué conserva |
|---|---|
| Trash Can | La última versión de cada archivo borrado o sustituido, durante los días que indiques |
| Simple | Un número fijo de versiones por archivo |
| Staggered | Más versiones recientes y menos antiguas, hasta una edad máxima |
| External | Delega 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
Notael versionado protege contra errores y borrados accidentales, pero no sustituye a una copia de seguridad. Un ransomware en tu equipo cifraría los archivos y Syncthing enviaría las versiones cifradas; el versionado del servidor conservaría las anteriores solo durante la edad máxima configurada.
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.#includeañ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.
