Syncthing:一个安全、私密、易用的文件同步工具

    • #19350

      一、為什麼你需要 Syncthing

      在信息時代,我們經常需要在不同的設備之間同步文件,比如照片、文檔、音樂等。有時候,我們也需要和其他人共享文件,比如家人、朋友、同事等。

      為了實現這些功能,我們通常會使用一些雲存儲服務,比如 Dropbox、Google Drive、OneDrive 等。這些服務雖然方便,但也有一些缺點:

      ⚠️ 傳統雲存儲的主要問題
      💰 成本問題:需要上傳文件到雲端,占用網絡帶寬和存儲空間,可能產生費用
      🔐 隱私風險:需要信任第三方服務提供商,可能存在隱私洩露、數據丟失、安全風險等問題
      📋 使用限制:需要遵守第三方服務提供商的規則,可能受到限制或封禁
      🌐 網絡依賴:需要依賴互聯網連接,可能受到網絡不穩定、速度慢、斷網等影響

      值得特別注意的是,近年來主流雲存儲服務的限制正在不斷收緊。例如,Dropbox 已將免費用戶的關聯設備數量限制為僅 3 台,這對於擁有多台設備的用戶來說是一個重大限制。Google Drive 和 OneDrive 等服務也在逐步調整其免費存儲空間額度和使用政策。這些變化促使越來越多用戶開始尋找替代方案。

      那麼,有沒有一種方法,可以讓我們直接在自己的設備之間同步文件,而不需要依賴任何第三方服務呢?答案是有的,那就是 Syncthing


      二、什麼是 Syncthing

      Syncthing 是一個開源的實時文件同步程序,它可以在兩台或多台計算機之間同步文件,無論它們在哪裡,只要它們能夠互相連接。

      根據 Slant 社區的評比,在「最佳個人文件同步解決方案」問題中,Syncthing 排名第 1,而 Dropbox 排名第 13。這充分說明了 Syncthing 在開源社區和注重隱私用戶群體中的受歡迎程度。

      🌟 Syncthing 的核心特點

      🔒 私密性(Private)

      你的數據只存儲在你自己的設備上,不會上傳到任何其他地方。沒有中央服務器,也沒有任何第三方可以窺探或訪問你的數據。

      與 Dropbox 等傳統雲存儲不同,Syncthing 採用真正的點對點(P2P)架構。當你的設備進行同步時,數據直接在設備之間傳輸,而不是先上傳到雲端再下載。這意味著:

      • 你的私人照片、敏感文檔永遠不會經過任何第三方服務器
      • 即使 Syncthing 項目本身停止運營,你的同步系統也能繼續正常工作
      • Dropbox 不提供端對端加密,文件對管理員、政府等可見,並且會廣泛收集和分發用戶數據給商業第三方

      🔌 極端場景演示:如果你在兩台完全斷開外網、僅通過局域網(甚至是兩台電腦連一根網線)連接的設備上使用 Syncthing,它依然能以極速同步,因為它是真正的 P2P 協議——不需要任何互聯網連接!

      🛡️ 安全性(Secure)

      所有的通信都使用 TLS 加密。加密方式包括完美前向保密(Perfect Forward Secrecy),防止任何竊聽者獲取你的數據。每個設備都有一個強加密證書,只有你明確允許的設備才能連接到你的其他設備。

      根據 Syncthing 官方安全文檔,其安全機制包括以下幾個層面:

      安全特性說明
      🔐 TLS 1.2/1.3 加密所有數據傳輸均使用 TLS 加密,採用 Block Exchange Protocol v1
      🔑 設備證書認證每個 Syncthing 設備生成 ECDSA 設備證書,設備 ID 是該證書的 SHA-256 哈希值
      🤝 手動信任建立連接新設備需要明確批准,必須手動驗證證書指紋
      🔄 中繼加密即使通過中繼服務器傳輸,數據也是端對端加密的,中繼服務器只能看到加密流
      🔐 不受信任設備支持可將設備標記為「不受信任」,強制使用加密密碼共享文件夾

      安全最佳實踐提示:

      任何能夠訪問你設備上 Syncthing TLS 密鑰和配置文件的人,都可以冒充你的設備、連接你的對等節點,並訪問你的同步文件。如果你的設備丟失,請務必從其他設備上撤銷其訪問權限。如果你在加密磁盤上同步機密數據以防止設備盜竊,請將 Syncthing 配置文件夾也放在同一加密磁盤上,以避免洩露密鑰和元數據。

      🌐 開放性(Open)

      協議是一個公開的文檔,沒有任何隱藏的魔法。源代碼都在 GitHub 上,你可以看到你得到的是什麼,沒有任何隱藏的惡意。開發和使用都是公開的,任何問題都可以在論壇上討論和解決。

      Syncthing 採用 MPL-2.0 開源許可證,這意味著:

      • 任何人都可以審計代碼,確保沒有後門或惡意功能
      • 社區可以自由地 fork 和改進項目(如 Android 版本的社區分支)
      • 項目的發展方向由社區共同決定,而非單一商業公司

      三、Syncthing vs 傳統雲存儲:詳細對比

      為了幫助你更好地理解 Syncthing 與傳統雲存儲服務的差異,以下是一個詳細的對比表格:

      比較項目SyncthingDropbox/Google Drive
      💰 費用完全免費(僅需自己的存儲設備)免費額度有限,超出需付費
      📱 設備數量限制無限制Dropbox 免費版限制 3 台
      🚀 局域網速度極快(直接設備對設備傳輸)受限於雲端上傳下載速度
      🔒 端對端加密✅ 支持❌ 不支持(管理員可訪問)
      🌐 離線可用性完全離線可用需要網絡連接
      🔗 文件分享鏈接不支持公開鏈接支持一鍵生成分享鏈接
      📊 學習曲線中等(需要理解設備 ID 等概念)簡單(安裝即用)
      🏢 企業支持社區支持商業支持團隊

      根據 XDA Developers 的實際使用報告,從 Dropbox 切換到 Syncthing 的主要收獲包括:

      1. 局域網內同步速度顯著提升——當你的設備在同一 WiFi 或以太網時,Syncthing 的速度「快得驚人」
      2. 完全控制數據存儲位置——不再依賴第三方服務器
      3. 無存儲空間限制——只要你的硬件有足夠空間

      但也需要注意以下權衡:

      • 沒有公開分享鏈接功能——如果你經常需要與非 Syncthing 用戶分享文件,這可能是個不便
      • 需要一定的技術配置——初次設置需要理解設備 ID、防火牆例外等概念

      四、支持的平台

      Syncthing 擁有極其廣泛的平台支持,幾乎可以在所有功能性操作系統上運行:

      平台類型支持的系統備註
      🖥️ 桌面系統Windows、macOS、Linux(各發行版)✅ 官方支持
      🖧 服務器/NASFreeBSD、Solaris、OpenBSD、NetBSD、Illumos、DragonFly BSD✅ 官方支持
      📱 AndroidAndroid 6+⚠️ 需使用社區 Syncthing-Fork
      📱 iOSiOS 12+⚠️ 無官方客戶端,需使用付費第三方應用(如 Möbius Sync)
      🔧 特殊架構RISC-V、ARM(包括樹莓派等)✅ 官方支持
      🏠 Homelab 平台Umbrel、TiPi、TrueNAS、Unraid、Docker 等✅ 社區/官方支持

      五、如何安裝部署 Syncthing

      Syncthing 的使用也很簡單,只需要幾個步驟:

      方法一:官方安裝

      下載並安裝 Syncthing。Syncthing 支持多種操作系統和平台。你可以在 官網下載頁面 找到適合你的版本。

      2025 年 8 月,Syncthing 發布了重大的 2.0 版本更新,帶來了多項重要變化(截至 2026 年 1 月,最新版本為 2.0.13):

      Syncthing 2.0 主要更新
      📊 數據庫遷移:從 Google 的 LevelDB 遷移到 SQLite,更易於維護且 bug 更少。注意:首次啟動 2.0 版本時會觸發一次性遷移,大型設置可能需要較長時間
      🗑️ 刪除項目策略:刪除的項目不再永久保留在數據庫中,而是在 15 個月後被遺忘(可通過 --db-delete-retention-interval 調整)
      ⌨️ 命令行現代化:不再支持舊的單破折號長選項(如 -home 必須改為 --home
      📝 日誌改進:新增 WARNING 日誌級別,INFO 級別更加詳細
      🔗 多連接默認啟用:v2 設備之間默認使用三個連接(1 個用於索引元數據,2 個用於數據交換)
      📡 UDP 端口映射:支持 QUIC 的 UDP 端口映射,改善特定防火牆後用戶的連接性
      🚫 移除滾動哈希:不再支持移位數據的滾動哈希檢測,因為實際效果有限,移除後掃描和同步更快更高效

      方法二:Homelab 工具安裝(推薦新手)

      一個更加簡單/傻瓜的安裝 Syncthing 的方法是使用 Homelab 工具,比如 Umbrel 或者 TiPi。這些工具提供了一鍵安裝的體驗,無需手動配置。

      Docker 安裝方式:

      docker pull syncthing/syncthing:2.0.13
      # 或者使用 GitHub Container Registry docker pull ghcr.io/syncthing/syncthing:2.0.13

      🤖 Android 設備安裝

      ⚠️ 重要提示:原版 Syncthing Android 應用已於 2024 年底停止維護,並已從 Google Play 商店下架(2025 年 5 月起)。這是由於 Google Play 商店的權限限制政策和維護者個人動力原因所導致。

      現在 Android 用戶應使用社區維護的 Syncthing-Fork,最新版本為 2.0.12.1(2025 年 12 月發布)。值得一提的是,這個社區分支的功能甚至比原版更豐富且更新更頻繁:

      Syncthing-Fork 特性說明
      🔋 省電優化「每小時同步一次」模式,大幅節省電量,解決了原版的「電池殺手」問題
      ⚙️ 精細控制可為每個設備和文件夾單獨設置同步條件
      📱 Android 11+ 支持支持外部 SD 卡的雙向同步
      📊 進度顯示UI 直接顯示文件夾、設備和整體同步進度
      🔍 設備發現可發現同一網絡上的其他 Syncthing 設備並輕鬆添加
      📱 系統要求最低 Android 6(由於 AndroidX 依賴要求)

      安裝方式:

      1. 推薦:通過 F-Droid 安裝(可獲得自動更新通知,更安全)
      2. 備選:從 GitHub Releases 下載 APK

      從 v1 升級到 v2 的步驟:

      設置 → 導出配置 → 卸載 v1 → 安裝 v2 → 設置 → 導入配置

      ⚠️ 重要:首次啟動後不要強制停止應用!它會執行一次性數據庫遷移,中斷此過程可能損壞配置或數據。


      🍎 iOS 設備安裝(特殊情況)

      ⚠️ 重要提示:由於 iOS 系統的沙盒機制非常嚴格,不允許後台進程自由掃描文件系統,因此始終沒有真正意義上的「官方 Syncthing 客戶端」。

      iOS 解決方案說明
      Möbius Sync(推薦)付費第三方應用,實現 Syncthing 協議,可在 App Store 下載
      通過家庭服務器中轉手機文件先上傳到 NAS/服務器,再由服務器與其他設備同步

      💡 選擇建議:如果你的設備生態以 iOS 為主,Syncthing 可能不是最佳選擇。但如果只是作為同步鏈中的一環(如 iPhone → NAS → Windows 電腦),仍然可以通過 Möbius Sync 或間接方式實現。


      六、運行並配置 Syncthing

      Syncthing 提供了一個基於瀏覽器的用戶界面,你可以通過它來配置和監控 Syncthing。

      你可以在瀏覽器中輸入 http://localhost:8384 來訪問用戶界面。

      首次訪問時,建議你立即設置 GUI 密碼以確保安全,特別是如果你的設備可能被他人物理訪問的話。


      📂 如何具體使用 Syncthing

      步驟一:添加同步文件夾

      你可以在用戶界面中添加你想要同步的文件夾,給它一個名稱和路徑。你也可以設置一些選項:

      文件夾類型選項:

      類型說明適用場景
      📤 Send Only(僅發送)此設備只發送文件,不接收其他設備的更改存放「主副本」的設備
      📥 Receive Only(僅接收)此設備只接收文件,不發送本地更改備份目標設備
      🔄 Send & Receive(發送和接收)雙向同步(默認)一般同步需求

      版本控制選項詳解:

      類型工作方式適用場景
      🚫 無版本控制刪除即刪除,無法恢復不需要歷史版本
      🗑️ 回收站式(Trash Can)文件刪除/覆蓋後移入 .stversions 隱藏文件夾簡單恢復需求
      📋 簡單版本控制(Simple)保留指定數量的舊版本需要保留多個歷史版本
      📊 階段式(Staggered)智能保留:近期密集、遠期稀疏推薦:平衡存儲與歷史
      🔧 外部版本控制(External)調用自定義腳本處理版本高級用戶,可集成 Git 等

      💡 階段式版本控制的默認策略

      • 最近 1 小時內:保留所有版本
      • 最近 1 天內:每小時保留 1 個版本
      • 最近 30 天內:每天保留 1 個版本
      • 最近 1 年內:每週保留 1 個版本

      步驟二:添加同步設備

      然後,你可以添加你想要同步的設備,給它一個名稱和 ID。你可以在設備上運行 Syncthing,查看設備的 ID,或者掃描設備上的二維碼。你也可以設置一些選項,比如地址、壓縮、限速等。

      設備選項詳解:

      • 地址:可設置為 dynamic(自動發現)或指定 IP 地址
      • 壓縮:可選擇 All Data(全部壓縮)或 Metadata Only(僅元數據壓縮)
      • Introducer(介紹者):啟用後,該設備可以自動介紹其他設備給你
      • 不受信任設備:可將設備標記為不受信任,強制對共享文件夾使用加密

      步驟三:選擇同步配對

      最後,你可以選擇哪些文件夾和哪些設備要同步,然後保存並應用設置。Syncthing 就會開始在你的設備之間同步文件了。

      如果你想要和其他人共享文件夾,你也可以把你的設備 ID 告訴他們,讓他們添加你的設備,並選擇要共享的文件夾。你也可以接受其他人共享給你的文件夾,只要你知道他們的設備 ID,並同意接受。


      七、常見使用場景

      以下是一些 Syncthing 社區常見的使用場景:

      使用場景說明
      📷 手機相機備份將手機照片自動同步到電腦或 NAS
      💻 多設備工作同步在台式機、筆記本、工作電腦之間保持文件一致
      👨‍👩‍👧‍👦 家庭文件共享家庭成員之間共享照片、視頻等
      🎬 視頻/照片編輯大文件在局域網內快速同步,無網絡延遲
      💾 異地備份在不同地點的服務器之間同步,實現異地容災
      🔧 開發環境同步在不同電腦之間同步代碼和配置文件

      家庭多地點備份示例:

      一位用戶分享了他的設置:在三個不同地點運行三台服務器互相同步。每個地點都是家庭成員的家,有額外的設備(手機、筆記本、台式機)與本地服務器同步。如果任何手機或服務器損壞,只需更換設備並重新設置同步即可恢復所有文件。


      八、進階知識與技巧

      以下是一些深入玩家圈子的「冷知識」,幫助你更好地理解和使用 Syncthing。

      💡 文件夾 ID 的獨特機制

      Syncthing 使用一種唯一的字符 ID 來標識文件夾(類似 abcde-fghij)。

      💡 冷知識:在不同設備上,你可以為同一個同步文件夾設置完全不同的路徑和顯示名稱,只要它們的「文件夾 ID」一致,軟件就會認為它們是同一個同步對象。

      示例

      • 電腦 A:C:\Users\John\工作文檔 → ID: work-docs
      • 電腦 B:/home/john/Documents/Office → ID: work-docs
      • 這兩個完全不同的路徑會被視為同一個文件夾進行同步!

      🌐 全球發現與中繼服務的真相

      你可能會好奇:即便兩台設備都在複雜的企業內網或防火牆後,它們通常也能互相發現並同步。這是如何做到的?

      機制說明
      🔍 全球發現服務器幫助設備找到彼此的 IP 地址
      🔄 中繼服務器(Relay)當直連失敗時,通過中繼轉發數據(數據仍然是端對端加密的)

      🌍 冷知識:這些中繼服務器是由全球的志願者無償捐贈運營的。Syncthing 社區維護著一個分布式的中繼網絡,這也是開源精神的體現。

      🔒 隱私選項:

      如果你對隱私有更高要求,可以在設置中:

      • 關閉「全球發現」—— 僅通過手動輸入地址或局域網發現連接
      • 關閉「中繼」—— 僅限直連,無法直連時不同步
      • 自建中繼服務器 —— 完全控制數據傳輸路徑

      ⚡ 性能優化:.stignore 文件

      Syncthing 為了實時發現文件變化,會使用系統的文件監聽機制。但這可能帶來性能問題:

      ⚠️ 性能殺手:如果你同步的是包含數百萬個小文件的文件夾(如 node_modules.git、編譯緩存),過高的掃描頻率會導致 CPU 占用飆升

      解決方案:使用 .stignore 文件

      在同步文件夾的根目錄創建 .stignore 文件,排除不需要同步的內容:

      // 常用排除規則示例 
      // 開發相關 node_modules
      .git __pycache__
      *.pyc .cache dist
      build
      
      // 系統文件 .DS_Store Thumbs.db desktop.ini 
      // 臨時文件 *.tmp *.temp ~*

      💡 進階技巧:你也可以使用 #include 指令引入共用的忽略規則文件,方便在多個文件夾之間統一管理。


      九、重要提醒:Syncthing ≠ 備份

      這是一個常見的誤解,必須澄清:Syncthing 是文件同步工具,而不是備份工具。

      同步(Sync)備份(Backup)
      保持多個位置的文件完全相同創建數據的冗餘副本
      刪除會被同步傳播刪除不會影響備份副本
      雙向/多向實時更新通常是單向、定期的快照

      ⚠️ 風險警示:

      如果你將手機的「相機照片」文件夾同步到電腦,而手機上的照片被意外刪除(Syncthing 在兩個設備上都運行時),Syncthing 會注意到這個變化並刪除電腦上的同步副本

      更嚴重的情況是:勒索軟件感染任何一台設備後,可能會導致所有設備都收到被加密/損壞的數據。

      推薦的安全策略:

      1. 啟用版本控制:在接收設備上設置「Staggered」階段式版本控制
      2. 使用 Send Only 模式:在「主副本」設備上設置為僅發送,防止接收端意外覆蓋源數據
      3. 配合傳統備份:建議將重要文件保存在至少兩個外部驅動器上——一個作為日常備份,另一個作為週/月備份,存放在不同位置

      总之,Syncthing 是一個強大、便攜、易用的文件同步工具,它可以讓你在你自己的設備之間同步文件,而不需要任何第三方服務。你可以完全控制你的數據,選擇它存儲的位置,是否與其他人共享,以及如何在網絡上傳輸。特別是在雲存儲服務不斷收緊限制、隱私問題日益受到關注的今天,掌握一個去中心化的同步工具變得越來越重要。

  • 抱歉,回覆主題必需先登入。