自建Syncthing中继服务器(私密传输或造福大众)

一.介绍

我之前介绍了Syncthing,作为一款开源的文件同步程序,它的功能还是非常强大的,我也很高兴能看到它被越来越多的人知道和使用,前几天有位朋友留言说让我介绍下Syncthing的中继服务器的搭建,在这之前的一段时间我在网上偶尔看到过有朋友介绍过一次。

首先来科普一下? 不同于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模式。总之,中继服务器就是为了在特殊网络环境下(但是在国内很多家庭宽带就是这样的)的正常使用而存在的。

我们本次就不说通告服务器(Syncthing官方其实是叫做Global Discovery服务器的),因为目前官方的服务器还正常运作,不过感兴趣的或者想建立企业内部的本地Discovery服务器可以自己研究下

GitHub——>传送门
文档——>传送门

PS.之前写的Syncthing的搭建和使用——>传送门

二.安装

好了,让我们开始尝试下搭建

首先,你得先确认一点,你搭建的中继服务器是私人(Private)用途的还是公开(Public)的,因为公开的话就会自动加入Syncthing官方的Relay服务器池中,供其他人使用,这样会导致你的流量消耗变大,所以请想好,并且也会在官方的Relay服务器列表中显示

Relay服务器列表——>传送门

如果下面没显示出状态请在地址栏右侧点击允许加载不安全的脚本,因为会从各个服务器上拉取状态,这个是HTTP的,默认会被HTTPS页面禁用

<img class="alignnone size-full wp-image-1371" src="http://ucdn.senra.me/2018/04/15229915074036.jpg" alt="" width="3328" height="1740" />

首先来讲一下参数,然后根据你的需求在下面supervisor的配置里面修改

参考了官方文档进行翻译——>传送门

-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="")来禁用这个功能
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

#获取程序并解压
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

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

&amp;lt;img class="alignnone size-full wp-image-1374" src="http://ucdn.senra.me/2018/04/15230028225406.jpg" alt="" width="1850" height="470" /&amp;gt;

&amp;lt;img class="alignnone size-full wp-image-1373" src="http://ucdn.senra.me/2018/04/15230028375058.jpg" alt="" width="2472" height="1050" /&amp;gt;

大概是这样滴
PS.用的人不少,我这篇文章写完放了几天流量跑了相当多……

&amp;lt;img class="alignnone size-full wp-image-1372" src="http://ucdn.senra.me/2018/04/15238672914108.jpg" alt="" width="3282" height="1860" /&amp;gt;

至于如何在私有模式下使用,你可以看到输出的截图里面有一串类似如下的地址

relay://<host name|IP>[:port]/?id=<relay device ID>
1
relay://<host name|IP>[:port]/?id=<relay device ID>

当然这儿是0.0.0.0,你把这个改成你的域名或者IP然后就可以在你的Syncthing里面指定Relay服务器了,改完后地址类似如下

relay://private-relay-1.example.com:443/?id=ITZRNXE-YNROGBZ-HXTH5P7-VK5NYE5-QHRQGE2-7JQ6VNJ-KZUEDIU-5PPR5AM
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命令如下,其他的自己研究

iptables -I INPUT -p tcp --dport 22067 -j ACCEPT
iptables -I INPUT -p tcp --dport 22070 -j ACCEPT
1
2
iptables -I INPUT -p tcp --dport 22067 -j ACCEPT
iptables -I INPUT -p tcp --dport 22070 -j ACCEPT

更多内容可以参考下GitHub上的ReadMe说明和上面提到的官方文档 GitHub——>传送门

