Skip to main content

Syncthing

开源的全平台支持的 P2P 同步工具

Golang 实现

Web UI 默认端口 8384

服务器部署需要修改 ExecStart=/usr/bin/syncthing serve --no-browser --gui-address=0.0.0.0:8384 --no-restart --logflags=0 才能公网访问

If your PC has a local firewall, you will need to open the following ports for incoming and outgoing traffic:

  • Port 22000/TCP: TCP based sync protocol traffic
  • Port 22000/UDP: QUIC based sync protocol traffic
  • Port 21027/UDP: for discovery broadcasts on IPv4 and multicasts on IPv6

【使用手册】之–自建 Syncthing 发现服务器和中继服务器

#系统 #Windows #教程 #工具 #手册 #Docker #Linux #Docker-compose

Syncthing 实现方法,首先通过发现服务器 (Discosrv)发现和索引用户,当用户设备接入发现服务器后,服务器会进行设备的连接通告,当设备之间同意连接后进行连接;两台设备建立连接后,数据需要通过 NAT 穿透的方式实现交换,如果 NAT 穿透不成功,就需要中继 (Relaysrv)服务器传输数据。Syncthing 官方的发现服务器 (Global Discovery)及社区贡献的中继服务器多集中在欧洲国内较少,使用 Syncthing 时经常会出现连接慢、时常断开、速度不稳定等问题。本篇利用一台国内的闲置服务器提供发现和中继服务加快同步效率,也可以解决隐私问题。

Syncthing 社区 Relay 服务器池位置: https://relays.syncthing.net/

同步程序 syncthing: https://github.com/syncthing/syncthing

发现服务器 stdiscosrv: https://github.com/syncthing/discosrv

中继服务器 strelaysrv: https://github.com/syncthing/relaysrv

文档: https://docs.syncthing.net/index.html

1. Windwos Server 安装发现和中继服务

1.1. 发现服务

https://github.com/syncthing/discosrv/releases 找到 windows 版本,下载解压后打开 cmd 运行:stdiscosrv.exe -debug 启动 stdiscosrv 服务,默认端口 8443 可以通过 -listen ":8443" 指定监听端口,其他参数参看 -help。程序启动后,记下生成的 Server device ID,后面添加发现服务时会用到。同时,在程序文件夹下自动生成同步发现服务器数据库 discovery.db 和服务器证书 cert. pem、key.pem 证书不变,重装后 Server device ID 不变。

# /etc/systemd/system/strelaysrv.service
[Unit]
Description=Syncthing Discovery Server
After=network.target

[Service]
ExecStart=/usr/bin/stdiscosrv --cert /etc/syncthing/cert.pem --key /etc/syncthing/key.pem
Restart=on-failure
User=syncthing
Group=syncthing
AmbientCapabilities=CAP_NET_BIND_SERVICE
LimitNOFILE=65536
WorkingDirectory=/var/lib/syncthing

[Install]
WantedBy=multi-user.target

1.2. 中继服务

https://github.com/syncthing/relaysrv 找到 windows 版本,下载解压后打开 cmd 运行:strelaysrv.exe -debug -pools="" -protocol=tcp4 启动 strelaysrv 服务,默认端口 22067(连接端口)、22070(服务器状态端口),可以通过 -listen ":22067" 指定连接端口,-pools="" 不公开此服务器(默认会加入 Syncthing 官方 Relay 服务器池中共享中继服务器,会消耗大量流量,建议有流量上限的服务器不公开),-protocol=tcp4 只启用 TPv4 协议,其他参数参看 -help。程序启动后,记下生成的 URI,后面添加中继服务时会用到,同时,在程序文件夹下自动生成服务器证书。

注意:服务器防火墙放行端口8443,22067。

#  /etc/systemd/system/discosrv.service
[Unit]
Description=Syncthing Relay Server
After=network.target

[Service]
ExecStart=/usr/bin/strelaysrv -pools="" -provided-by="Your Organization"
Restart=on-failure
User=syncthing
Group=syncthing
AmbientCapabilities=CAP_NET_BIND_SERVICE
LimitNOFILE=65536
WorkingDirectory=/var/lib/syncthing

[Install]
WantedBy=multi-user.target

sudo mkdir -p /etc/syncthing
sudo mkdir -p /var/lib/syncthing
sudo chown syncthing:syncthing /etc/syncthing
sudo chmod 700 /etc/syncthing
sudo chown syncthing:syncthing /var/lib/syncthing

openssl req -x509 -newkey rsa:2048 -sha256 -nodes \
-keyout /etc/syncthing/key.pem \
-out /etc/syncthing/cert.pem \
-days 3650 \
-subj "/CN=stdiscosrv"

2. Linux 使用 Docker 方式部署发现和中继服务

推荐使用 docker-compose 方式部署,yaml 文件如下:

获取发现服务的 Server device ID 和中继服务的 URI

注意:服务器防火墙放行端口8443,22067。

3. Syncthing 中配置发现和中继服务器

打开 Syncthing 操作 -> 设置 -> 连接

如果希望保留 Syncthing 官方发现服务器和社区中继服务器,可以在地址前加上 default, 如:

# 协议监听地址,中继服务URI
relay://公网IP:22067?id=中继服务器device ID

# 全局发现服务器
https://公网IP:8443/?id=发现服务器device ID