syncthing搭建中继服务器

 

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

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

 

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

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

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

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

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

下载:

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

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

解压:

tar -zxvf stdiscosrv-linux-amd64-v1.23.4.tar.gz
tar -zxvf strelaysrv-linux-amd64-v1.28.0.tar.gz
wget -P /lib/systemd/system http://d.junlin.li/syncthing/strelaysrv@root.service
wget -P /lib/systemd/system http://d.junlin.li/syncthing/stdiscosrv@root.service

启动服务,注意Service文件里面的参数 ExecStart= 必须指定正确的程序运行目录。

systemctl daemon-reload
systemctl start stdiscosrv@root.service
systemctl start strelaysrv@root.service

设置开机启动

systemctl enable strelaysrv@root.service
systemctl enable stdiscosrv@root.service

这两个命令查看systemd运行后的服务器 id

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

strelaysrv参数(必看)

官网给出了详细的参数配置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打个网站的小广告。

 

重要的注意事项:

如果你只想使用自建的发现服务器,就把全局发现服务器里面的default删除,否则就填入 defalut 加发现服务器地址。

但是协议监听地址的default一定要带着,因为删除 default 哪怕在局域网内设备也会通过中继服务器转发流量。
发现服务器和中继都是支持多个的,用逗号,分割。

下图把域名地址改成自己的服务器IP地址。

 

正确配置后效果如图:

 

其他

关于协议监听地址全局发现的填写

侦听程序(监听地址)按我的理解是自己传入/传出链接,只有别人知道这个链接才能传输数据.而全局发现的作用是一个地址薄,里面记录的就是用户的监听地址.只有双方的设备在地址薄上,同时能根据地址找到对方,才能进行数据传输.
而传输的速度取决于是怎么直接连接(比如局域网)还是中转的(中转服务器strelaysrv)
默认情况下的状态是这样的:

 

在默认情况下,侦听程序和设备发现应该是3/3和4/5(设备发现有一个是连不上的),但有时候网络不好,侦听程序只能监听两个本地的22000端口,这就意味外网通过中继池已经连接不上你了

 

 

如果只配置中继池,不写default,监听是这样的:
监听器只监听自己的中继池,不监听本地端口,所有的链接也就必须从中级池来,无法通过局域网传输数据

 

 

但是只指定发现服务器,设备的发现状态是这样的:

 

 

里面不只有自己的发现地址,还有ipv4/6的.
但是通过我的测试,按上面的配置,在同一个wifi下是无法直接传输数据的,原因就在于监听地址没有default

 

所以正确的配置是这样的:

 

这是解释:
协议监听地址指定default,自建中继池,在局域网内直接传输,外网环境通过中继
开启全局发现,只填入自建的发现服务器,只有使用这个发现服务器的设备和本地设备才能互相连接.
这样设置后就可以比较稳定的同步数据了.以前困扰我的指定中继服务器就不能局域网传输的问题也就解决了。

 

– end –

分享到:

0 条评论

昵称

沙发空缺中,还不快抢~