Syncthing 怎麼用?從裝置配對到檔案同步的實用筆記

整理 Syncthing 官方文件裡的關鍵使用點:裝置 ID、資料夾共享、同步模式、防火牆連接埠、忽略規則、檔案版本、安全邊界,以及在 NAS、Windows、Android 多裝置同步時需要注意的地方。

Syncthing 系列目錄

Syncthing 適合用來做多裝置之間的點對點檔案同步。它不是傳統網路硬碟,也不是把所有資料先上傳到某個中心伺服器再下載回來,而是讓已授權的裝置直接交換檔案。

如果你正在考慮用它同步 Markdown 筆記、照片備份、設定檔或家庭 NAS 目錄,重點不只是「能不能同步」,而是先理解幾個基本概念:裝置、資料夾、裝置 ID、同步方向、發現方式和衝突處理。

Syncthing 解決什麼問題

Syncthing 的核心場景是:你有兩台或多台裝置,希望它們之間保持某個目錄一致。

典型例子:

  • Windows 桌機和筆電之間同步工作資料。
  • 手機和 NAS 之間同步照片或文件。
  • 多台 Linux 伺服器之間同步設定範例、腳本或小型資料目錄。
  • Obsidian、Joplin 外部附件、Markdown 筆記目錄在多裝置間同步。

它更適合「自己控制裝置和資料」的同步場景。如果你需要多人權限管理、線上預覽、分享連結或協作編輯,傳統網路硬碟或文件協作平台會更合適。

第一次啟動後會發生什麼

官方入門文件建議把兩台機器並行設定。Syncthing 裡,一台機器叫一個 device。你正在設定的機器是 local device,另一台要同步的機器是 remote device。

第一次啟動 Syncthing 時,它會產生設定檔、加密金鑰和裝置 ID,並預設在本機開啟 Web GUI:

1
http://127.0.0.1:8384/

這個 Web GUI 是日常設定入口。官方文件也提到,預設可能會建立一個 Default Folder,通常對應使用者目錄下的 Sync 資料夾。你可以先用它測試,也可以後面刪除並新增自己的目錄。

裝置 ID 是配對基礎

Syncthing 的裝置配對靠 device ID。

每台裝置首次啟動時都會產生自己的金鑰,裝置 ID 可以理解為這個裝置憑證的可讀指紋。兩台裝置只有互相加入對方的裝置 ID,才會建立連線並同步。

實際操作順序通常是:

  1. 在兩台裝置上都啟動 Syncthing。
  2. 分別開啟 Web GUI。
  3. 在 A 上加入 B 的 device ID。
  4. 在 B 上加入 A 的 device ID。
  5. 選擇要共享的資料夾。
  6. 儲存後等待兩邊連線。

裝置 ID 不需要像密碼一樣保密,但也不要隨便把自己的同步拓撲公開到不必要的地方。真正需要保護的是裝置私鑰、Web GUI 管理權限和同步目錄本身。

資料夾不是自動全機同步

Syncthing 同步的是你明確新增的 folder,不會預設同步整台機器。

每個資料夾都有自己的路徑、ID、共享裝置和同步類型。常見做法是按用途拆分:

  • notes/:Markdown 筆記。
  • photos-inbox/:手機照片中轉。
  • docs/:多裝置文件目錄。
  • scripts/:小腳本和設定範例。

不要一開始就同步過大的系統目錄、下載目錄或混雜目錄。目錄越複雜,衝突、忽略規則、權限差異和掃描成本越容易變成長期維護問題。

三種常見資料夾類型

官方文件裡把資料夾類型分得很清楚。實際使用時,先理解這三種就夠了。

Send & Receive

這是預設模式。這個資料夾既傳送本機變更,也接收其他裝置變更。

適合:

  • 多台電腦共同編輯筆記。
  • 多裝置共同維護文件。
  • 普通雙向同步目錄。

如果兩台裝置同時改了同一個檔案,Syncthing 會產生衝突檔案,而不是直接靜默覆蓋。

Send Only

這個模式下,本機像「參考副本」。它會向其他裝置傳送變化,但不會套用其他裝置傳來的變化。

