文章列表
6 分钟阅读
更新于

Syncthing 异地同步指南:多设备文件同步不带公网 IP


系列:文件共享与传输

第 5 / 5 篇

  1. 用 vsftpd 在 Ubuntu 上搭建文件共享服务器
  2. SCP 和 SFTP 使用指南:远程文件传输基础
  3. Samba 安装与配置指南:Linux 和 Windows 文件共享
  4. NFS 安装与配置指南:Linux 系统间文件共享
  5. Syncthing 异地同步指南:多设备文件同步不带公网 IP

背景

多台设备之间同步文件,最直接的方式是网盘。但网盘有容量限制、隐私风险,而且需要公网服务器中转。如果在不同城市的 Linux 服务器、笔记本、NAS 之间保持文件夹实时同步,又不想暴露公网 IP,Syncthing 是比 rsync 更合适的选择。

Syncthing 基于 P2P 架构,设备之间直接传输,数据不经过中心服务器。它使用设备 ID(一串唯一标识)建立信任关系,通过 全局发现服务器 和 中继服务器 辅助 NAT 穿透,即使两台设备都没有公网 IP,也能建立连接。同步过程加密,支持版本控制和忽略模式。源码托管在 GitHub官方文档 详尽。

本文从在两台 Ubuntu 22.04 服务器和一台 Windows 笔记本之间同步一个文件夹为例,介绍 Syncthing 的基本使用和常见问题的处理。

Syncthing 的核心概念

开始之前需要理解几个关键概念,否则后面配置容易混乱。

设备 ID
每台安装 Syncthing 的设备都会自动生成一个设备 ID,类似 ABC123DEF-456GHI... 的字符串。这是一台设备的唯一标识,用于其他设备识别和加密连接。设备 ID 可以在 Web 管理界面查看,也可以从命令行获取。

共享文件夹
你想同步的目录,在不同设备上可以路径不同,但同一个共享文件夹的标签必须一致。例如服务器 A 的 /data/project 和笔记本的 D:\project 都对应标签 myproject,Syncthing 会将它们视为同一个文件夹并同步内容。

引入(Introducer)
如果设备 A 已经和 B 建立了连接,并且 A 和 C 也建立了连接,你可以让 A 作为引入人,把 B 介绍给 C。这样 B 和 C 不需要手动添加对方,适合设备数量多的场景。

中继与发现
Syncthing 依赖发现服务器来获知其他设备的地址和端口,如果两端都在 NAT 后面无法直连,会自动尝试通过中继服务器中转流量。中继服务器默认由社区提供,也可以自建。

安装 Syncthing

在 Ubuntu 上推荐使用官方 APT 仓库安装,这样能自动更新:

Terminal window
sudo curl -s -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt update
sudo apt install syncthing -y

安装完成后,Syncthing 会以当前用户身份运行。启动用户级别的 systemd 服务:

Terminal window
systemctl --user enable syncthing.service
systemctl --user start syncthing.service

Syncthing 默认监听本地 127.0.0.1:8384,仅能从本机访问 Web 管理界面。如果服务器无图形界面,可以通过 SSH 隧道访问:

Terminal window
ssh -L 8384:localhost:8384 user@server-ip

然后浏览器打开 http://localhost:8384

Windows 和 macOS 可以直接从 Syncthing 下载页面 获取安装包。Windows 下默认会作为系统服务运行,启动后在系统托盘可以打开管理界面。

首次配置:绑定地址与安全

刚安装的 Syncthing 监听 127.0.0.1,如果需要在同一局域网的其他设备访问这台服务器上的管理界面(或者服务器有桌面环境的远程桌面),可以改为 0.0.0.0:8384。通过 Web 界面右上角 “操作” -> “设置” -> “GUI” 修改 GUI 监听地址。同时建议设置用户名和密码,防止未授权访问。

修改后需要重启 Syncthing 服务:

Terminal window
systemctl --user restart syncthing.service

添加设备并共享文件夹

假设有两台设备:服务器 A(Ubuntu,/data/docs)和笔记本 B(Windows,D:\docs)。

第一步:获取设备 ID

在每台设备的 Web 界面顶部可以看到自己的设备 ID,或者在命令行执行:

Terminal window
syncthing --device-id

记录下两台设备的 ID。

