Skip to Content

syncthing文件同步网盘配置

Table of Contents

在需要同步的文件不太大时,坚果云一类的网盘的效果不错,安装软件即可,不需要折腾还功能多。不考虑同步功能,只是想要存数据的话,NAS一般就可以满足要求。owncloud、nextcloud一类的私有云网盘提供了更多的功能,如可以浏览器查看分享文件。

相比之下,Syncthing只是一个纯粹的文件同步软件。主要优点是配置简单,没有其它的依赖,配置局域网的文件同步以及vps的文件同步实现起来容易,不像私有网盘程序依赖一套数据库、php、web服务等。但是缺点也很明显,没有什么多余的功能,无法单独上传和下载文件,也不能直接分享单个文件。

简单配置

linux的包管理器大多可以直接安装,然后运行Syncthing就可以启动,默认只提供了浏览器的web端管理UI,在 127.0.0.1:8384 访问。

两个节点都安装启动后,可以直接通过id添加对方。运行Syncting的各个节点之间没有主从的区别,通过共享文件夹的方式全部同步为相同的文件状态。添加后需要在对方的web UI中确认。

如果在没有桌面环境的linux服务器(如VPS)上安装,需要在 ~/.config/syncthing/config.xml 配置中将127.0.0.1改为0.0.0.0,防火墙放开8384端口、22000端口。然后在本地浏览器中用服务器 ip:8384 访问。

直连服务器配置

在局域网内或者连接有公网ip的主机时,会默认使用直连的方式。当两个主机不能直接连接,或者网络状态不好时,会通过relay中继服务器连接。

VPS的web UI中直连的listener选项卡为:

quic://0.0.0.0:22000

tcp://0.0.0.0:22000

连接VPS时,在address选项中将上面0.0.0.0替换成VPS服务器的ip,替代默认的dynamic即可。

文件版本保存

一个文件可能会修改多次,文件夹的设置中有File Version选项,可以按时间、修改次数、删除等方式备份多个版本,具体设置界面有说明。

安全相关

每个节点的id不包含隐私信息,连接时以及分享文件夹时都需要在两个节点的web UI中确认,id没必要加密保存。节点之间的数据传输通过TLS加密,不用太考虑中心服务器导致的隐私问题。

web UI 页面直接暴露给外网可能会容易被被端口扫描后攻击,可以设置密码加强安全性。或者通过反向代理隐藏web UI的端口,具体配置在 https://docs.syncthing.net/users/reverseproxy.html。关于反向代理踩的一个小坑:nginx设置中的location /syncthing/后面的斜杠不能漏。

文件分享

Syncthing不支持文件分享,只能间接的处理,下面放个简单的nginx配置解决web服务中分享某个文件文件的下载功能。(至于上传,可以考虑sftp、samba一类的服务,这个比较弱)

     location /file_share/ {
            alias /home/user/Syncthing/public/;
            autoindex on;
            autoindex_exact_size off;  # 文件大小显示MB,GB单位,默认为b;
            autoindex_localtime on;    # 服务器本地时区显示文件修改日期
        }

基本原理

同步设计上首先将大文件切割成block,小文件直接单独作为block(和HDFS的操作类似)。对每个block计算hash值,通过hash值判断文件的完整性和变化(可以自动识别重命名)。当发生文件变化时,操作系统会通知Syncthing程序,Syncthing程序之间传输元数据信息以及变化的数据。

连接上每个Syncthing程序通过唯一id识别,默认打开了本地发现(local discovery)和全网发现(global discovery)。本地发现能够在添加其它节点时自动找到局域网内的其它服务,全局发现依赖了额外的官方服务器,能根据id直接找到对应的节点(不确定ip是通过id算出来的还是全局发现找到的)。

为了使不在同一个局域网下的节点能够同步,官方提供了relay服务器作为中介,不在局域网内的同步默认可以直接通过官方relay服务器进行,也可以自己在有公网ip的机器上架服务。relay服务默认为开启状态,局域网内的节点可能由于网络状况等问题从直连转为relay连接,在配置的web GUI中的Remote Devices下的address中可以看到是直接的ip还是带relay的ip,此处配置可以修改。

Sycnthing默认有几个地方会连接官方服务器:1. 使用数据收集(第一次打开web UI会询问是否同意);2. 全局发现;3. relay中继服务器。为了方便无所谓,如果只是想单纯在网络可以互通的环境下使用文件同步,可以考虑在设置中把这几个都关了。