[Docker] Syncthing + Tailscale 异地组VLAN实现文件同步
Syncthing
Syncthing 是一款开源的文件同步工具,可以在不同设备之间实现文件的无缝同步。与 OneDrive 这种同步盘不同,Syncthing 通过在设备之间直接同步文件来保证每个设备上都保存一份完整的本地文件。
设备之间的连接支持:
- 本地发现:支持局域网内的设备自动发现。
- NAT 穿透:在非局域网环境下,通过打洞实现设备之间的连接。
- 全局发现:借助发现服务器发现设备。
- 启用中继:通过中继服务器进行数据传输。
Syncthing 通过将文件分段(称为块)来传输数据,使得多个设备可以同时共享同步负载,类似于 torrent 协议。在线设备越多,数据传输速度越快,因为可以并行地从所有设备获取数据块。
然而,在国内,由于各大运营商持有的公网 IPv4 紧缺,家庭宽带至少有一层 NAT,这就导致网络环境变得复杂。大多数穿透工具,比如 Syncthing 自带的 NAT 穿透功能,都无法有效解决在这种环境下的相互发现和连接问题。因此,在只用 Syncthing 的情况下,不同设备在非局域网下通常无法正常连接和传输。
不过,国内如今普及了 IPv6,大多数家宽都附带了 IPv6(公网)。因此,通过 Tailscale 进行异地组网,可以有效解决这个问题。
Tailscale
Tailscale 是一款商业化闭源的异地组网工具,基于 WireGuard 协议,免费方案(最多3个用户,最多100台设备)足够大多数人使用了。
其最大的优点就是上手极其简单,每台设备都安装好 Tailscale 之后,登录即被纳入一个“大局域网”中。
在局域网下,Tailscale 会直接发现设备本地地址,和 Syncthing 的“本地发现”一样。
在非局域网下,如果两端设备都有 IPv6 的情况下,能实现设备间直连。如果两端设备不都有 IPv6,会走 Tailscale 官方的中转服务器,这也是 Tailscale 相对于 Syncthing 的另一优势。
值得一提的是,用 Tailscale 异地组网之后,可玩性很高,不只可以用于 Syncthing 同步文件,你之前在局域网能做的,在 Tailscale 下都能做,比如你可以在非局域网环境下,使用局域网文件传输工具(LocalSend)传文件。
具体操作
对于需要同步文件的两台设备 A 和 B,首先在这两个设备上分别布署 Syncthing 和 Tailscale.
1. Docker 布署
Syncthing 的布署详情见上篇文章。这里直接给出 Tailscale 的 docker-compose.yml
文件。
services:
tailscale:
image: tailscale/tailscale:stable # 使用stable标签,每次部署或重新启动容器时,都将使用最新的稳定版(官方建议的)
container_name: tailscale
network_mode: host # 使用host模式
privileged: true # 特权模式
environment:
TS_AUTHKEY: tskey-auth-AAAAAAAAAAAAAAAAAAAAAAAAAAA #获取方法:TS管理页面 → Settings → Keys → Generate auth key,创建好了复制过来
TS_STATE_DIR: /var/lib/tailscale # 状态目录, 作用是容器重新启动后配置不变
TS_ROUTES: 192.168.1.0/24 # 子网路由,推荐使用,设置成自己的网段(一个局域网内,只要有一个设备安装了Tailscale,外网设备就可以通过该设备访问家里局域网的其他设备。)
TS_HOSTNAME: VPS # 节点名字, 可自定义
volumes:
- /root/data/docker/tailscale/state:/var/lib/tailscale # 映射状态目录, 冒号左边路径可自定义
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- net_admin
restart: always
2. Syncthing 设置
布署好Syncthing 和 Tailscale后,假设设备 A 和 B 的 Tailscale IPv4 地址分别为 100.100.1.1 和 100.100.1.10,对应的 Syncthing 设备 ID 分别为 ID-A 和 ID-B。
-
设置协议监听地址
打开两台设备(设备 A 和 设备 B) Syncthing 的 web 界面(安卓端要打开“图形化管理界面”),右上角“操作”-“设置”-“连接”
。
将协议监听地址
填为:tcp://0.0.0.0:22000, quic://0.0.0.0:22000
-
设备 A 添加远程设备 B
在设备 A 的 Syncthing 的 web 界面,点击右下角“添加远程设备”
,设备 ID 处填入 ID-B。再点击“高级”
,在“地址列表”
处填入:tcp://100.100.1.10:22000, quic://100.100.1.10:22000
或者,
tcp://100.100.1.10:22000, dynamic
(这里的地址是设备 B 的 Tailscale IPv4 地址)
-
设备 B 同意申请
打开设备 B 的 Syncthing 的 web 界面,此时会出现一个新设备申请,点击“添加设备”
。
在弹出的界面中,点击“高级”
,“地址列表”填入:tcp://100.100.1.1:22000, quic://100.100.1.1:22000
或者,
tcp://100.100.1.1:22000, dynamic
(这里的地址是设备 A 的 Tailscale IPv4 地址)
这样,两台设备便已经已经成功连接上了。只要将 Syncthing 和 Tailscale 常驻后台,就能获得近似于实时的同步体验。
如果通过 Tailscale VLAN 连接,会显示“TCP 广域网”。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