目录
- [一. 简介](#一. 简介)
- [二. 前期准备](#二. 前期准备)
-
- [2.1 创建用户和配置文件夹](#2.1 创建用户和配置文件夹)
- [2.2 下载strelaysrv](#2.2 下载strelaysrv)
- [2.3 生成私有中继服务器的token](#2.3 生成私有中继服务器的token)
- [2.4 提前开放服务器的22067端口](#2.4 提前开放服务器的22067端口)
- [三. 安装](#三. 安装)
- [四. 尝试启动](#四. 尝试启动)
- [五. 配置为service服务](#五. 配置为service服务)
- [六. 运行中继服务](#六. 运行中继服务)
- [七. 获取私有中继服务器的地址](#七. 获取私有中继服务器的地址)
- [八. 设备端进行配置](#八. 设备端进行配置)
-
- [8.1 电脑端](#8.1 电脑端)
- [8.2 手机端](#8.2 手机端)
- [8.3 效果](#8.3 效果)
一. 简介
Syncthing 是一个开源的、持续运行的 P2P 文件同步程序。Syncthing 可以让多台设备上的某个目录保持同步,而且不需要中心服务器。
🔷传统云盘,数据中心在云服务器
bash
Google Drive
│
┌─────┼─────┐
▼ ▼ ▼
Windows Android Mac
🔷Syncthing,数据在各个设备之间直接同步
bash
Windows ◄────────► Linux
▲ ▲
│ │
└────── Android ──┘
✅Syncthing常用于一个局域网内的设备的指定文件夹进行数据同步,但如果需要同步数据的设备并不在一个局域网内的话,就需要通过中继服务器(Relay)来进行数据同步,中继服务器(Relay)主要有两种场景:
- 使用公共中继
- 公共中继的地址:
dynamic+https://relays.syncthing.net/endpoint
- 公共中继的地址:
- 自建私有中继服务器
relay://<私有中继服务器地址>:22067/?id=<中继ID>&token=<认证用token>
🧐本文主要讲解自建中继服务器的方法
bash
┌──────────────┐
│ Discovery │
│ Server │
└──────┬───────┘
│
通过私有中继服务器找到对方设备的位置
│
┌───────────┴───────────┐
│ │
▼ ▼
┌───────────┐ ┌───────────┐
│ Windows │◄─────────►│ Linux │
│ Syncthing │ encrypted│ Syncthing │
└─────┬─────┘ └─────┬─────┘
│ │
▼ ▼
本地目录 本地目录
二. 前期准备
2.1 创建用户和配置文件夹
- 创建启动
strelaysrv服务用的strelaysrv用户 strelaysrv用户对应的组也会被一并创建
bash
sudo useradd --system --no-create-home --shell /usr/sbin/nologin strelaysrv
- 创建存放
strelaysrv配置的文件夹
bash
sudo mkdir -p /etc/strelaysrv
sudo chown strelaysrv:strelaysrv /etc/strelaysrv
2.2 下载strelaysrv
strelaysrv是用来创建Syncthing的中继服务器的程序- 截止到2026/09/10,最新版本为
v2.1.5
bash
cd /tmp
curl -LO https://github.com/syncthing/relaysrv/releases/download/v2.1.5/strelaysrv-linux-amd64-v2.1.5.tar.gz
2.3 生成私有中继服务器的token
- 注意,token最终要放到url中使用,因此不能有特殊的字符(例如:
=,/) - 因此生成只包含
0-9a-z的token
bash
[ec2-user@ip-172-31-25-58 ~]$ openssl rand -hex 32
d2d5d90df37c0145369abfbf4d9e*************4145a5b8359aee22c7025025053
2.4 提前开放服务器的22067端口
- 中继服务运行在22067端口上,因此需要提前开放端口

三. 安装
- 解压
bash
tar -xzf strelaysrv-linux-*.tar.gz
🔷安装
install是一个专门用于复制文件并同时设置权限/属主的命令,常用于安装程序/usr/local/bin是存放手动安装的第三方程序的标准目录,且默认在 PATH 中,所以安装后可直接用命令名调用
bash
sudo install -m 0755 ./strelaysrv-linux-amd64-*/strelaysrv /usr/local/bin/strelaysrv
🙄当然了,使用cp命令也同样可以做到,只不过需要两步
bash
sudo cp ./strelaysrv-linux-amd64-*/strelaysrv /usr/local/bin/
sudo chmod 0755 /usr/local/bin/strelaysrv
四. 尝试启动
-keys=/etc/strelaysrv:证书的存放目录-status-srv=:关闭公开状态统计服务-pools="":因为配置的是私有中继服务器,所以不加入公共 Relay Pool
bash
[ec2-user@ip-172-31-25-58 ~]$ sudo -u strelaysrv \
/usr/local/bin/strelaysrv \
-keys=/etc/strelaysrv \
-listen=:22067 \
-status-srv= \
-pools="" \
-token="d2d5d90df37c0145369abfbf4d9e*************4145a5b8359aee22c7025025053"
2026-09-10 13:07:27 INF 2026/09/10 13:07:27 main.go:142: strelaysrv v2.1.5 "Hafnium Hornet" (go1.27.1 linux-amd64) builder@github.syncthing.net 2026-09-08 06:57:55 UTC
2026-09-10 13:07:27 INF 2026/09/10 13:07:27 main.go:148: Connection limit 52428
2026-09-10 13:07:27 INF 2026/09/10 13:07:27 main.go:161: Failed to load keypair. Generating one, this might take a while...
2026-09-10 13:07:27 INF 2026/09/10 13:07:27 main.go:270: URI: relay://0.0.0.0:22067/?id=W6J3WUE**************-KCRK3IF-MEXMVB6-OFG3QB6-DBML3NW-6GMYTQE&networkTimeout=2m0s&pingInterval=1m0s
🧐第一次运行时,会显示Failed to load keypair. Generating one, this might take a while...,
bash
第一次启动 strelaysrv
│
▼
检查 /etc/strelaysrv
│
├── 没有证书
│ │
│ ▼
│ 自动生成
│ │
│ ▼
│ 启动 Relay
│
└── 已有证书
│
▼
直接使用
- 第一次启动之后,可以找到生成的证书
bash
[ec2-user@ip-172-31-25-58 ~]$ sudo ls -l /etc/strelaysrv
total 8
-rw-r--r--. 1 strelaysrv strelaysrv 627 Sep 10 13:07 cert.pem
-rw-------. 1 strelaysrv strelaysrv 119 Sep 10 13:07 key.pem
[ec2-user@ip-172-31-25-58 ~]$
五. 配置为service服务
bash
[ec2-user@ip-172-31-25-58 ~]$ ls -l /etc/systemd/system/strelaysrv.service
-rw-r--r--. 1 root root 1381 Sep 10 13:47 /etc/systemd/system/strelaysrv.service
[ec2-user@ip-172-31-25-58 ~]$
[ec2-user@ip-172-31-25-58 ~]$ cat /etc/systemd/system/strelaysrv.service
[Unit]
# 服务名称
Description=Syncthing Relay Server
# 官方文档地址
Documentation=https://docs.syncthing.net/users/strelaysrv.html
# 在网络初始化完成后再启动
After=network-online.target
# 声明依赖 network-online.target,确保网络完全就绪
Wants=network-online.target
[Service]
# 服务类型:
# simple 表示 ExecStart 启动的进程就是主进程
Type=simple
# 指定运行用的用户和组
User=strelaysrv
Group=strelaysrv
# strelaysrv 主程序及启动参数
ExecStart=/usr/local/bin/strelaysrv \
-keys=/etc/strelaysrv \
-listen=:22067 \
-status-srv= \
-pools="" \
-token="d2d5d90df37c0145369abfbf4d9e*************4145a5b8359aee22c7025025053"
# strelaysrv 异常退出后自动重新启动
Restart=on-failure
# 重启前等待 5 秒
RestartSec=5
# -----------------------------
# systemd 安全加固
# -----------------------------
# 禁止进程获得新的 Linux 权限, 可以降低服务被利用后进行权限提升的风险
NoNewPrivileges=true
# 给服务使用独立的临时目录, 防止与其他服务共享 /tmp
PrivateTmp=true
# 保护系统文件, 服务对系统目录的写权限受到限制
ProtectSystem=full
# 限制服务访问用户 Home 目录
ProtectHome=true
[Install]
# 将服务挂载到 multi-user.target, 配合 systemctl enable 后实现开机自动启动
WantedBy=multi-user.target
[ec2-user@ip-172-31-25-58 ~]$
六. 运行中继服务
bash
# 重新加载 systemd 系统管理器的配置文件,并重建所有服务的依赖关系树
sudo systemctl daemon-reload
# 设置开机启动, 并立即启动
sudo systemctl enable --now strelaysrv
# 启动,重启,停止
sudo systemctl start strelaysrv
sudo systemctl restart strelaysrv
sudo systemctl stop strelaysrv
# 状态查看
sudo systemctl status strelaysrv

七. 获取私有中继服务器的地址
- 从日志中找到URI的信息:
relay://0.0.0.0:22067/?id=W6J3WUE-**********************-OFG3QB6-DBML3NW-6GMYTQE&networkTimeout=2m0s&pingInterval=1m0s - 需要将
0.0.0.0替换为服务器的ip地址,并且需要在URI中拼接token信息 - 最终得到的地址格式为:
relay://服务器ip地址:22067/id=生成的id&token=设置的token
bash
[ec2-user@ip-172-31-25-58 ~]$ sudo journalctl -u strelaysrv --no-pager
Sep 10 13:47:56 ip-172-31-25-58.ap-northeast-1.compute.internal systemd[1]: Started strelaysrv.service - Syncthing Relay Server.
Sep 10 13:47:56 ip-172-31-25-58.ap-northeast-1.compute.internal strelaysrv[602671]: 2026-09-10 13:47:56 INF 2026/09/10 13:47:56 main.go:142: strelaysrv v2.1.5 "Hafnium Hornet" (go1.27.1 linux-amd64) builder@github.syncthing.net 2026-09-08 06:57:55 UTC
Sep 10 13:47:56 ip-172-31-25-58.ap-northeast-1.compute.internal strelaysrv[602671]: 2026-09-10 13:47:56 INF 2026/09/10 13:47:56 main.go:148: Connection limit 52428
Sep 10 13:47:56 ip-172-31-25-58.ap-northeast-1.compute.internal strelaysrv[602671]: 2026-09-10 13:47:56 INF 2026/09/10 13:47:56 main.go:270: URI: relay://0.0.0.0:22067/?id=W6J3WUE-**********************-OFG3QB6-DBML3NW-6GMYTQE&networkTimeout=2m0s&pingInterval=1m0s
八. 设备端进行配置
8.1 电脑端

8.2 手机端
- 同步协议监听地址原先是
default,现在需要改为私有中继服务器的地址 - 如果想通过数据流量进行测试的话,记得打开
使用移动数据时运行

8.3 效果
🙄配置之前走的是局域网

🧐配置之后走的是中继服务器
