Skip to main content

🌍 Syncthing Relay Server

📌 Überblick

relaysrv ist ein Relay-Server für Syncthing. Er dient als Vermittler, wenn sich zwei Syncthing-Geräte nicht direkt verbinden können, zum Beispiel wegen NAT, Firewall oder restriktiver Netzwerke.

🎯 Zweck

Ein Relay-Server ermöglicht trotzdem eine Verbindung zwischen Geräten, indem der Datenverkehr über den Relay geleitet wird. Die Daten bleiben dabei Ende-zu-Ende verschlüsselt.

🌍 Öffentlicher Nutzen

  • Ein gestarteter relaysrv tritt standardmässig dem öffentlichen Syncthing-Relay-Pool bei
  • Dadurch steht er allen Syncthing-Nutzern weltweit zur Verfügung
  • Mehr öffentliche Relays verbessern die Erreichbarkeit und Zuverlässigkeit des gesamten Syncthing-Netzwerks

🔒 Privater Einsatz

  • Ein Relay kann auch nur für eigene Geräte betrieben werden
  • Typisch für Firmen, Heimserver oder spezielle Netzwerksituationen

⚙️ Technische Eckpunkte

  • Standard-Relay-Port: 22067
  • Optionaler Status-Port (Web): 22070
  • Kann über CLI-Optionen mit Rate-Limits, Tokens (z.B. provided-by) und expliziten Bind-Adressen konfiguriert werden
  • Läuft als eigenständiger Dienst

🧩 Kurzfassung

Das Betreiben eines relaysrv wird empfohlen, wenn:

  • direkte Verbindungen oft scheitern
  • du deine eigenen Syncthing-Verbindungen stabilisieren willst
  • du der Syncthing-Community helfen möchtest

Ein öffentlicher Relay-Server ist ein Beitrag zur Allgemeinheit, ohne die Sicherheit der Daten zu beeinträchtigen.


🐳 Relay-Server selbst betreiben: Docker (optional)

relaysrv kann alternativ zum nativen Betrieb auch containerisiert mit Docker ausgeführt werden. Die Funktionalität entspricht dem nativen Betrieb; persistente Daten (z.B. Schlüssel und Server-ID) liegen im Container unter /var/strelaysrv.

Beispiel für ein Portainer Stack:
Name z.B. syncthing-relay

# Quelle: https://hub.docker.com/r/syncthing/relaysrv
services:
  syncthing-relay:
    # Hinweis: ich nutze nur feste Image-Tags, um unerwartete Änderungen zu vermeiden
    # image: syncthing/relaysrv:latest
    image: syncthing/relaysrv:2.0.12
    container_name: syncthing-relay
    restart: unless-stopped
    ports:
      - "22067:22067/tcp" # Relay
      - "22070:22070/tcp" # Status (optional)
    volumes:
      - syncthing-relay-data:/var/strelaysrv

    # für eine private Nutzung (nicht im öffentlichen Pool), aktiviere die Zeile: - "-pools="
    # Bandbreitenbegrenzung
    command:
      # "-pools="
      # - "-provided-by=DEIN-NAME"
      - "-global-rate=10485760"      # 10 MB/s gesamt (0 = unbegrenzt)
      - "-per-session-rate=1048576"  # 1 MB/s pro Session (0 = unbegrenzt)

volumes:
  syncthing-relay-data:

Im Stack ist ein Volume definiert und gemountet, dadurch bleiben diese Daten über Container-Neustarts und Updates erhalten.
Für strelaysrv sind nur diese Ports relevant und müssen ggf. in der Firewall erreichbar sein:

22067/tcp Relay-Port, muss von außen erreichbar sein
22070/tcp /status HTTP-Endpunkt (optional)

UFW-Beispiel

Status und aktive Regeln anzeigen:

sudo ufw status verbose

Ports freigeben:

sudo ufw allow 22067/tcp
sudo ufw allow 22070/tcp

Hinweis:
Der private Relay muss auf jedem Syncthing-Client manuell eingetragen werden. strelaysrv gibt beim Start im Log eine Relay-URI mit Platzhalter-Adresse (0.0.0.0) aus; diese ist durch die öffentliche IP oder einen DNS-Namen zu ersetzen (Port 22067).


💡 Tipps

1) Container-Status prüfen

docker ps

2) Logs prüfen (Relay-URI, ID, Pool-Status)

docker logs syncthing-relay

3) Prüfen, ob der Relay-Port lokal lauscht

ss -ltnp | grep 22067

alternativ

netstat -ltnp | grep 22067

4) Erreichbarkeit von außen testen (von einem anderen Host)

nc -vz <öffentliche-IP-oder-DNS> 22067

5) Optional: Status-Endpunkt prüfen

curl http://<öffentliche-IP-oder-DNS>:22070/status

6) Persistente Daten (Docker Volume) prüfen

docker volume inspect syncthing-relay_syncthing-relay-data | grep Mountpoint
sudo ls -la /var/lib/docker/volumes/syncthing-relay_syncthing-relay-data/_data

Quellen: