当前位置:首页 > 其他 > 正文内容

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

23vps2年前 (2022-11-03)其他2346

折腾借口

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

阿里云限量代金券 | 此广告位出租25元/月

不同于Resilio Sync(BT Sync)使用BT协议进行数据传输,Syncthing使用了BEP对等自由块交换协议(Block Exchange Protocol),这两个倒是没啥优劣的问题,主要是BT Sync在老版本的时候支持DHT,而后来删掉了,这也是导致它的官方服务器在被干扰之后几乎完全无法使用的原因之一,所以当初有人说老版本(支持DHT)的依旧能够使用。而Syncthing不一样的是它没有使用DHT,但是也没有像BT Sync一样只有官方服务器(通告+中继服务器),由于开源,所以Syncthing的服务器都是可以自己部署的,这也就是说,即使官方的服务器出了问题,也能够随时有服务器去代替它。

那么为什么要有这两种服务器呢? 这主要是因为P2P的原理,通告(Announcement)/发现(Discovery)服务器用于发现和索引用户,就和你BT的Tracker(这个其实也是通告服务器)一样,你接入了就等于在里面挂了名,然后服务器会把其他人告诉你,这样你们才能够连上。这个是公网IP的情况,如果没有公网IP呢?这就要轮到中继(Relay)服务器出手了,要么是辅助实现打洞,要么是转为C/S模式。总之,中继服务器就是为了在特殊网络环境下(但是在国内很多家庭宽带就是这样的)的正常使用而存在的。

发现服务器:用于发现互联网上的同伴

中继服务器:当双方无法直接建立数据连接时,才会利用中继服务器进行数据连接,若用中继服务器进行连接,则流量会流过服务器


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

参数设置信息官网最全面,参考https://docs.syncthing.net/ ,这里只是提少许个人需要的参数,一般使用足够。


搭建发现服务器 Syncthing Discovery Server

下载 stdiscosrv 程序

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

https://github.com/syncthing/discosrv/releases

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

下载:

wget https://github.com/syncthing/discosrv/releases/download/v1.18.6/stdiscosrv-linux-amd64-v1.18.6.tar.gz

解压:

tar -zxvf  stdiscosrv-linux-amd64-v1.18.6.tar.gz
cd stdiscosrv-linux-amd64-v1.18.6

参数

官网给出了详细的参数配置https://docs.syncthing.net/users/stdiscosrv.html#syncthing-discovery-server,简单说几个我用到的参数。

-cert=<file>和-key=<file>默认指定运行程序目录下的证书文件,建议将证书拷贝到当前目录下。
-listen=<address>监听端口,默认8443,改不改无所谓,如果有防火墙记得通过端口。
-debug调试模式,可以查看链接信息
-replication-listen=<address>我也不太明白这个参数的意义,可能适用于组多服务器

运行

./stdiscosrv

会在当前目录生成自签名的证书和数据库,如果在后面的systemctl注册成服务后status信息提示报错:Failed to load keypair. Generating one, this might take a while.的话可以用自签证书

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

复制发现服务器id信息,等下配置客户端时有用(我发现注册服务后的ID和运行调试时生成的ID是不同的)

注意

防火墙开放8443端口



搭建中继服务器 Syncthing Relay Server

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

中继服务器列表:https://relays.syncthing.net/,虽有不少国内服务器,但是搭建自己的服务器优势也显而易见。

下载strelaysrv程序

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

https://github.com/syncthing/relaysrv/releases

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

下载:

wget https://github.com/syncthing/relaysrv/releases/download/v1.22.1/strelaysrv-linux-amd64-v1.22.1.tar.gz

解压:

tar -zxvf  strelaysrv-linux-amd64-v1.22.1.tar.gz
cd strelaysrv-linux-amd64-v1.22.1

参数(必看)

官网给出了详细的参数配置https://docs.syncthing.net/users/strelaysrv.html#description,上面提到的不再重复

