搭建和配置Syncthing發現和中繼伺服器

語言: CN / TW / HK

折騰藉口

Syncthing好是挺好的,但就是同步不給力,公共網路服務其質量參差不齊,網路也說不清。最好的解決方案還是自己搭建發現伺服器Syncthing Discovery Server和中繼伺服器Syncthing Relay Server,有效解決網路連線差,非區域網連線慢的問題。

需要材料:帶公網IP的伺服器或動態DNS的主機一臺。

引數設定資訊官網最全面,參考Welcome to Syncthing’s documentation!,這裡只是提少許個人需要的引數,一般使用足夠。

搭建發現伺服器 Syncthing Discovery Server

下載 stdiscosrv 程式

下載當前主機的發現伺服器主程式 stdiscosrv

選擇對應版本,伺服器基本是stdiscosrv-linux-amd64

下載:

shell wget https://github.com/syncthing/discosrv/releases/download/v1.18.1/stdiscosrv-dragonfly-amd64-v1.18.1.tar.gz

解壓:

shell tar -xzvf stdiscosrv-dragonfly-amd64-v1.18.1.tar.gz

準備以及引數

建立證書

程式好像也會自動建立證書,這一步或許可以忽略

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout ~/key.pem -out ~/cert.pem

注意更改目錄

引數

官網給出了詳細的引數配置 Syncthing Discovery Server,簡單說幾個我用到的引數。

-cert``=<file>-key``=<file>預設指定執行程式目錄下的證書檔案,建議將證書拷貝到當前目錄下。

-listen``=<address>監聽埠,預設8443,改不改無所謂,如果有防火牆記得通過埠。

-debug除錯模式,可以檢視連結資訊

-replication-listen``=<address>我也不太明白這個引數的意義,可能適用於組多伺服器

執行

將證書複製到程式所在資料夾,執行即可:

shell ./stdiscosr

如果沒有將證書放好位置,直接使用命令應該會自動建立證書,或者將證書複製到當前目錄再執行。

shell cp *.pem syncthing/stdiscosrv-linux-amd64-v0.14.51

或者執行:

shell ./stdiscosrv -cert ~/cert.pem -key ~/key.pem 1

注意

記得在防火牆裡面放行埠,可以安裝ufw,然後放行埠

shell sudo apt install ufw sudo ufw allow 8443

搭建中繼伺服器 Syncthing Relay Server

搭建好發現伺服器後,雖然能找到不同網路的主機了,但是非區域網相互傳輸的速度還是差強人意。

中繼伺服器列表:Relay Pool Data,雖有不少國內伺服器,但是搭建自己的伺服器優勢也顯而易見。

下載strelaysrv程式

下載當前主機的發現伺服器主程式 relaysrv

選擇對應版本,伺服器基本是strelaysrv-linux-amd64

下載:

shell wget https://github.com/syncthing/relaysrv/releases/download/v1.15.0/strelaysrv-dragonfly-amd64-v1.15.0.tar.gz

解壓:

shell tar -xzvf strelaysrv-dragonfly-amd64-v1.15.0.tar.gz

準備以及引數

建立證書

參考之前操作,或直接複製過去就好了。

shell cp *.pem syncthing/strelaysrv-linux-amd64-v0.14.48

引數(必看)

官網給出了詳細的引數配置 Syncthing Relay Server,上面提到的不再重複

-global-rate``=<bytes/s>全侷限速,bytes作為單位,換算成MB應當乘兩個1024,可以去這裡換算。

-pools=<pool addresses>非常重要的設定,如果不設定將作為公共伺服器釋出,他人可以免費使用你的伺服器流量,三思!建立私人伺服器的方法是新增引數-pools=""

-protocol``=<string>協議

-status-srv``=<listen addr>監聽地址,有的伺服器需要設定當前公共ip

執行

shell ./strelaysrv -pools="" -global-rate 3145728 -protocol=tcp4

注意

開啟防火牆支援,使用ufw或:

shell iptables -I INPUT -p tcp --dport 22067 -j ACCEPT iptables -I INPUT -p tcp --dport 22070 -j ACCEPT

配置客戶端

伺服器地址配置

執行程式後會生成一個id,將其拷貝下來

發現伺服器:

https://ip_address:port/?id=your_id

中繼伺服器地址:

relay://ip_address:port/?id=your_id

客戶端中替換時,如果可以用逗號和default分開,這樣就能同時使用多個地址。

監聽地址

參考官方文件:Listen Addresses

syncthing的地址可以理解成三類:動態中繼池,靜態中繼地址,TCP埠。

  1. 從網上獲取中繼池獲取終極伺服器
  2. 自定義一個伺服器地址
  3. 本地埠監聽,用於區域網連線

中繼伺服器配置

如果像我一樣只只是同步自己的服務,就可以簡單設定為:

tcp4://0.0.0.0:22000,relay://ip_address:22067?id=abcd123...

指定tcp4即ipv4的原因是因為我有ipv6網路,但是國內v6覆蓋不全,不如簡簡單單區域網用tcp,遠端就用自己的中繼伺服器,避免其它的低速遠端伺服器。

發現伺服器配置

default, https://ip_address:8443/?id=abcd123...

這裡新增default的原為了接入一些網路的共享庫,如果不需要去掉即可。

結語

Syncthing目前不支援佔位符操作還是挺可惜的,但是設定了自定義的中繼伺服器和發現伺服器之後,可靠性將大大提升,今後可以作為一個常用的軟體了,更方便得同步各個裝置之間的檔案,免去很多折騰的時間。