syncthing

此项目主要用于文件的同步,支持文件版本管理等。

相关文档和下载链接:https://github.com/syncthing

优点

  • 轻量
  • 不受网络环境限制,社区有丰富的发现服务器和中继服务器节点池
  • 全平台适用Windows,macos,Android

在文件同步的过程中会经过他人搭建的中继服务器,安全性和速度都难保证,而且在文件同步时需要要求两端的设备要同时在线。

解决

  1. 搭建一个自己的发现服务器和一个中继服务器
  2. 由于服务器是长期不会关机的,我们可以在服务器中也部署一个syncthing的客户端

在服务器中部署客户端

我使用的是Ubuntu,可以根据你的系统来更改,还是熟悉的下载解压环节。

wget https://github.com/syncthing/syncthing/releases/download/v1.27.5/syncthing-linux-amd64-v1.27.5.tar.gz
tar -zxvf syncthing-linux-amd64-v1.27.5.tar.gz

打开一个会话来运行

screen -R syncthing
./syncthing

你可能会看到类似的一下日志

start] 2024/04/04 22:00:48 INFO: syncthing v1.27.5 "Gold Grasshopper" (go1.22.1 linux-amd64) builder@github.syncthing.net 2024-03-25 03:45:14 UTC
[CB4YL] 2024/04/04 22:00:49 INFO: My ID: CB4YLTI-TI2JHA2-PLBCMBI-UY6PTUY-455FFHQ-DLNXIR4-YOZQEIA-JA5F5AR
[CB4YL] 2024/04/04 22:00:50 INFO: Single thread SHA256 performance is 332 MB/s using crypto/sha256 (332 MB/s using minio/sha256-simd).
[CB4YL] 2024/04/04 22:00:50 INFO: Hashing performance is 270.22 MB/s
[CB4YL] 2024/04/04 22:00:50 INFO: Overall send rate is unlimited, receive rate is unlimited
[CB4YL] 2024/04/04 22:00:50 INFO: Using discovery mechanism: global discovery server https://discovery.syncthing.net/v2/?noannounce&id=LYXKCHX-VI3NYZR-ALCJBHF-WMZYSPK-QG6QJA3-MPFYMSO-U56GTUK-NA2MIAW
[CB4YL] 2024/04/04 22:00:50 INFO: Using discovery mechanism: global discovery server https://discovery-v4.syncthing.net/v2/?nolookup&id=LYXKCHX-VI3NYZR-ALCJBHF-WMZYSPK-QG6QJA3-MPFYMSO-U56GTUK-NA2MIAW
[CB4YL] 2024/04/04 22:00:50 INFO: Using discovery mechanism: global discovery server https://discovery-v6.syncthing.net/v2/?nolookup&id=LYXKCHX-VI3NYZR-ALCJBHF-WMZYSPK-QG6QJA3-MPFYMSO-U56GTUK-NA2MIAW
[CB4YL] 2024/04/04 22:00:50 INFO: Using discovery mechanism: IPv4 local broadcast discovery on port 21027
[CB4YL] 2024/04/04 22:00:50 INFO: Using discovery mechanism: IPv6 local multicast discovery on address [ff12::8384]:21027
[CB4YL] 2024/04/04 22:00:50 INFO: Ready to synchronize "Default Folder" (default) (sendreceive)
[CB4YL] 2024/04/04 22:00:50 INFO: TCP listener ([::]:22000) starting
[CB4YL] 2024/04/04 22:00:50 INFO: Relay listener (dynamic+https://relays.syncthing.net/endpoint) starting
[CB4YL] 2024/04/04 22:00:50 INFO: QUIC listener ([::]:22000) starting
[CB4YL] 2024/04/04 22:00:50 INFO: Completed initial scan of sendreceive folder "Default Folder" (default)
[CB4YL] 2024/04/04 22:00:50 INFO: GUI and API listening on 127.0.0.1:8384
[CB4YL] 2024/04/04 22:00:50 INFO: Access the GUI via the following URL: http://127.0.0.1:8384/
[CB4YL] 2024/04/04 22:00:50 INFO: My name is "iZt4n5e86mbo1v20qu9cesZ"
[CB4YL] 2024/04/04 22:00:50 WARNING: Syncthing should not run as a privileged or system user. Please consider using a normal user account.
[CB4YL] 2024/04/04 22:01:09 INFO: quic://0.0.0.0:22000 detected NAT type: Port restricted NAT
[CB4YL] 2024/04/04 22:01:09 INFO: quic://0.0.0.0:22000 resolved external address quic://47.236.184.156:22000 (via stun.syncthing.net:3478)
[CB4YL] 2024/04/04 22:01:10 INFO: Detected 0 NAT services
[CB4YL] 2024/04/04 22:01:34 INFO: Listen (BEP/tcp): TLS handshake: EOF
[CB4YL] 2024/04/04 22:01:46 INFO: Listen (BEP/tcp): TLS handshake: EOF
[CB4YL] 2024/04/04 22:02:48 INFO: Joined relay relay://118.172.178.77:2206

将防火墙的8384端口开放

看到GUI和API这行ip地址为:127.0.0.1:8384,此时你可以尝试使用你的服务器公网IP+端口号8384的形式来访问,但是会发现是一片空白。这是因为,127.0.0.1:8384是在本地监听的地址,我们要将监听地址改为:0.0.0.0:8384对公网监听。

解决访问GUI一片空白

编辑 Syncthing 的配置文件(通常位于 ~/.config/syncthing/config.xml),将 <gui enabled="true" tls="false"> 部分中的 address 属性更改为您的公网 IP 地址和端口,例如:<address>0.0.0.0:8384</address>

这时你再访问时就可以了。

安全问题

在前面的日志中你会看到一行警告,翻译过来就是不要使用root用户来运行此程序,具体会发生什么安全问题我也不太清楚。但是我可以防止别人的字典攻击,使用fail2ban来限制密码试错的次数

使用 fail2ban 工具来监控登录失败的尝试,并在达到一定次数后临时封禁攻击者的 IP 地址。你可以通过以下步骤来安装和配置 fail2ban

  1. 安装 fail2ban
sudo apt update
sudo apt install fail2ban

创建一个针对 Syncthing Web 服务的 fail2ban 配置文件。你可以在 /etc/fail2ban/filter.d/ 目录下创建一个新的配置文件,例如 syncthing.conf,内容如下:

[Definition]
failregex = .* <HOST> .* POST /rest/system/config .* 401

编辑 /etc/fail2ban/jail.local 文件,在其中添加以下内容,以设置针对 Syncthing 的规则:

[syncthing]
enabled  = true
port     = http,https
filter   = syncthing
logpath  = /var/log/syncthing/syncthing.log
maxretry = 3

重新启动 fail2ban 服务:

sudo systemctl restart fail2ban

这样配置后,fail2ban 将监视 Syncthing 的登录尝试,并在达到 3 次失败尝试后临时封禁攻击者的 IP 地址。

部署发现服务器

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

下载解压后在后台运行,会有一串ID

在各个客户端中设置-》连接-》全局发现服务器(default)中填写

https://《你的服务器公网IP地址》:8443/?id=<你发现服务器id>

部署中继服务器

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

下载解压后在后台运行,会有一串relay协议开头的URL

复制并在各个客户端中设置-》连接-》协议监听地址(default)中填写

总结

这个东西我找了好几个教程,都会出现在服务器部署客户端时可以访问web页面但是一片空白,应该多去看文档和报错日志才能更好的解决问题