適合:

  • 主裝置向備份裝置分發檔案。
  • 希望某台機器上的目錄狀態作為基準。
  • 不希望遠端修改反向影響本機。

如果遠端發生變化,本機可能顯示 out of sync。此時 Web GUI 會提供 Override Changes,用本機狀態覆蓋叢集裡的其他狀態。這個按鈕要謹慎使用。

Receive Only

這個模式和 Send Only 相反。它接收叢集裡的變更,但本地改動不會再傳給其他裝置。

適合:

  • 備份目標。
  • 唯讀鏡像。
  • 不希望本地誤操作污染主同步目錄的裝置。

如果本地出現修改,Web GUI 會提示 Revert Local Changes,可以把本地變更撤回到叢集版本。

防火牆和連接埠要先看

Syncthing 能透過發現服務、NAT、relay 等機制讓裝置互相找到,但網路越清楚,連線越穩定。

官方防火牆文件列出的關鍵連接埠是:

1
2
3
22000/TCP
22000/UDP
21027/UDP

其中:

  • 22000/TCP 用於 TCP 同步流量。
  • 22000/UDP 用於 QUIC 同步流量。
  • 21027/UDP 用於本地發現廣播或多播。

如果裝置在同一個區域網路內,但一直發現不了,優先檢查本機防火牆、路由器隔離、Wi-Fi 和 LAN 是否被分到不同網段。

如果裝置跨公網或跨 NAT,能做連接埠轉發時,直接連線通常比 relay 更好。沒有連接埠轉發時,relay 也可能讓裝置連上,但效能會比直連差。

Linux 上如果使用 ufw 並安裝了對應套件,可以用:

1
2
sudo ufw allow syncthing
sudo ufw status verbose

Web GUI 預設只監聽本機的 127.0.0.1:8384。如果要遠端存取 GUI,可以改成 0.0.0.0:8384,但這代表管理介面對外暴露,必須同時考慮密碼、HTTPS、反向代理或 SSH 隧道。普通家庭場景下,更推薦用 SSH 隧道存取遠端 GUI。

.stignore 要放在同步根目錄

如果有些檔案不想同步,可以在同步資料夾根目錄建立 .stignore

注意幾個細節:

  • .stignore 必須放在同步資料夾的根目錄。
  • 規則相對於同步根目錄生效。
  • .stignore 本身不會同步到其他裝置。
  • 檔案內容應使用 UTF-8 編碼。

一個簡單例子:

