Decentralization? We're still early!

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

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

    發布人 Brave 2023-12-31 06:50

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

    Brave 回复 9 months, 3 weeks ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在