Перейти к содержанию

Syncthing

Материал из Википедии — свободной энциклопедии
Syncthing
Логотип программы Syncthing
Скриншот программы Syncthing
Тип программа для синхронизации файлов[вд]
Написана на Go[1][2]
Операционные системы GNU/Linux, Android, Windows, macOS, BSD, Solaris, FreeBSD, NetBSD, OpenBSD и DragonFly BSD
Дата выпуска 15 декабря 2013
Аппаратные платформы X86, x86-64, ARM и Android
Последняя версия
Репозиторий github.com/syncthing/syn…
Лицензия MPLv2.0[4][5][…]
Сайт syncthing.net
Логотип Викисклада Медиафайлы на Викискладе

Syncthing — свободная одноранговая программа для синхронизации файлов между устройствами в локальной сети либо между удалёнными устройствами через Интернет. Работает в Windows, macOS, Linux, Android, iOS, *BSD и illumos. Распространяется под лицензией Mozilla Public License 2.0; исходный код открыт[6]. Версия 1.0 вышла в 2019 году после пяти лет бета-тестирования[7].

Серверная часть Syncthing работает в фоновом режиме как демон и предоставляет пользователю графический интерфейс для настройки общих каталогов и устройств. Доступ к интерфейсу осуществляется через веб-браузер по адресу localhost (http://127.0.0.1:8384)[6][8]. Передаваемые данные шифруются с использованием TLS[9].

Технология

[править | править код]

Syncthing написан на языке Go и использует собственный, также свободный, протокол обмена блоками (Block Exchange Protocol)[10]. Передача данных шифруется по протоколу TLS с применением обмена ключами с совершенной прямой секретностью, что исключает прослушивание трафика[10]. Синхронизация выполняется по дате изменения файла и поддерживается на уровне блоков: при небольших изменениях передаются только изменившиеся блоки, а не весь файл[10].

Подключение каждого устройства требует явного одобрения (за исключением функции «представителя»), что повышает безопасность сети. Данные, передаваемые как напрямую между устройствами, так и через ретрансляторы, шифруются по TLS. Программа поддерживает IPv6, а для сетей IPv4 — пробивание NAT и ретрансляторы[9].

Конфликты разрешаются переименованием старого файла с добавлением суффикса «sync-conflict» и временной метки, что даёт пользователю возможность выбрать, как поступить с несколькими файлами с одинаковыми именами, изменёнными между синхронизациями[11]. Эффективность синхронизации достигается за счёт сжатия метаданных и передаваемых данных, повторного использования блоков и облегчённого сканирования изменённых файлов после вычисления и сохранения полного хеша[12]. Поддерживаются каталоги типов «только отправка» и «только приём», при которых обновления с удалённых устройств не обрабатываются, и шаблоны игнорирования файлов и путей[13][14]. Перемещение и переименование файлов и каталогов обрабатываются без повторной загрузки уже имеющихся данных[15].

Синхронизация и доступ

[править | править код]

Для синхронизации устройства предварительно сопрягаются путём обмена уникальными криптографическими идентификаторами (Device ID). После сопряжения добавление файла в общую папку на одном устройстве передаёт его на все связанные устройства[16]. Поддерживается односторонняя синхронизация: изменения в исходной папке передаются на удалённые устройства, тогда как обратная передача отключена. С помощью шаблонов отдельные файлы или подпапки можно исключить из синхронизации, а пользователь выбирает, с какими устройствами синхронизировать ту или иную папку[16].

Разграничение прав доступа в Syncthing ограничено. Поскольку программа ориентирована на синхронизацию между доверенными устройствами, единственным средством ограничения потока данных остаётся выбор устройств, допущенных к конкретной папке. Парольная защита общих ссылок, сроки действия и ролевое управление отсутствуют[16].

Syncthing поддерживает несколько алгоритмов сохранения предыдущих версий файлов — от хранения только последней копии до бессрочного архивирования всех изменений, в том числе с передачей управления версиями внешней программе или сценарию. Для отдельных папок допускается назначать разные правила, что позволяет использовать программу также для резервного копирования, хотя такой сценарий не рекомендуется разработчиками[17][18].

Инфраструктура

[править | править код]

Обнаружение устройств выполняется через общедоступные серверы обнаружения, через широковещательные сообщения в локальной сети, историю устройств и статические имена или адреса хостов. Проект также распространяет программу Syncthing Discovery Server для развёртывания собственных серверов обнаружения, которые можно использовать вместе с общедоступными или вместо них[19]. Соединения между устройствами происходят напрямую по принципу «точка — точка»; возможно соединение по IP-адресу или DNS-имени без использования обнаружения вообще.

Сеть ретрансляционных серверов, предоставляемых сообществом, позволяет устройствам за разными NAT для IPv4 обмениваться данными, ретранслируя зашифрованный трафик через третью сторону. Ретрансляция подобна протоколу TURN со сквозным шифрованием TLS между устройствами, поэтому ретрансляционный сервер видит только зашифрованный поток. Syncthing автоматически переключается с ретрансляции на прямое соединение, когда оно становится доступным[20]. Программа может работать без подключения к серверам проекта или сообщества: обновления, отправка статистики использования, обнаружение и ретрансляция отключаются или настраиваются независимо, что позволяет эксплуатировать сеть в замкнутой системе[21].

Установка, настройка и управление

[править | править код]

Программа поставляется в виде переносимого исполняемого файла (для дистрибутивов Debian и Ubuntu существуют официальные deb-пакеты). При первом запуске генерируются конфигурация по умолчанию и ключи идентификации[16]. Управление осуществляется через веб-интерфейс, доступный только с локального устройства (ограничение снимается правкой конфигурации). Интерфейс предназначен для настройки поведения синхронизации, а не для прямого доступа к файлам[16].

Добавление удалённого узла выполняется вводом его идентификатора или сканированием QR-кода через мобильное приложение. Каждый компьютер в Syncthing имеет уникальный идентификатор устройства, по которому узлы добавляются в сеть синхронизации с подтверждением[22]. Демон Syncthing предоставляет параметры администрирования: ограничение скорости передачи данных, защиту веб-интерфейса именем пользователя и паролем, включение HTTPS[16]. Для опытных пользователей доступны прямое редактирование файла конфигурации и управление через интерфейс командной строки.

Ядро системы представляет собой консольное приложение. Сообществом созданы кроссплатформенная графическая оболочка на языке Python и значок в области уведомлений, воспроизводящие возможности веб-интерфейса; программа интегрируется с файловыми менеджерами Nautilus, Caja и Nemo[16]. Среди созданных сообществом программ-обёрток — SyncTrayzor для Windows (работает в области уведомлений), Syncthing-Fork для Android и Möbius Sync для iOS[23]. Официальный клиент для Android распространялся в Google Play до 2024 года[24].

Проект предоставляет подробную официальную документацию, включающую руководство по настройке, описание параметров командной строки и раздел частых вопросов. Дополнительная поддержка пользователей осуществляется на официальном форуме[16].

Syncthing был задуман как альтернатива приложениям для централизованной (например, Dropbox) и распределённой синхронизации файлов, таким как BitTorrent Sync[25]. Целью проекта стало устранение недостатков существовавших решений, включая вопросы безопасности и отсутствие открытой лицензии на протокол и программу[26].

Проект был перемещён на GitHub 15 декабря 2013 года, а 22 декабря того же года вышла первая версия. Изначально программа распространялась под лицензией MIT, затем была переведена на GPL 3.0. В октябре 2014 года проект ненадолго переименовали в Pulse, однако создатель и ведущий разработчик Якоб Борг отменил это решение и прекратил сотрудничество с партнёром из-за разногласий относительно управления проектом и приватности. В марте 2015 года лицензия была изменена на MPL 2.0[27].

Первый «стабильный» выпуск 1.0.0 состоялся 1 января 2019 года. Он почти не содержал заметных изменений по сравнению с последней бета-версией и скорее отразил широкое использование программы и почти пятилетний срок её разработки[28]. Вместе с этим релизом введена система семантического версионирования[29]. В выпуске 1.2.0 (2019) добавлена поддержка транспортного протокола QUIC[30]. Версия 1.28.0 (октябрь 2024 года) стала последней с официальной поддержкой Android: после этого разработчик удалил Android-версию из Google Play и репозитория F-Droid, тогда как неофициальные форки остались доступны[31][32]. В выпуске 2.0.0 (август 2025 года) база данных LevelDB заменена на SQLite[33].

Восприятие

[править | править код]

В сравнительном обзоре журнала Linux Format (сентябрь 2017 года) Syncthing занял четвёртое место из пяти протестированных решений с общей оценкой 3 из 5. Обозреватель отметил, что программа лучше подходит для синхронизации данных между собственными устройствами пользователя и не позиционируется как инструмент для организации облачного хранилища с совместным доступом[16].

Ведущий подкаста Security Now! Стив Гибсон в 2014 году охарактеризовал Syncthing как потенциальную замену BitTorrent Sync с открытым исходным кодом и впоследствии неоднократно возвращался к программе в выпусках подкаста[34]. Обозреватель LWN.net в 2021 году отметил, что разработчики создали систему функциональную, надёжную, безопасную и достаточно производительную, при этом простую в настройке и использовании[35].

Примечания

[править | править код]
  1. ↑ The syncthing Open Source Project on Open Hub: Languages Page — 2006.
  2. ↑ https://github.com/EvanLi/Github-Ranking/blob/master/Data/github-ranking-2025-07-06.csv — 2025.
  3. ↑ Release 2.1.7 — 2026.
  4. ↑ https://github.com/syncthing/syncthing/blob/master/LICENSE
  5. ↑ Free Software Directory
  6. 1 2 Sync files quickly and securely between devices for free with Syncthing 2.0 (англ.). BetaNews (12 августа 2025). Дата обращения: 1 июля 2026. Архивировано 12 января 2026 года.
  7. ↑ Syncthing 1.0.0 released as open-source P2P sync tool, finally leaves beta (англ.). BetaNews (3 января 2019). Дата обращения: 1 июля 2026. Архивировано 2 октября 2025 года.
  8. ↑ Wallen, Jack. Let Syncthing turn your desktop into a local cloud for your mobile device. TechRepublic. CBS Interactive (5 января 2016). Дата обращения: 1 июля 2026. Архивировано 9 октября 2019 года.
  9. 1 2 Security Principles — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 29 января 2020 года.
  10. 1 2 3 Block Exchange Protocol v1. Дата обращения: 1 июля 2026. Архивировано 30 июня 2026 года.
  11. ↑ FAQ — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 23 мая 2019 года.
  12. ↑ Understanding Synchronization — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 22 ноября 2018 года.
  13. ↑ Folder Types. Дата обращения: 1 июля 2026. Архивировано 2 июля 2026 года.
  14. ↑ Ignoring Files — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 12 мая 2020 года.
  15. ↑ FAQ — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 12 мая 2020 года.
  16. 1 2 3 4 5 6 7 8 9 Mayank Sharma. Stay in Sync: Keep your files up to date with the best tools (англ.) // Linux Format. — 2017. — September (no. 228). — P. 22—27.
  17. ↑ File Versioning (англ.). Syncthing Docs. Дата обращения: 1 июля 2026. Архивировано 12 мая 2020 года.
  18. ↑ Is Syncthing my ideal backup application? (англ.). Syncthing Docs. Дата обращения: 1 июля 2026. Архивировано 12 мая 2020 года.
  19. ↑ Syncthing Discovery Server — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 12 мая 2020 года.
  20. ↑ Relaying — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 29 января 2020 года.
  21. ↑ Security Principles — Syncthing v0.14 documentation. Docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 29 января 2020 года.
  22. ↑ Understanding Device IDs — Syncthing documentation. docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 4 июля 2026 года.
  23. ↑ Community Contributions — Syncthing documentation. docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 14 мая 2020 года.
  24. ↑ Syncthing's Android App is Going Away, Google Play Store Policies is One of the Reasons to Blame (англ.). It's FOSS News (23 октября 2024). Дата обращения: 1 июля 2026. Архивировано 2 октября 2025 года.
  25. ↑ How does Syncthing differ from BitTorrent Sync? (англ.). Syncthing Docs. Дата обращения: 1 июля 2026. Архивировано 1 июля 2015 года.
  26. ↑ Why is the setup more complicated than BTSync? (англ.). Syncthing Docs. Дата обращения: 1 июля 2026. Архивировано 1 июля 2015 года.
  27. ↑ Syncthing is still Syncthing. Дата обращения: 1 июля 2026. Архивировано из оригинала 29 ноября 2014 года.
  28. ↑ Syncthing graduation day. Syncthing Community Forum (1 января 2019). Дата обращения: 1 июля 2026. Архивировано 2 июля 2026 года.
  29. ↑ Versions & Releases — Syncthing v1 documentation. docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 2 июля 2026 года.
  30. ↑ v1.2.0, The Syncthing Project, 9 июля 2019, Архивировано 2 июля 2026, Дата обращения: 2 июля 2026
  31. ↑ Versions & Releases — Syncthing documentation. docs.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 2 июля 2026 года.
  32. ↑ Discontinuing syncthing-android. forum.syncthing.net. Дата обращения: 1 июля 2026. Архивировано 9 апреля 2025 года.
  33. ↑ syncthing. Release v2.0.0 · syncthing/syncthing (англ.). GitHub. Дата обращения: 1 июля 2026. Архивировано 2 июля 2026 года.
  34. ↑ Security Now! Episode 456. Grc.com. Дата обращения: 1 июля 2026. Архивировано 2 июля 2026 года.
  35. ↑ Syncing all the things. Дата обращения: 1 июля 2026. Архивировано 2 июля 2026 года.