一.介绍
我以前介绍了Syncthing,做为一款开源的文件同步程序,它的功能仍是很是强大的,我也很高兴能看到它被愈来愈多的人知道和使用,前几天有位朋友留言说让我介绍下Syncthing的中继服务器的搭建,在这以前的一段时间我在网上偶尔看到过有朋友介绍过一次。python
首先来科普一下? 不一样于Resilio Sync(BT Sync)使用BT协议进行数据传输,Syncthing使用了BEP对等自由块交换协议(Block Exchange Protocol),这两个却是没啥优劣的问题,主要是BT Sync在老版本的时候支持DHT,然后来删掉了,这也是致使它的官方服务器在被干扰以后几乎彻底没法使用的缘由之一,因此当初有人说老版本(支持DHT)的依旧可以使用。而Syncthing不同的是它没有使用DHT,可是也没有像BT Sync同样只有官方服务器(通告+中继服务器),因为开源,因此Syncthing的服务器都是能够本身部署的,这也就是说,即便官方的服务器出了问题,也可以随时有服务器去代替它。linux
那么为何要有这两种服务器呢? 这主要是由于P2P的原理,通告(Announcement)/发现(Discovery)服务器用于发现和索引用户,就和你BT的Tracker(这个其实也是通告服务器)同样,你接入了就等于在里面挂了名,而后服务器会把其余人告诉你,这样大家才可以连上。这个是公网IP的状况,若是没有公网IP呢?这就要轮到中继(Relay)服务器出手了,要么是辅助实现打洞,要么是转为C/S模式。总之,中继服务器就是为了在特殊网络环境下(可是在国内不少家庭宽带就是这样的)的正常使用而存在的。git
咱们本次就不说通告服务器(Syncthing官方实际上是叫作Global Discovery服务器的),由于目前官方的服务器还正常运做,不过感兴趣的或者想创建企业内部的本地Discovery服务器能够本身研究下github
PS.以前写的Syncthing的搭建和使用——>传送门sublime-text
二.安装
好了,让咱们开始尝试下搭建安全
首先,你得先确认一点,你搭建的中继服务器是私人(Private)用途的仍是公开(Public)的,由于公开的话就会自动加入Syncthing官方的Relay服务器池中,供其余人使用,这样会致使你的流量消耗变大,因此请想好,而且也会在官方的Relay服务器列表中显示服务器
Relay服务器列表——>传送门网络
若是下面没显示出状态请在地址栏右侧点击容许加载不安全的脚本,由于会从各个服务器上拉取状态,这个是HTTP的,默认会被HTTPS页面禁用
首先来说一下参数,而后根据你的需求在下面supervisor的配置里面修改
参考了官方文档进行翻译——>传送门
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-debug 启用调试输出
-ext-address=<address> 可选的外部地址(将被上报),可以经过端口转发来监听高权限端口(0-1024)而后外部能够链接这个端口
-global-rate=<bytes/s> 全局限速,单位 bytes/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="")来禁用这个功能
|
比较重要的是-pools(是否做为公开服务器),以及限速设置啥的,这个看你须要设置,若是公开请务必确保流量足够,另外公开也能够用-provided-by打个网站的小广告
其余系统请自行替换下载连接 https://github.com/syncthing/relaysrv/releases
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#获取程序并解压
wget https://github.com/syncthing/relaysrv/releases/download/v0.14.46/strelaysrv-linux-amd64-v0.14.46.tar.gz
tar xzf strelaysrv-linux-amd64-v0.14.46.tar.gz
#换个地方方便直接运行(顺便改个名)
mv strelaysrv-linux-amd64-v0.14.46/strelaysrv /usr/bin/relaysrv
#清理下
rm -rf strelaysrv-linux-amd64-v0.14.46 strelaysrv-linux-amd64-v0.14.46.tar.gz
#为了安全建立一个单独的用户
useradd relaysrv -s /bin/false
#建立存储配置用的目录并修改全部者
mkdir /etc/relaysrv
chown relaysrv /etc/relaysrv
#安装supervisor
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
rm -rf get-pip.py
pip install supervisor
#配置supervisor
echo_supervisord_conf > /etc/supervisord.conf
echo "supervisord" >> /etc/rc.local
cat >>/etc/supervisord.conf<<'EOF'
[program:relaysrv]
command=relaysrv -keys /etc/relaysrv -provided-by="Hi, Senra http://www.senra.me/"
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/relaysrv.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
redirect_stderr=true
user = relaysrv
EOF
#启动supervisor
supervisord
#查看日志
supervisorctl tail -f relaysrv stdout
|
大概是这样滴
PS.用的人很多,我这篇文章写完放了几天流量跑了至关多……
至于如何在私有模式下使用,你能够看到输出的截图里面有一串相似以下的地址
1
|
relay://<host name|IP>[:port]/?id=<relay device ID>
|
固然这儿是0.0.0.0,你把这个改为你的域名或者IP而后就能够在你的Syncthing里面指定Relay服务器了,改完后地址相似以下
1
|
relay://private-relay-1.example.com:443/?id=ITZRNXE-YNROGBZ-HXTH5P7-VK5NYE5-QHRQGE2-7JQ6VNJ-KZUEDIU-5PPR5AM
|
固然,为了保证可以正常使用,请防火墙开放以下两个端口
数据端口: 22067/tcp 能被 -listen 覆盖指定,而且会被 -ext-address 上报
状态端口: 22070/tcp 能被 -status-srv 覆盖指定
iptables命令以下,其余的本身研究
1
2
|
iptables -I INPUT -p tcp --dport 22067 -j ACCEPT
iptables -I INPUT -p tcp --dport 22070 -j ACCEPT
|
更多内容能够参考下GitHub上的ReadMe说明和上面提到的官方文档 GitHub——>传送门