[转]自建Syncthing中继服务器(私密传输或造福大众)的更多相关文章

  1. 解决chrome连接自建https服务器报“您的连接不是私密连接”问题

    前一段时间,Chrome 突然显示出了“您的连接不是私密连接”,这下可难受了,大部分的网站打开都有问题. 找了各种方法,各种设置都是不行. 一.暴力.费力的方法直接卸载 Chrome ,删除一切数据以 ...

  2. 【转】搭建和配置Syncthing发现和中继服务器

    搭建和配置Syncthing发现和中继服务器     折腾借口 Syncthing好是挺好的,但就是同步不给力,公共网络服务其质量参差不齐,网络也说不清.最好的解决方案还是自己搭建发现服务器Synct ...

  3. 在Mac中保护私密文件,隐藏文件

    在个人电脑中我们有些私密文件或者资料是不希望被人发现或者使用.保护私密文件的方式有很多,比如对文件进行加密,隐藏文件,修改文件后缀等.在Mac中我们也可以通过一些简单方式保护私密文件.这里我们简单介绍 ...

  4. GitHub当作私密的版本控制系统远端版本库私有化

    目的 我打算把所有服务器的配置文件用git管理起来,这样可以记录配置变更状况. 但是有一个问题是,如何多人协作?服务器配置信息非常敏感,如果这个版本库泄漏,整个公司的服务器架构就彻底泄漏了. 这个版本 ...

  5. JavaScript-cookie是客户端本地,持久存储用户私密数据的文件

    navigator:封装浏览器配置信息的对象 cookieEnabled:判断浏览器是否启用cookie cookie是什么:cookie是客户端本地,持久存储用户私密数据的文件 plugins:包含 ...

  6. 搭建DHCP服务器以及DHCP中继服务器

    一.DHCP服务器   1.首先配置DHCP服务器的IP地址(DHCP服务器网卡桥接在VMnet1)   .配置好IP后重启DHCP服务 3.安装DHCP服务器,在这里我用的是YUM安装的(关于YUM ...

  7. 建置 POSTFIX 服务器

    建置 POSTFIX 服务器 postfix 是除了 sendmail 以外 ,最被广泛采用的 Linux 邮件服务器,一般使用的观感不外乎两点: 一.安全:垃圾信过滤机制较聪明,就算什么都没设定,也 ...

  8. ScrollView反弹效果 仿小米私密短信效果

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/28441197 如今非常多APP都给ScrollView加入了反弹效果.QQ.小米 ...

  9. wuzhicms私密下载链接生成

    加载函数库:load_function('content','content'); echo private_file('http://dev.wuzhicms.com/uploadfile/2014 ...

随机推荐

  1. python 函数返回值(总结)

    关键字:return 没有返回值的叫过程 def test1(): msg="我是一个过程" print(msg) 有return的叫函数 def test02(): msg=&q ...

  2. java基础继承

    为什么用继承: 因为继承可以减少代码的冗余,提高维护性,为了从根本上解决存在的问题,就需要继承,就是将多个类当中的相同的地方提取到一个父类当中.父类更通用,子类更具体. 父类的继承格式 语法:publ ...

  3. Cookie Manager

    https://github.com/Rob--W/cookie-manager 修改饼干获取VIP标识

  4. plsql插入数据出现乱码问题

    今天在使用plsql 插数据时 ,遇到的问题就是插入进去是乱码问题,在这里总结一下如何解决的 首先声明一下就是: 现在只有客户端,没有服务端,有一些需求就是总是有许多数据要插入进去,但是在使用sql语 ...

  5. ssm登录与退出

    ssm整合比较好的实例 http://how2j.cn/k/ssm/ssm-tutorial/1137.html?tid=77#nowhere ssm登录后台用户检测(此实例注销有问题):http:/ ...

  6. Heap Sort - recursion

    Heap Sort  Build a max heap using exsiting array, which is called Heapify Swap root with the last el ...

  7. jQuery-4.动画篇---动画基础隐藏和显示

    jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元素的st ...

  8. [err]Traceback (most recent call last): File "/usr/local/bin/pip", line 7, in <module> from pip._internal import main ImportError: No module named 'pip._internal'

    Q: Traceback (most recent call last):File "/usr/local/bin/pip", line 7, in <module>f ...

  9. Ubuntu系统下Anaconda使用方法总结

    前言:个人认为Anaconda比pip使用起来要方便很多,因为它创建虚拟环境和下载各种库都很方便.但是有时候conda的安装方法中没有某些库,必须使用pip来进行安装.所以,主要用Anaconda,偶 ...

  10. JAVA日常之一

    一.JDK安装及环境变量设置 下载jdk安装包,如jdk-8u65-windows-x64.exe,点击安装,记住安装路径如E:\Program Files\Java\jdk1.8.0_65: 打开环 ...