-debug 启用调试输出
-ext-address=<address> 可选的外部地址(将被上报),能够通过端口转发来监听高权限端口(0-1024)然后外部可以连接这个端口
-global-rate=<bytes/s> 全局限速,bytes作为单位,换算成MB应当乘两个1024,可以去:https://www.bejson.com/convert/filesize/换算(主机哥设置成了3MB/s)。
-keys=<dir> 用于存储 cert.pem 和 key.pem 的目录,默认是 "."(当前目录)
-listen=<listen addr> 协议监听的地址,默认是 ":22067"
-message-timeout=<duration> 等待消息到达的最大时间(默认 1m0s)
-nat 使用UPnP/NAT-PMP来取得外部端口映射
-nat-lease=<duration> NAT租赁时间,单位分钟(默认 60)
-nat-renewal=<duration> NAT刷新频率,单位分钟(默认 30)
-nat-timeout=<duration> NAT发现超时,单位秒(默认 10)
-network-timeout=<duration> 客户端和中继之间网络操作的超时,如果在这个时间段内客户端和中继之间没有数据被接收到,那么连接将被终止。此外,如果在这段时间内任何被中继的客户端没有数据发送,这个会话也会被终止(默认 2m0s)
-per-session-rate=<bytes/s> 每个会话的限速,单位 bytes/s
-ping-interval=<duration> ping的发送间隔(默认 1m0s)
-pools=<pool addresses> 中继服务器池的地址,使用逗号分隔多个(默认 "http://relays.syncthing.net/endpoint")。**非常重要的参数设置**,如果不设置将作为公共服务器发布,他人可以免费使用你的服务器流量,三思。创建私人服务器的方法是引号内留空(-pools="")来禁止公布这个服务器到池中,以便作为私有中继。
-protocol=<string> 监听协议,"tcp"来监听IPv4和IPv6,"tcp4"来监听IPv4,"tcp6"来监听IPv6(默认 "tcp")
-provided-by=<string> 一个可选的描述字段来表示谁提供了这个中继(可以打打广告啥的)
-status-srv=<listen addr> 监听地址,提供状态服务的监听地址(默认 ":22070"),用于中继服务器池页面来展示服务器状态(传输了多少数据,有多少客户端在线等等),留空(-status-srv="")来禁用这个功能有的服务器需要设置当前公共ip

比较重要的是-pools(是否作为公开服务器),以及限速设置啥的,这个看你需要设置,如果公开请务必确保流量足够,另外公开也可以用-provided-by打个网站的小广告

运行

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

会在当前目录生成自签名的证书

复制中继服务器id信息,等下配置客户端时有用(我发现注册服务后的ID和运行调试时生成的ID是不同的)

注意

防火墙开放22067、22070端口(数据端口: 22067/tcp 能被 -listen 覆盖指定,并且会被 -ext-address 上报,状态端口: 22070/tcp 能被 -status-srv 覆盖指定,就是上报数据到中继池用的比如传输了多少输入多少用户在线)

有些人说可以放到/user/local/bin目录下运行

mv strelaysrv /usr/local/bin/relaysrv

我没去试过,感兴趣的可以去试一下,可能也适用于发现节点


配置客户端

服务器地址配置

运行程序后会生成一个id,将其拷贝下来的id放到下面地址=后面替换your_id

发现服务器地址:

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

中继服务器地址:

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

如果需要添加多个发现服务器或中继服务器时,可以用逗号分开,这样就能同时使用多个发现服务器和中继服务器地址。

监听地址

参考官方文档:https://docs.syncthing.net/users/config.html#listen-addresses

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

1、从网上获取中继池获取中继服务器

2、自定义一个服务器地址

3、本地端口监听,用于局域网连接


在syncthing客户端添加中继服务器配置(就是下图中的协议监听地址位置)

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

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

如果你没有ipv6网络,推荐写成

default,relay://ip_address:22067/?id=abcd123...

default等价于tcp://0.0.0.0:22000, quic://0.0.0.0:22000 和dynamic+https://relays.syncthing.net/endpoint同样也是利用Syncthing项目的发现服务

