搭建和配置Syncthing发现和中继服务器

语言: CN / TW / HK

折腾借口

Syncthing好是挺好的,但就是同步不给力,公共网络服务其质量参差不齐,网络也说不清。最好的解决方案还是自己搭建发现服务器Syncthing Discovery Server和中继服务器Syncthing Relay Server,有效解决网络连接差,非局域网连接慢的问题。

需要材料:带公网IP的服务器或动态DNS的主机一台。

参数设置信息官网最全面,参考Welcome to Syncthing’s documentation!,这里只是提少许个人需要的参数,一般使用足够。

搭建发现服务器 Syncthing Discovery Server

下载 stdiscosrv 程序

下载当前主机的发现服务器主程序 stdiscosrv

选择对应版本,服务器基本是stdiscosrv-linux-amd64

下载:

shell wget https://github.com/syncthing/discosrv/releases/download/v1.18.1/stdiscosrv-dragonfly-amd64-v1.18.1.tar.gz

解压:

shell tar -xzvf stdiscosrv-dragonfly-amd64-v1.18.1.tar.gz

准备以及参数

创建证书

程序好像也会自动创建证书,这一步或许可以忽略

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout ~/key.pem -out ~/cert.pem

注意更改目录

参数

官网给出了详细的参数配置 Syncthing Discovery Server,简单说几个我用到的参数。

-cert``=<file>-key``=<file>默认指定运行程序目录下的证书文件,建议将证书拷贝到当前目录下。

-listen``=<address>监听端口,默认8443,改不改无所谓,如果有防火墙记得通过端口。

-debug调试模式,可以查看链接信息

-replication-listen``=<address>我也不太明白这个参数的意义,可能适用于组多服务器

运行

将证书复制到程序所在文件夹,执行即可:

shell ./stdiscosr

如果没有将证书放好位置,直接使用命令应该会自动创建证书,或者将证书复制到当前目录再执行。

shell cp *.pem syncthing/stdiscosrv-linux-amd64-v0.14.51

或者执行:

shell ./stdiscosrv -cert ~/cert.pem -key ~/key.pem 1

注意

记得在防火墙里面放行端口,可以安装ufw,然后放行端口

shell sudo apt install ufw sudo ufw allow 8443

搭建中继服务器 Syncthing Relay Server

搭建好发现服务器后,虽然能找到不同网络的主机了,但是非局域网相互传输的速度还是差强人意。

中继服务器列表:Relay Pool Data,虽有不少国内服务器,但是搭建自己的服务器优势也显而易见。

下载strelaysrv程序

下载当前主机的发现服务器主程序 relaysrv

选择对应版本,服务器基本是strelaysrv-linux-amd64

下载:

shell wget https://github.com/syncthing/relaysrv/releases/download/v1.15.0/strelaysrv-dragonfly-amd64-v1.15.0.tar.gz

解压:

shell tar -xzvf strelaysrv-dragonfly-amd64-v1.15.0.tar.gz

准备以及参数

创建证书

参考之前操作,或直接复制过去就好了。

shell cp *.pem syncthing/strelaysrv-linux-amd64-v0.14.48

参数(必看)

官网给出了详细的参数配置 Syncthing Relay Server,上面提到的不再重复

-global-rate``=<bytes/s>全局限速,bytes作为单位,换算成MB应当乘两个1024,可以去这里换算。

-pools=<pool addresses>非常重要的设置,如果不设置将作为公共服务器发布,他人可以免费使用你的服务器流量,三思!创建私人服务器的方法是添加参数-pools=""

-protocol``=<string>协议

-status-srv``=<listen addr>监听地址,有的服务器需要设置当前公共ip

运行

shell ./strelaysrv -pools="" -global-rate 3145728 -protocol=tcp4

注意

开启防火墙支持,使用ufw或:

shell iptables -I INPUT -p tcp --dport 22067 -j ACCEPT iptables -I INPUT -p tcp --dport 22070 -j ACCEPT

配置客户端

服务器地址配置

运行程序后会生成一个id,将其拷贝下来

发现服务器:

https://ip_address:port/?id=your_id

中继服务器地址:

relay://ip_address:port/?id=your_id

客户端中替换时,如果可以用逗号和default分开,这样就能同时使用多个地址。

监听地址

参考官方文档:Listen Addresses

syncthing的地址可以理解成三类:动态中继池,静态中继地址,TCP端口。

  1. 从网上获取中继池获取终极服务器
  2. 自定义一个服务器地址
  3. 本地端口监听,用于局域网连接

中继服务器配置

如果像我一样只只是同步自己的服务,就可以简单设置为:

tcp4://0.0.0.0:22000,relay://ip_address:22067?id=abcd123...

指定tcp4即ipv4的原因是因为我有ipv6网络,但是国内v6覆盖不全,不如简简单单局域网用tcp,远程就用自己的中继服务器,避免其它的低速远程服务器。

发现服务器配置

default, https://ip_address:8443/?id=abcd123...

这里添加default的原为了接入一些网络的共享库,如果不需要去掉即可。

结语

Syncthing目前不支持占位符操作还是挺可惜的,但是设置了自定义的中继服务器和发现服务器之后,可靠性将大大提升,今后可以作为一个常用的软件了,更方便得同步各个设备之间的文件,免去很多折腾的时间。