第二步:在服务器 A 上添加笔记本 B

点击右侧 “远程设备” -> “添加设备”,输入笔记本 B 的设备 ID,可以自定义设备名称。高级选项保留默认(动态地址、自动接受等)。点保存后,服务器 A 会尝试连接笔记本 B。

第三步:在笔记本 B 上确认

稍等片刻,笔记本 B 的 Web 界面会弹出 “来自服务器A的设备连接请求”,同样添加设备并输入服务器 A 的设备 ID 确认。双方设备建立信任后,“远程设备”列表中会显示彼此的状态为“已连接”。

第四步:共享文件夹

在服务器 A 界面点击 “文件夹” -> “添加文件夹”,输入标签(如 docs),路径设为 /data/docs。在“共享”标签页勾选笔记本 B,然后保存。同样,在笔记本 B 上添加相同标签 docs 的文件夹,路径设为 D:\docs,并共享给服务器 A。

之后两台设备会开始扫描文件和同步。注意:如果某个文件夹已经有文件,Syncthing 会扫描后推送给对方;双方都存在同名文件时会以时间戳较新的为准。

更详细的操作流程可参考 Syncthing 入门指南

高级特性:中继、版本控制和 ignore

中继地址
如果两台设备始终显示“断开连接”,可能是 NAT 穿透失败。可以在每台设备设置 -> 连接 -> 协议监听地址中添加 relay:// 确保中继可用。默认使用的社区中继服务器列表见 Relay Pool。有隐私需求可以自建中继,参考 Syncthing Relay Server

版本控制
防止误删或同步冲突,可以在文件夹的高级设置中启用版本控制。支持几种模式:

  • simple:保留 N 个版本,旧版本删除。
  • staggered:按时间保留版本,越新的保留越多。
  • trashcan:删除的文件移到 .stversions 目录。

忽略模式
在文件夹的“忽略模式”中可以编写类似 .gitignore 的规则,排除临时文件、编译产物等。例如:

*.tmp
node_modules/
.venv/

配置文件存储在 .stfolder 同级的 .stignore 中。

常见问题

1. 两台设备始终显示“断开连接”

首先检查双方是否都能访问互联网(P2P 连接可能因防火墙被直接阻断)。在 Web 界面右上角的“帮助” -> “调试”中,查看 “最近发现的设备” 和 “连接尝试”。如果长期无尝试,可能是发现服务器不可达。另外确认设备 ID 完全正确,且双方都已添加对方。尝试在设置中开启全局发现和中继。

2. 同步速度极慢(几十 KB/s)

P2P 直连的速度取决于两端网络,但如果是通过中继传输,速度会受中继服务器带宽限制。可以尝试在连接设置中限制速率,或使用 UPnP 来打洞。如果设备在同一局域网,可以在连接设置中填写对方的局域网 IP 地址,强制走局域网直连。

3. 文件冲突出现两个文件

Syncthing 没有文件锁机制,多人同时编辑同一文件会冲突。冲突后会将一个文件重命名为 文件名.sync-conflict-年月日-时分秒.扩展名。可以通过版本控制功能恢复,或手动合并。

4. 如何备份同步配置

Syncthing 所有配置默认存储在 ~/.config/syncthing/(Linux)或 %LOCALAPPDATA%\Syncthing\ 下。备份整个目录即可。配置文件是 XML 格式,也可以只备份 config.xml 和数据库目录 index-v0.14.0.db

5. 更换设备后如何恢复

在新设备安装 Syncthing 后,不要直接启动,先将备份的 config.xml 和索引数据库复制到对应配置目录,再启动服务。这样设备 ID 不变,其他设备无需重新添加。

总结

Syncthing 解决了多设备文件同步时的网络障碍和中心化依赖问题。一旦设备之间建立信任,文件自动分发,即使跨地域、无公网 IP 也能工作。常见的连接问题多与 NAT 或防火墙有关,利用中继和静态地址可解决。对于需要离线协作或备份的场景,Syncthing 是一个稳定且自控的基础工具。

如果需要共享给其他人(非设备间直接信任),Syncthing 并不擅长,这时候可以考虑结合 Samba 安装与配置指南:Linux 和 Windows 文件共享 或搭建临时 Web 服务器分发文件。