的中继服务(QUIC 全称:Quick UDP Internet Connections,基于 UDP 的传输层协议)

在syncthing客户端添加发现服务器配置

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

这里添加default的原因是为了接入一些网络的共享库,如果不需要去掉即可。default等价于https://discovery-v4.syncthing.net/v2/, https://discovery-v6.syncthing.net/v2/ 和https://discovery.syncthing.net/v2/,也就是利用Syncthing项目的发现服务

具体客户端设置的位置是操作--设置--连接

通过侦听程序和设备发现的数量,可以判断客户端是否成功连接上了自建服务

注意

添加多个发现服务器或者多个中继服务器可以用","分隔,例如:

#多个中继服务器
tcp4://0.0.0.0:22000,relay://ip_address:22067/?id=abcd123...,relay://ip_address:22067/?id=abcd123...
#多个发现服务器
default,https://ip_address:8443/?id=abcd123...,https://ip_address:8443/?id=abcd123...


有些人会问中继和发现节点可以自定义id吗,因为主机商数据丢失,所以重新安装后id会变,我不想所有syncthing客户端都重新配置一遍,重新搭建发现和中继服务器想用回原来的id?

备份发现服务器和中继服务器生成的这两个证书文件:cert.pem  key.pem

备份发现服务器里的数据库文件:discovery.db

然后在新系统里的发现和中继服务器目录里分别上传这些证书和数据库文件后,再运行发现服务器和中继服务器后我们发现ID是和原来一样的。

这个方法不行,别试了,我试过了,还是老老实实去syncthing客户端替换ID吧


关于发现服务器的https证书来源:

为了安全起见,发现服务器是利用https来提供服务的。官网提到了三种证书的选择:

第一种就是用CA机构发布的证书

第二种就是自建发现服务器在建好后根据device ID自动生成的证书(推荐)PS:前面提到的自签证书也可以

第三种就是利用反向代理

前两种证书,对应的发现服务器地址,需要传递device ID,而第三种无需传递device ID


linux环境下的开机启动官方提供了两种方法:Supervisord和systemd

所有系统开机自动启动官方文档:https://docs.syncthing.net/users/autostart.html

主机哥的linux vps采用systemd的方式(实测debian10和centos7有效)

