作者:E4b9a6, 创建:2020-10-25, 字数:5804, 已阅:331, 最后更新:2020-10-25
Syncthing是一个开源的文件同步工具,用于在多个设备之间同步和共享文件和文件夹,它可以在不同的操作系统上运行,包括Windows、MacOS、Linux和Android
Syncthing不依赖于中转服务器,即不需要使用任何服务器也可以完成文件同步,使用Syncthing可以让两台处于完全不同网络的PC完成文件同步
虽不依赖中转,但为了实现文件同步,还是需要有一个全球发现服务器来完成所有设备登记的
由于文件同步是点对点的,所以syncthing
是非常安全的文件同步技术,除此之外还有以下优点
以下实践基于Ubuntu2204 LTS
,其他发行版大同小异
syncthing
客户端安装非常简单,我们从官网下载页面下载合适的安装包
假设我们将syncthing存放到/apps/syncthing
下
wget https://github.com/syncthing/syncthing/releases/download/v1.23.6/syncthing-linux-amd64-v1.23.6.tar.gz
tar -zxvf syncthing-linux-amd64-v1.23.6.tar.gz
运行程序后,在当前目录下会产生一个.config文件夹,里面是syncthing的自签证书、配置文件等,保管好这个文件夹即可迁移syncthing
进入解压后的目录,运行程序
# HOME目录的路径会决定
export HOME="/apps/syncthing/syncthing-linux-amd64-v1.23.6"
./syncthing
访问http://localhost:8384
,既可管理配置syncthing
编辑/etc/supervisor/conf.d/syncthing.conf
,将其写成supervisor的daemon
服务
[program:syncthing]
# 根据你的路径自定,注意.config
directory=apps/syncthing/syncthing-linux-amd64-v1.23.0
command=/apps/syncthing/syncthing-linux-amd64-v1.23.0/syncthing
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=10MB
stdout_capture_maxbytes=1MB
user=app
environment=HOME="/apps/syncthing/syncthing-linux-amd64-v1.23.0"
中心服务器只提供给双方设备的连接地址,普通的内网也可以使用,速度快,不依赖于服务端的性能,让设备直接互连
根据服务端系统选择软件版本下载 discosrv-server
下载完成之后,解压下载的tar.gz文件夹,并需要注意在防火墙开放8443
和19200
端口
sudo firewall-cmd --add-port=8443/tcp --zone=public --permanent
sudo firewall-cmd --add-port=19200/tcp --zone=public --permanent
运行服务端程序,参数请根据需要自行添加
./stdiscosrv -debug -listen ":8443" -replication-listen ":19200" -db-dir "./discovery.db" -cert "./certpem"
编辑/etc/supervisor/conf.d/syncthing-stdiscosrv.conf
,将其写成supervisor的daemon
服务
[program:syncthing-stdiscosrv]
# 根据你的路径自定,注意.config
directory=apps/syncthing-stdiscosrv
command=/apps/syncthing-stdiscosrv/./stdiscosrv -debug -listen ":8443" -replication-listen ":19200" -db-dir "./discovery.db" -cert "./certpem"
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=10MB
stdout_capture_maxbytes=1MB
user=app
中心服务器只负责发现设备,提供设备的地址,但不保障设备之间一定能够互连,所以当设备无法互联时,往往就需要一个中转服务器
也可以给syncthing客户端添加代理,用于互连,可参考 Syncthing - 通过配置全局环境变量来实现代理功能
中继服务器可以代为中转文件,所以消耗带宽是难免的,如设备无法直连的话,则同步速度取决于中继服务器的网络瓶颈
根据服务端系统选择软件版本下载 relay-server
下载完成之后,解压下载的tar.gz文件夹,并在防火墙开放22067
和22070
2个端口
sudo firewall-cmd --add-port=22067/tcp --zone=public --permanent
sudo firewall-cmd --add-port=22070/tcp --zone=public --permanent
接着运行运行服务端程序,pools
参数表示不加入全球公共池
./relaysrv -pools ""
全球公共池列表:https://relays.syncthing.net/ , 如果不设置pools
参数则会出现在这个列表中,全球的所有syncthing
客户端在无法直连的时候都会通过你的服务器来中转文件,请注意这会消耗非常大的流量
如果服务器有多余的带宽资源,可以考虑开放给所有syncthing用户帮助他们改善软件体验!
下面是relaysrv的运行参数参考
使用 ./strelaysrv 的参数说明:
-debug
启用调试输出
-ext-address string
可选的广告地址 允许在非特权端口上监听,并通过端口转发(如443)进行连接 -global-rate int
全局速率限制,以字节/秒为单位
-keys string
存储 cert.pem 和 key.pem 的目录(默认为当前目录)
-listen string
协议监听地址(默认为 ":22067")
-message-timeout duration
等待相关消息到达的最长时间(默认为 1m0s)
-nat
使用 UPnP/NAT-PMP 获取外部端口映射
-nat-lease int
NAT 租约长度(以分钟为单位)(默认为 60)
-nat-renewal int
NAT 更新频率(以分钟为单位)(默认为 30)
-nat-timeout int
NAT 发现超时时间(以秒为单位)(默认为 10)
-network-buffer int
网络缓冲区大小(每个代理连接两个)(默认为 65536)
-network-timeout duration
客户端和中继之间网络操作的超时时间 如果在此时间段内未收到客户端和中继之间的数据,则终止连接 此外,如果在此时间段内未发送任何数据,则终止中继的两个客户端之间的会话,(默认为 2m0s)
-per-session-rate int
每个会话的速率限制,以字节/秒为单位
-ping-interval duration
发送 ping 的频率(默认为 1m0s)
-pools string
要加入的中继池地址的逗号分隔列表(默认为 "https://relays.syncthing.net/endpoint")
-pprof
在状态服务器上启用内置的性能分析
-protocol string
用于监听的协议,'tcp' 表示 IPv4 和 IPv6,'tcp4' 表示 IPv4,'tcp6' 表示 IPv6(默认为 "tcp")
-provided-by string
关于提供中继的可选描述
-status-srv string
状态服务的监听地址(留空以禁用)(默认为 ":22070")
-token string
限制对中继的访问的令牌(可选),禁用加入任何中继池 -version
显示版本信息
编辑/etc/supervisor/conf.d/syncthing-relaysrv.conf
,将其写成supervisor的daemon
服务
[program:syncthing-relaysrv]
# 根据你的路径自定,注意.config
directory=apps/syncthing-relaysrv
command=/apps/syncthing-relaysrv/relaysrv -debug -pools "" -listen ":22067" -keys "" -message-timeout "1m0s" -network-timeout "2m0s" -ping-interval "1m0s" -protocol "tcp4" -provided-by "TYFS" -status-srv ":22070"
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=10MB
stdout_capture_maxbytes=1MB
user=app
运行成功之后会有类似如下输出,请复制这个地址,将0.0.0.0换成服务器对应的ip
relay://0.0.0.0:22067/?id=4ZVSHHI-ZSJID5Y-CKSUQAV-6KATUHA-HJN6WMQ-TU2KEUJ-H5RYSNN-NREXNA7
打开syncthing
客户端,依次打开右上角的Actions
-Connections
,在Sync Protocol Listen Addresses
中填入刚才复制的地址保存即可
Sync Protocol Listen Addresses
的值如下
default, relay://[your_server_ip]:22067/?id=4ZVSHHI-ZSJID5Y-CKSUQAV-6KATUHA-HJN6WMQ-TU2KEUJ-H5RYSNN-NREXNA7
将这一串复制到syncthing客户端的配置中的即可启用该中继服务器
官方文档