Linux 配置Syncthing的中继服务器

目录

  • [一. 简介](#一. 简介)
  • [二. 前期准备](#二. 前期准备)
    • [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 效果

🙄配置之前走的是局域网

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

相关推荐
深念Y1 小时前
黑苹果P400-卡顿排查与优化记录
linux·macos·ios·pve·黑苹果·英伟达·n卡
云运维笔记1 小时前
华为VRP系统全解析:网络设备的智能核心
服务器·网络·华为
微信ipad协议开发1 小时前
用 WTAPI搭私域营销自动化
运维·自动化
tryxr1 小时前
Chat2Excel 文件服务模块剩余功能开发
java·服务器·windows·java项目·文件服务
张小姐的猫1 小时前
【AI大模型接入SDK】 —— Ollama本地接入Deepseek
java·linux·开发语言·网络·c++·人工智能
en.en..1 小时前
深入解析 fork:一次调用,两次返回的核心原理
linux·运维·服务器
不爱学英文的码字机器1 小时前
让 Live2D 角色真正开始对话:Open-LLM-VTuber 从本地部署到远程访问
服务器·opencv·微信·电脑
java_logo2 小时前
Docker 部署 ArchivesSpace:轻松搭建档案信息管理平台
运维·docker·容器·档案管理·轩辕镜像·archivesspace·特藏
kuroomi6 小时前
Docker 与容器基础
linux·运维·docker