由于发现服务器和中继服务器的二进制程序包里并没有包含systemd配置示例文件,我们可以去syncthing客户端的二进制程序包里(https://github.com/syncthing/syncthing/releases/download/v1.22.0/syncthing-linux-amd64-v1.22.0.tar.gz)找

找到解压目录etc/linux-systemd/system/syncthing@.service这个文件,并复制两份分别为发现服务器systemd启动配置文件stdiscosrv@root.service,中继服务器systemd启动配置文件strelaysrv@root.service,root是你希望使用的用户

wget https://github.com/syncthing/syncthing/releases/download/v1.22.1/syncthing-linux-amd64-v1.22.1.tar.gz
tar zxvf syncthing-linux-amd64-v1.22.1.tar.gz
cd syncthing-linux-amd64-v1.22.1/etc/linux-systemd/system
cp syncthing@.service stdiscosrv@root.service
cp syncthing@.service strelaysrv@root.service

将这两个systemd启动配置文件里的ExecStart这行路径修改成实际路径和运行命令

编辑发现服务器systemd配置文件
vi stdiscosrv@root.service   #centos
nano stdiscosrv@root.service  #debian
编辑中继服务器systemd配置文件
vi strelaysrv@root.service   #centos
nano strelaysrv@root.service  #debian

将ExecStart这行的路径分别修改

发现服务器ExecStart路径:/root/stdiscosrv-linux-amd64-v1.18.6/stdiscosrv

中继服务器ExecStart路径:/root/strelaysrv-linux-amd64-v1.22.1/strelaysrv -pools="" -global-rate 3145728 -protocol=tcp4

复制文件到/etc/systemd/system/中

cp stdiscosrv@root.service /etc/systemd/system
cp strelaysrv@root.service /etc/systemd/system

重新加载配置文件

systemctl daemon-reload

管理命令

发现服务器管理命令
#设置开机启动
systemctl enable stdiscosrv@root.service
#取消开机启动
systemctl disable stdiscosrv@root.service
#启动服务
systemctl start stdiscosrv@root.service
#停止服务
systemctl stop stdiscosrv@root.service
#查看状态
systemctl status stdiscosrv@root.service

中继服务器管理命令
#设置开机启动
systemctl enable strelaysrv@root.service
#取消开机启动
systemctl disable strelaysrv@root.service
#启动服务
systemctl start strelaysrv@root.service
#停止服务
systemctl stop strelaysrv@root.service
#查看状态
systemctl status strelaysrv@root.service


注意

使用systemd来运行发现服务器和中继服务器后可能会导致id发生变化,可以用这两个命令重新查看systemd运行后的id

systemctl status stdiscosrv@root.service -l  查看发现服务器id
systemctl status strelaysrv@root.service -l  查看中继服务器id

若显示信息不全可以用光标→来显示全部信息


结语

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

原文:https://www.cnblogs.com/liangqihui/p/10347715.html 

本网站由提供服务

扫描二维码推送至手机访问。

版权声明:本文由主机测评网发布,如需转载请注明出处。

本文链接:https://23vps.com/post/57.html

标签: 文件同步
分享给朋友:

“搭建Syncthing发现和中继服务器和配置Syncthing客户端” 的相关文章

MobaXterm配置SSHTunnel

MobaXterm配置SSHTunnel

MobaXterm作为一款良心的SSH工具,它支持SSHTunnel隧道功能,网上的教程讲的并不详细,所以主机哥写个教程:由于主机哥买了台NAT服务器,由于NAT服务器只有SSH端口没有其他公网端口,安装宝塔后要访问8888端口进行面板设置才能用,这时候SSHTunnel就可以用上了点击Tunnel...

syncthing文件同步软件

syncthing文件同步软件

这是一款可以满足办公、文件共享、团队协作、家庭存储等文件同步需求的开源软件,不依赖中心服务器,完全由自己掌握数据,安全可靠。Syncthing是免费且开源的,而且跨平台支持windows、mac、linux、android等主流平台,除了PC、手机以外,在部分路由器、树莓派等硬件上都能轻松运行,听说...

魔方财务迁移教程

魔方财务迁移教程

主机哥的魔方财务需要迁移到新的服务器压缩打包所有网站文件备份下载数据库文件在新服务器上安装宝塔添加网站设置伪静态location / { if (!-e $request_filename) { rewrite ^(.*)$ ...

解决宝塔环境装不上的问题

解决宝塔环境装不上的问题

主机哥最近安装宝塔面板总是出现各种报错,不是装面板时报错就是lnmp环境报错,折腾了好几天终于整出一套教程,100%解决宝塔环境装不上问题。首先确保你的网络连接稳定,特别时wifi网络下安装宝lnmp塔环境时会长时间卡住不动最后出现各种问题,最好用电脑有线网络连接,确保安装过程全程网络稳定,主机哥就...

Nginx打开目录浏览功能(autoindex)

主机要分享一些文件给朋友下载,但是文件数量又比较多,而且需要分很多个文件夹进行分类以便根据需要下载不必整个打包在一起下载,下面介绍利用nginx自带的autoindex配置来实现下载服务器的文件遍历来列出整个目录供朋友浏览下载。宝塔站点修改nginx配置文件,在server段添加下面代码 ...

简单的PHP图床程序

首先,我们需要创建一个登录页面,让用户输入密码进行登录验证。然后,我们需要创建一个上传页面,允许用户上传图片。接着,我们需要在上传图片的时候,给图片随机生成一个文件名,并将其保存在uploads目录下。最后,我们需要创建一个页面,用于展示uploads目录下的图片,按照上传时间倒序显示,并支持分页显...