Syncthing 介绍
Syncthing 是一个多设备文件同步工具,具有以下特性:
- 开源免费,跨平台(Windwos、macOS、Android、Linux、FreeBSD、Solaris、NAS,你甚至可以在一些路由器上运行它)
- 设备间 TLS 加密传输数据,P2P 点对点直连,去中心化,没有隐私泄漏风险
- 类似于 torrent 协议,参与同步的设备越多,同步的速度越快
- 通过图形化页面控制,操作简单
- 文件版本控制,神奇的后悔药
- 单向同步
客户端
Syncthing 本身是一个命令行程序,直接从 Syncthing releases 下载对应系统的版本解压打开即可运行,然后你就可以浏览器访问 127.0.0.1:8384
进入 Syncthing 的控制面板。
但为了方便用户使用,有其他开发者做了相应系统的 GUI 程序:
- Windows 上有:Synctrazor
- MacOS 上有:Syncthing-MacOS
- Android 上有:Syncthing-Android
- iOS 上有:Fsync(比较简陋)
下图是 Windows 上在 Synctrazor 中打开 Syncthing 的控制台(其实在浏览器中打开 127.0.0.1:8384
也是一样的界面):
上手使用视频教程
对安卓同步的重要提醒
在安卓上设置同步时,一定要在高级设置中将 忽略权限 打上勾。因为安卓多是基于 Fuse 的存储格式,不支持权限设置,所以每次同步到安卓,会返回说权限不一致,导致冲突。(在 Syncthing-Android 上其实是默认打开的)
Syncthing 发现服务(discosrv)
介绍 discosrv
在同一局域网下时,你的设备可以互相发现对方。而在不同网络时,因为隔了层层路由,设备间很难相互找到。
Syncthing 可以使设备在不同局域网下也能相互同步,靠的就是发现服务器。只要你的电脑连接到了发现服务器,手机也连上了发现服务器,那么你的手机和电脑就能相互发现对方,进而直接连接,进行同步。
Syncthing 官方提供了全球发现服务器,但是,由于全球发现服务器在国外、互联网防火墙等因素,全球发现服务器可能会速度很慢,或者无法访问。
所以 Syncthing 的发现服务器 discosrv 源码是开源的,你可以自己下载一份,在你自己的服务器上运行,搭建一个发现服务器。
你可以添加多个发现服务器,用英文逗号隔开即可。只要在你的 Syncthing 同步配置中填入你自己的同步服务器地址,就可以使用了:
语法
stdiscosrv [-cert=<file>] [-db-dir=<string>] [-debug] [-http] [-key=<string>]
[-listen=<address>] [-metrics-listen=<address>]
[-replicate=<peers>] [-replication-listen=<address>]
Syncthing 依赖 发现服务 来找到同伴,任何人都可搭建发现服务器。Syncthing 项目也提供公共节点。
选项
-cert=<file>
-db-dir=<string>
-debug
-http
-key=<file>
-listen=<address>
-metrics-listen=<address>
-replicate=<peers>
-replication-listen=<address>
指定 Syncthing 到你的发现服务
使用 default
就是使用默认的通用发现服务。要自定义,进入 web-GUI ,设置,连接,全球发现服务器,填入用逗号分隔的一系列网址。例如 https://disco.example.com:8443/
搭建
描述
下面的教程假设你已经搭建好了 syncthing 。
安装
到 releases 页面下载合适的安装包。启动它,后,stdiscosrv 会自动生成验证文件和数据库到当前文件夹(除了另有参数时)
wget https://github.com/syncthing/discosrv/releases/download/v1.3.1/stdiscosrv-linux-amd64-v1.3.1.tar.gz
tar -xzvf stdiscosrv-linux-amd64-v1.3.1.tar.gz
mv stdiscosrv-linux-amd64-v1.3.1 syncthing_discover_server
cd syncthing_discover_server
配置
验证
发现服务通过 https 提供服务。为保证,有三个选项:
- 用于发现服务的域名的 CA-signed certificate pair 。客户端会验证域名和证书。
- 使用任意 certificate pair 并让客户端基于它的 device ID 验证。这个选项被用于发现服务自动生成的证书。
- 使用 -http ,如果发现服务已经是在 ssl-secured 反向代理后,可以使用这个。
对于前两个选项,因为是使用 https,所以发现服务器必须给定一个 certificate 和 key 的路径:
$ stdiscosrv -cert=/path/to/cert.pem -key=/path/to/key.pem
在运行后,发现服务会打印它的设备 id :
Server device ID is 7DDRT7J-UICR4PM-PBIZYL3-MZOJ7X7-EX56JP6-IK6HHMW-S7EK32W-G3EUPQA
如果你在使用非 CA 签名的证书,客户端必须在 url 中提供设备 ID ,例如:
https://disco.example.com:8443/?id=7DDRT7J-UICR4PM-PBIZYL3-MZOJ7X7-EX56JP6-IK6HHMW-S7EK32W-G3EUPQA
Syncthing 中继服务 relysrv
介绍 relysrv
Syncthing 可以通过发现服务器,让处在不同网络环境的设备互相发现,再直接连接。但是,有的时候,网络环境复杂,即使两个设备能互相发现,也无法搭建直连通道。这时候,就需要中继服务器来进行数据转发,得以同步。
Syncthing 官方提供了全球中继服务器,但是,由于全球发现服务器在国外、互联网防火墙等因素,全球中继服务器可能会速度很慢,或者无法访问。
所以 Syncthing 的发现服务器 relysrv 源码是开源的,你可以自己下载一份,在你自己的服务器上运行,搭建一个中继服务器。
你可以添加多个中继服务器,用英文逗号隔开即可,default 表示官方默认中继服务器。只要在你的 Syncthing 同步配置中填入你自己的中继服务器地址,就可以使用了:
语法
strelaysrv [-debug] [-ext-address=<address>] [-global-rate=<bytes/s>] [-keys=<dir>] [-listen=<listen addr>]
[-message-timeout=<duration>] [-nat] [-nat-lease=<duration> [-nat-renewal=<duration>]
[-nat-timeout=<duration>] [-network-timeout=<duration>] [-per-session-rate=<bytes/s>]
[-ping-interval=<duration>] [-pools=<pool addresses>] [-protocol=<string>] [-provided-by=<string>]
[-status-srv=<listen addr>]
选项
-
-pools=<pool addresses>
逗号分隔的中继池列表,表示要加入哪些。默认是“http://relays.syncthing.net/endpoint” 留空表示不加入。中继池可以相互连接,组成一个大的中继池
建设
默认使用 22067 端口。
发布地址在 release
wget https://github.com/syncthing/relaysrv/releases/download/v1.3.1/strelaysrv-linux-amd64-v1.3.1.tar.gz
tar -xzvf strelaysrv-linux-amd64-v1.3.1.tar.gz
mv strelaysrv-linux-amd64-v1.3.1 syncthing-relay-server
cd syncthing-relay-server
Linux 设置 discosrv 和 relysrv 自启动
方法一:
chmod +x /etc/rc.d/rc.local
vim /etc/rc.d/rc.local
nohup /root/syncthing-relay-server/strelaysrv -pools="" &
nohup /root/syncthing_discover_server/stdiscosrv &
方法二:
touch /etc/init.d/my_startup_command
chmod a+x /etc/init.d/my_startup_command
vim /etc/init.d/my_startup_command
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于