When global discovery is enabled, Syncthing sends an announcement
every 30 minutes to the global discovery servers so that they can keep a
mapping between your device ID and external IP. The announcement contain the
device ID and listening port(s). Also, when connecting to other devices that
have not been seen on the local network, a query is sent to the global
discovery servers containing the device ID of the requested device. The
connection to the discovery server is encrypted using TLS and the discovery
server certificate is verified, so the contents of the query should be
considered private between the device and the discovery server. The
discovery servers are currently hosted by @calmh
<https://github.com/calmh>. Global discovery defaults to
on.
When turned off, devices with dynamic addresses not on the local
network cannot be found and connected to.
An eavesdropper on the Internet can deduce which machines are
running Syncthing with global discovery enabled, and what their device IDs
are.
The operator of the discovery server can map arbitrary device
addresses to IP addresses, and deduce which devices are connected to each
other.
If a different global discovery server is configured, no data is
sent to the default global discovery servers.
When local discovery is enabled, Syncthing sends broadcast (IPv4)
and multicast (IPv6) packets to the local network every 30 seconds. The
packets contain the device ID and listening port. Local discovery defaults
to on.
An eavesdropper on the local network can deduce which machines are
running Syncthing with local discovery enabled, and what their device IDs
are.
When turned off, devices with dynamic addresses on the local
network cannot be found and connected to.
When automatic upgrades are enabled, Syncthing checks for a new
version at startup and then once every twelve hours. This is by an HTTPS
request to the download site for releases, currently hosted by @calmh
<https://github.com/calmh>. Automatic upgrades default to
on (unless Syncthing was compiled with upgrades disabled).
Even when automatic upgrades are disabled in the configuration, an
upgrade check as above is done when the GUI is loaded, in order to show the
“Upgrade to …” button when necessary. This can be
disabled only by compiling Syncthing with upgrades disabled.
The actual download, should an upgrade be available, is done from
GitHub, thus exposing the user to them.
The upgrade check (or download) requests do not contain any
identifiable information about the user or device.
When usage reporting is enabled, Syncthing reports usage data at
startup and then every 24 hours. The report is sent as an HTTPS POST to the
usage reporting server, currently hosted by @calmh
<https://github.com/calmh>. The contents of the usage report
can be seen behind the “Preview” link in settings. Usage
reporting defaults to off but the GUI will ask once about enabling
it, shortly after the first install.
The reported data is protected from eavesdroppers, but the
connection to the usage reporting server itself may expose the client as
running Syncthing.
Sync connections are attempted to all configured devices, when the
address is possible to resolve. The sync connection is based on TLS 1.2 or
TLS 1.3. The TLS certificates can be obtained by an eavesdropper, although
it is more difficult to do so in TLS 1.3. This means that the contents of
the certificate are visible, which includes certificate Common Name (by
default syncthing).
An eavesdropper can deduce that this is a Syncthing connection and
under certain circumstances calculate the device IDs involved based on the
hashes of the sent certificates.
Likewise, if the sync port (default 22000) is accessible from the
internet, a port scanner may discover it, attempt a TLS negotiation and thus
obtain the device certificate. This provides the same information as in the
eavesdropper case.
When relaying is enabled, Syncthing will look up the pool of
public relays and establish a connection to one of them (the best, based on
an internal heuristic). The selected relay server will learn the connecting
device’s device ID. Relay servers can be run by anyone in the
general public. Relaying defaults to on. Syncthing can be
configured to disable relaying, or only use specific relays.
If a relay connections is required between two devices, the relay
will learn the other device’s device ID as well.
Any data exchanged between the two devices is encrypted as usual
and not subject to inspection by the relay.
If the web GUI is accessible, it exposes the device as running
Syncthing. The web GUI defaults to being reachable from the local host
only.