1
2
3
4
5
(?d).DS_Store
node_modules
*.tmp
cache/**
!/cache/keep.txt

(?d) 的作用是:當這些被忽略檔案阻止目錄刪除時,允許 Syncthing 刪除它們。適合 .DS_Store 這類系統自動產生檔案。

驚嘆號 ! 是反向規則,用來把某些檔案重新納入同步。但反向規則可能導致 Syncthing 遍歷本來會忽略的目錄。規則很多時,最好先從簡單規則開始。

檔案版本不是本地復原

Syncthing 支援檔案版本保留,但它的語義容易誤解。

官方文件強調,版本保留是「接收遠端變更時,把舊版本歸檔」。也就是說,如果 A 開啟了版本保留,B 修改了檔案並同步到 A,A 會把被替換的舊檔案保存起來。但如果 A 自己本地修改了檔案,Syncthing 不能替 A 保存修改前的版本。

常見版本策略包括:

  • Trash Can File Versioning:類似回收桶,被遠端刪除或替換的檔案移到 .stversions
  • Simple File Versioning:保留固定數量的歷史版本。
  • Staggered File Versioning:按時間間隔保留版本,越舊越稀疏。
  • External File Versioning:交給外部腳本處理。

如果你用 Syncthing 同步重要文件,建議至少在備份目標裝置上開啟簡單版本或回收桶版本。它不能代替完整備份,但能減少誤刪和誤覆蓋的損失。

同步衝突如何產生

Syncthing 會識別衝突。兩台裝置同時修改同一個檔案,而且內容不同,就可能產生類似這樣的衝突檔案:

1
filename.sync-conflict-date-time-modifiedBy.ext

這比靜默覆蓋安全,但也代表你要定期清理衝突檔案。

容易產生衝突的場景:

  • 多裝置同時開啟同一份 Markdown 筆記。
  • 應用程式自動寫入同一個狀態檔。
  • 同步 .obsidian/workspace.json 這類裝置狀態檔。
  • Windows、macOS、Android 之間出現大小寫檔名差異。

如果同步筆記,建議把正文、附件和模板同步;工作區狀態、快取、外掛臨時檔要謹慎處理,必要時放進 .stignore

安全邊界

Syncthing 的安全目標之一是:未授權裝置不能加入同步叢集,傳輸中的檔案內容不能被旁路監聽者讀取。

官方安全文件說明,裝置間流量由 TLS 保護,連線建立時會檢查裝置憑證指紋是否在允許清單中。換句話說,只有雙方配置了彼此的裝置 ID,才會真正建立同步關係。

但這不等於「使用 Syncthing 這件事不可見」。例如:

  • 開啟全域發現時,裝置會向發現伺服器公告裝置 ID 和監聽位址。
  • 本地發現會在區域網路內發送廣播或多播。
  • relay 伺服器會知道連線裝置的 device ID,但不能解密同步內容。
  • Web GUI 如果對外開放,會暴露這台機器執行了 Syncthing。

所以安全建議很直接:

  • 不要把 Web GUI 暴露到公網,除非你明確做好認證和加密。
  • 只加入你信任的裝置。
  • 重要目錄配合系統磁碟加密或單獨備份。
  • 不需要全域發現、relay 或自動升級時,可以按場景關閉,但要接受連線便利性下降。

不受信任裝置加密

Syncthing 還支援 Untrusted / Encrypted Devices。這個功能可以讓某個不受信任裝置只保存加密後的資料。

一個典型場景是:你有一台雲端伺服器或外部機器,希望它參與同步、承擔中轉或備份角色,但不希望它看到明文檔案。可信裝置向它傳送資料時,會使用資料夾密碼加密;其他可信裝置拿到同樣密碼後,可以從這個不受信任裝置同步並解密。

但官方文件也提醒,這個功能仍應視為 beta / testing。它適合有明確需求的人謹慎使用,不建議一開始就作為主同步方案。

需要特別記住:

  • 檔案資料、檔名、時間、雜湊和目錄結構會被保護。
  • 資料夾 ID、標籤和大致檔案大小不屬於完整保護範圍。
  • 密碼和 folder ID 要可靠保存。
  • 不受信任裝置上的資料夾類型要設為 Receive Encrypted

如果只是家庭 NAS、自己的電腦和手機之間同步,通常先用普通可信裝置模式,把系統登入、磁碟加密和備份做好,會更容易維護。

實用設定建議

如果你準備用 Syncthing 長期同步筆記或文件,可以按這個思路設定:

  1. 每類資料單獨建資料夾,不要混在一個超大目錄裡。
  2. 主力電腦使用 Send & Receive
  3. NAS 或備份機可以考慮 Receive Only,並開啟檔案版本。
  4. 手機端只同步必要目錄,不要同步應用快取目錄。
  5. .stignore 排除快取、臨時檔、工作區狀態檔。
  6. 區域網路內優先保證 22000/TCP22000/UDP21027/UDP 可用。
  7. Web GUI 盡量保持本機監聽,需要遠端管理時優先用 SSH 隧道。
  8. 重要資料不要只依賴同步,仍然需要獨立備份。

適合和不適合

Syncthing 適合:

  • 你希望資料主要留在自己的裝置上。
  • 你願意理解裝置配對、同步目錄和衝突處理。
  • 你有 NAS、家用伺服器或多台個人裝置。
  • 你想同步 Markdown、照片中轉、腳本、輕量文件。

Syncthing 不太適合:

  • 需要多人線上協作編輯。
  • 需要網頁端檔案預覽和分享連結。
  • 需要細粒度團隊權限。
  • 不想處理任何網路、防火牆和衝突問題。

它更像一個可靠的「裝置間同步層」,而不是完整的雲端硬碟產品。用得好,Syncthing 可以把 NAS、電腦、手機連成一個可控的資料網路;用得太隨意,也可能因為衝突、誤刪、忽略規則和網路設定變成維護負擔。

參考資料

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計