資料同步工具-5 在linux部署syncthing中繼
在這篇文章中,我會把server統一稱之為服務器,雖然繁體的翻譯叫做伺服器,但我認為服務器更直觀,更能清楚描述軟體的實際用途。
它就像是你家旁邊的7-11便利商店,存在的意義就是服務人類,在這裡可能代表服務其他裝置,所以我一直覺得(服務器)還挺貼切的。
服務器不見得指的是一台電腦,有時候為了交流方便,一個專門服務其他裝置的軟體,可能也會被稱之為服務器,哪怕這樣表達並不是很準確。
而syncthing的中繼服務器,理所應當就是為了服務syncthing,
它的作用是,讓兩台無法找到對方進行點對點傳輸的裝置,可以透過第三個裝置,也就是中繼服務器,來找到對方並傳輸資料。
在第一篇文章有提到過,syncthing社群就有提供中繼服務器,
但許多中繼都是民間提供的,傳輸速度可能不穩定,在其他人的電腦上轉發資料也不見得安全,所以我才更喜歡自己部署中繼服務器,
除了這個原因外,尤其在中國大陸地區,在中國地區連到其他國家的網路,一直以來都有許多障礙,例如速度很慢,可能幾百kb每秒,或是直接斷線,這些都是很常見的問題,
所以有時候有一台位置好、速度也快的中繼服務器,可能比兩台跨國裝置點對點直連的速度更快且穩定。
現在,如果你有租服務器,或有固定IP(可以給外部連線的那種),並且想擁有自己的syncthing中繼服務器,那麼這篇文章應該對你有所幫助!
syncthing的中繼服務器同樣也支援各大主流作業系統,也包括windows,但我是選擇在租用的linux電腦上部署中繼服務器。
畢竟windows比較適合日常使用,要拿來當服務器的話比較笨重,
而且一般服務器提供商有windows系統的也比較少,哪怕有,應該也跑很慢,
這篇文章我會在windows電腦上,連線到linux電腦來部署中繼,linux電腦的系統是ubuntu24.04發行版。
下載和所需工具
syncthing的中繼服務器有個自己的名字,叫做
strelaysrv
它跟syncthing主程式一樣,是一個單獨的可執行檔,開箱即用!
最簡便的用法是直接執行strelaysrv可執行檔,然後打開22067的tcp端口就能用,但strelaysrv本身沒有在後台運行的能力,所以才需要做其他額外的工作。
接下來,下面是倉庫頁面和下載頁面,你要先下載需要的可執行檔和服務配置檔:
- strelaysrv的倉庫
點我前往syncthing的中繼服務器 strelaysrv的github倉庫 - strelaysrv下載頁面
點我前往strelaysrv的官方下載頁面
下載的方式跟本系列第一篇介紹的方式一樣,也是在github的發布頁面,
在我發布這篇文章的時候,要找的下載檔案是
strelaysrv-linux-amd64-v2.0.9.tar.gz
這是linux系統的x64架構版本,也就是64位版本,你要根據自己的系統找對應的版本,忘記怎麼判斷的話可以回頭看本系列第一篇文章! - 如果無法從github發布頁面下載,你也可以從我的下載站下載,但可能不是最新版
點我下載strelaysrvV2.0.9 - strelaysrv服務配置檔
點我下載strelaysrv的服務配置檔
這個配置檔可以把strelaysrv配置成系統服務,可以設定為開機自動啟動,理論上應該支援ubuntu20.04以後的版本,
配置檔會以root的帳戶啟動位於
/opt/strelaysrv/
裡面的
strelaysrv
這個可執行檔,所以你等一下上傳可執行檔的時候記得放對位置 - 你可能還需要winSCP,用於上傳檔案、新增資料夾等等,
還需要在命令行登入到linux用來輸入指令,我是用PuTTY,當然你也可以直接在windows的cmd中,用ssh來連線到linux。
有一些linux的細節概念和工具的下載連結,可以參考本系列第二篇文章。
strelaysrv部署步驟
- 下載strelaysrv,無論你是從github發布頁面下載,還是從我的下載站下載都一樣
先解壓下載好的壓縮包,進到解壓後的資料夾,找到裡面的
strelaysrv
這是一個可執行檔 - 用你知道的任何方法把這個可執行檔上傳到linux中的這個路徑
/opt/strelaysrv/ - 在命令行視窗中,記得要先登入到linux系統,接著移動工作目錄到上面那個路徑,輸入指令:
cd /opt/strelaysrv/ - 先給可執行檔設定權限,避免權限不足無法執行,輸入指令:
chmod 755 /opt/strelaysrv/strelaysrv - 嘗試執行可執行檔,輸入指令:
./strelaysrv -pools=""
p.s -pools="" 這個參數是不讓你所執行的這個中繼添加到官方的中繼池中,
也就是說,加了這個參數只有你自己能用,沒加這參數的話,其他人的syncthing就有可能自動使用你的中繼來轉發數據。
我提供的服務配置檔也有加上這個參數,所以不用擔心自己的中繼會被其他人用喔! - 順利的話你可以看到有一些時間戳的輸出,但更好的方式是實際檢查中繼的狀態。
你需要用任何方式開第二個命令行視窗,登入到你的linux系統,然後用這個指令來查看strelaysrv的狀態,輸入指令:
curl -s http://localhost:22070/status
順利的話你可以在輸出中,找到類似這樣的關鍵資訊:
"startTime": "2025-09-22T16:24:45.911776349+08:00",
"uptimeSeconds": 7968,
"version": "v2.0.9"
從這個輸出可以看到中繼啟動的時間,已經運行了多久,以及版本號,
還有一些其他資訊等等再介紹 - 確認可以正常運行strelaysrv之後,可以把第二個命令行視窗關閉,回到第一個命令行視窗,按
ctrl+c
停止運行 - 接下來把前面我提供的服務設定檔下載回windows電腦上,並上傳到linux的這個路徑
/etc/systemd/system/ - 現在要重新加載服務配置,在命令行視窗中輸入:
sudo systemctl daemon-reload - 接著啟動strelaysrv的服務,輸入指令:
sudo systemctl start strelaysrv.service - 把strelaysrv設定為開機自動啟動,輸入指令:
sudo systemctl enable strelaysrv.service - 檢查服務是否順利啟動,輸入指令:
sudo systemctl status strelaysrv.service
順利運行的話應該會看到類似這樣的輸出
Active: active (running) since Mon 2025-09-22 16:24:45 CST; 2h 22min ago
Docs: https://github.com/syncthing/relaysrv
Main PID: 168551 (strelaysrv)
Tasks: 6 (limit: 1135)
重點是要看Active:後面顯示
running
這樣就代表正在運行啦!
可以按
ctrl+z 退出這個狀態的輸出 - 接下來要打開linux防火牆,
strelaysrv主要是使用22067這個port(端口)
而ubuntu主流用的防火牆大多是ufw,所以打開22067端口要輸入指令:
sudo ufw allow 22067/tcp
這樣就會開22067的tcp端口,當然更簡單一點也能直接輸入
sudo ufw allow 22067
不加/tcp的話,會同時把22067的tcp和udp端口打開
還有前面用到的檢查狀態的端口是22070,不過我是沒有開,要檢查狀態的話登入linux看就好,不然隨便一個人都能看到我中繼的狀態,
如果你想開,只要把上面的指令中的22067換成22070就可以了 - 有需要的話,隨時都可以重啟中繼服務器
sudo systemctl restart strelaysrv.service - 最後要知道自己的linux是什麼IP,要查看linux的對外IP,輸入指令:
curl -s ifconfig.me
可以看到類似
100.100.1.1
這就是對外IP,如果你有域名的話,之後也可以直接用域名,不用IP - 到這裡linux的部署就完成了,接下來需要在syncthing網頁中指定你自己的中繼服務器
設定syncthing使用自己的中繼服務器
- 在要使用中繼的裝置上打開syncthing網頁
- 點擊:操作→設定→連線
- 找到
同步通訊協定監聽位址 編輯區 default
這裡的default就是syncthing社群提供的中繼服務器,
可以同時提供多個中繼服務器,以逗號分隔,
在修改之前,我想要先告訴你自己搭建的中繼應該如何寫,它看起來會像這樣
relay://你的域名或中繼服務器的對外IP:22067
例如,用IP的話會像這樣
relay://100.100.1.1:22067
用域名的話會像這樣
relay://yyy.com:22067
看起來邏輯跟網址很像,只不過把http://換成了relay://
所以後面還可以加參數,不過根據文檔,最簡單的寫法就是上面那種,等同於直接使用預設參數 - 當有多個中繼的時候,syncthing會優先連線到編輯框中的第一個中繼,只有第一個中繼不能用的時候,才會連到後面的中繼,
所以這個編輯框中你可以有多種寫法,例如- 優先使用官方的中繼,官方的中繼不行的時候才使用自己的,
default, relay://yyy.com:22067 - 優先使用自己的中繼,自己的中繼不行的時候才使用官方的,
relay://yyy.com:22067, default - 完全使用自己的中繼,但如果自己的中繼掛了,就無法使用中繼轉發流量
relay://yyy.com:22067
確認編輯框內輸入無誤後,就可以點網頁底部的儲存按鈕,然後你可以回到linux系統上,確認syncthing是否有連到你自己的中繼
- 優先使用官方的中繼,官方的中繼不行的時候才使用自己的,
在linux中確認syncthing有沒有連到中繼服務器
在已經登入到linux系統的命令行視窗中輸入這個指令,來檢查中繼的狀態,這個指令跟前面用來檢查狀態的指令是一樣的→
curl -s http://localhost:22070/status
從輸出中你可以仔細找一下這些重要的資訊:
- numConnections: 1 - 有 1 個設備已經連接到你的中繼服務器
- numActiveSessions: 0 - 但目前沒有活躍的傳輸會話
- numProxies: 0 - 沒有正在進行的代理傳輸
這樣你就可以判斷到底有沒有連線到自己部署的中繼囉!
中繼的更多參數
在syncthing網頁中,填寫中繼的那個編輯框,其實還能指定更多參數,
relay://yyy.com:22067
這種只是最簡單的寫法,你還可以在這串後面加入其他參數,如果你需要的話~
主要支援的參數有:
- id=中繼的唯一id
每個中繼服務器在啟動時都會產生的唯一標識,看起來像一段英文+數字的亂碼,
這個id可以提高安全性,避免DNS劫持時,syncthing連線到其他人偽裝的假中繼 - networkTimeout=2m0s
網路連接超時時間,2m代表2分鐘,0s代表0秒。當中繼服務器與客戶端之間的網路連接超過這個時間沒有回應時,就會斷開連接 - pingInterval=1m0s
檢測間隔時間,1m代表1分鐘。中繼服務器會定期向連接的設備發送ping信號來檢查連接是否正常 - statusAddr=%3A22070
指定查看中繼狀態的端口,%3A是經過url編碼後的英文冒號:,22070是端口號。這個端口用於提供中繼服務器的狀態信息 - sessionLimitBps=0
每個會話的速度限制,單位是bytes per second (每秒位元組數),0代表不限速。當設定數值時,每個通過中繼的連接都會被限制在這個速度以下 - globalLimitBps=0
整個中繼的總速度限制,單位是bytes per second,0代表不限速。這個參數限制整個中繼服務器的總頻寬使用量
所以看起來比較有用的可能是id,其他的如果要維持預設狀態,在syncthing中也不用特別指定,
接下來我會告訴你如何找到中繼的唯一ID標誌。
如何獲取中繼的唯一id
你需要在部署了中繼的電腦中查找strelaysrv的唯一ID,有兩種方式可以找到中繼的唯一ID:
- 直接啟動strelaysrv可執行檔的時候,可以重點找類似這樣的輸出
relay://0.0.0.0:22067/?id=中繼的唯一ID,應該是超級長的英文+數字&networkTimeout=2m0s&pingInterval=1m0s&statusAddr=%3A22070
這個方法應該適用於所有版本的中繼服務器,通常在啟動的時候都會顯示唯一ID - 如果你已經把strelaysrv配置成linux的系統服務,那可以輸入這個指令從輸出中撈出包含唯一ID的日誌
sudo journalctl -u strelaysrv.service | grep "relay://"
同樣也是找類似這樣的輸出
relay://0.0.0.0:22067/?id=中繼的唯一ID,應該是超級長的英文+數字&networkTimeout=2m0s&pingInterval=1m0s&statusAddr=%3A22070
因為id很長,在複製的時候可能會自動變成多行,需要把它拼回同一行,還要記得去掉空格
在syncthing網頁中,給自己的中繼加上唯一ID提高安全性
在組合參數的時候,有幾個要點
假設最簡單版本是這樣→
relay://yyy.com:22067
要加參數的話要在這段的尾部加上/?,然後再加參數和參數的值,
參數名和參數值之間以=分隔,
每組參數之間以&這個符號分隔。
例如:
relay://yyy.com:22067/?id=唯一ID
所以你只要替換
yyy.com
成自己的IP或域名,然後把唯一ID替換成你找到的ID,就可以組合出完整的中繼地址了!
現在,在syncthing填寫中繼的編輯框中看起來可能類似這樣
relay://yyy.com:22067/?id=1234567890, default
這個寫法代表優先連自己的中繼,自己的中繼連不上的時候才使用官方中繼池的中繼。
修改完記得點儲存按鈕,
然後可以回到linux的命令行視窗中,輸入這個指令檢查連線狀態
curl -s http://localhost:22070/status
重點查看
numConnections:
後面的數字,
如果你現在只在一個syncthing裝置上指定自己的中繼,成功連線的話,你應該能看到輸出是1,例如
numConnections: 1
ok! 恭喜你有了自己專屬的中繼啦!