Syncthing — свободная одноранговая программа для синхронизации файлов между устройствами в локальной сети либо между удалёнными устройствами через Интернет. Работает в Windows, macOS, Linux, Android, iOS, *BSD и illumos. Распространяется под лицензией Mozilla Public License 2.0; исходный код открыт. Версия 1.0 вышла в 2019 году после пяти лет бета-тестирования.
Серверная часть Syncthing работает в фоновом режиме как демон и предоставляет пользователю графический интерфейс для настройки общих каталогов и устройств. Доступ к интерфейсу осуществляется через веб-браузер по адресу localhost (http://127.0.0.1:8384). Передаваемые данные шифруются с использованием TLS.
Технология Syncthing написан на языке Go и использует собственный, также свободный, протокол обмена блоками (Block Exchange Protocol). Передача данных шифруется по протоколу TLS с применением обмена ключами с совершенной прямой секретностью, что исключает прослушивание трафика. Синхронизация выполняется по дате изменения файла и поддерживается на уровне блоков: при небольших изменениях передаются только изменившиеся блоки, а не весь файл.
Подключение каждого устройства требует явного одобрения (за исключением функции «представителя»), что повышает безопасность сети. Данные, передаваемые как напрямую между устройствами, так и через ретрансляторы, шифруются по TLS. Программа поддерживает IPv6, а для сетей IPv4 — пробивание NAT и ретрансляторы.
Конфликты разрешаются переименованием старого файла с добавлением суффикса «sync-conflict» и временной метки, что даёт пользователю возможность выбрать, как поступить с несколькими файлами с одинаковыми именами, изменёнными между синхронизациями. Эффективность синхронизации достигается за счёт сжатия метаданных и передаваемых данных, повторного использования блоков и облегчённого сканирования изменённых файлов после вычисления и сохранения полного хеша. Поддерживаются каталоги типов «только отправка» и «только приём», при которых обновления с удалённых устройств не обрабатываются, и шаблоны игнорирования файлов и путей. Перемещение и переименование файлов и каталогов обрабатываются без повторной загрузки уже имеющихся данных.
Синхронизация и доступ Для синхронизации устройства предварительно сопрягаются путём обмена уникальными криптографическими идентификаторами (Device ID). После сопряжения добавление файла в общую папку на одном устройстве передаёт его на все связанные устройства. Поддерживается односторонняя синхронизация: изменения в исходной папке передаются на удалённые устройства, тогда как обратная передача отключена. С помощью шаблонов отдельные файлы или подпапки можно исключить из синхронизации, а пользователь выбирает, с какими устройствами синхронизировать ту или иную папку.
Разграничение прав доступа в Syncthing ограничено. Поскольку программа ориентирована на синхронизацию между доверенными устройствами, единственным средством ограничения потока данных остаётся выбор устройств, допущенных к конкретной папке. Парольная защита общих ссылок, сроки действия и ролевое управление отсутствуют.
Syncthing поддерживает несколько алгоритмов сохранения предыдущих версий файлов — от хранения только последней копии до бессрочного архивирования всех изменений, в том числе с передачей управления версиями внешней программе или сценарию. Для отдельных папок допускается назначать разные правила, что позволяет использовать программу также для резервного копирования, хотя такой сценарий не рекомендуется разработчиками.
Инфраструктура Обнаружение устройств выполняется через общедоступные серверы обнаружения, через широковещательные сообщения в локальной сети, историю устройств и статические имена или адреса хостов. Проект также распространяет программу Syncthing Discovery Server для развёртывания собственных серверов обнаружения, которые можно использовать вместе с общедоступными или вместо них. Соединения между устройствами происходят напрямую по принципу «точка — точка»; возможно соединение по IP-адресу или DNS-имени без использования обнаружения вообще.
Сеть ретрансляционных серверов, предоставляемых сообществом, позволяет устройствам за разными NAT для IPv4 обмениваться данными, ретранслируя зашифрованный трафик через третью сторону. Ретрансляция подобна протоколу TURN со сквозным шифрованием TLS между устройствами, поэтому ретрансляционный сервер видит только зашифрованный поток. Syncthing автоматически переключается с ретрансляции на прямое соединение, когда оно становится доступным. Программа может работать без подключения к серверам проекта или сообщества: обновления, отправка статистики использования, обнаружение и ретрансляция отключаются или настраиваются независимо, что позволяет эксплуатировать сеть в замкнутой системе.
Установка, настройка и управление Программа поставляется в виде переносимого исполняемого файла (для дистрибутивов Debian и Ubuntu существуют официальные deb-пакеты). При первом запуске генерируются конфигурация по умолчанию и ключи идентификации. Управление осуществляется через веб-интерфейс, доступный только с локального устройства (ограничение снимается правкой конфигурации). Интерфейс предназначен для настройки поведения синхронизации, а не для прямого доступа к файлам.
Добавление удалённого узла выполняется вводом его идентификатора или сканированием QR-кода через мобильное приложение. Каждый компьютер в Syncthing имеет уникальный идентификатор устройства, по которому узлы добавляются в сеть синхронизации с подтверждением. Демон Syncthing предоставляет параметры администрирования: ограничение скорости передачи данных, защиту веб-интерфейса именем пользователя и паролем, включение HTTPS. Для опытных пользователей доступны прямое редактирование файла конфигурации и управление через интерфейс командной строки.
Клиенты Ядро системы представляет собой консольное приложение. Сообществом созданы кроссплатформенная графическая оболочка на языке Python и значок в области уведомлений, воспроизводящие возможности веб-интерфейса; программа интегрируется с файловыми менеджерами Nautilus, Caja и Nemo. Среди созданных сообществом программ-обёрток — SyncTrayzor для Windows (работает в области уведомлений), Syncthing-Fork для Android и Möbius Sync для iOS. Официальный клиент для Android распространялся в Google Play до 2024 года.
Проект предоставляет подробную официальную документацию, включающую руководство по настройке, описание параметров командной строки и раздел частых вопросов. Дополнительная поддержка пользователей осуществляется на официальном форуме.
История Syncthing был задуман как альтернатива приложениям для централизованной (например, Dropbox) и распределённой синхронизации файлов, таким как BitTorrent Sync. Целью проекта стало устранение недостатков существовавших решений, включая вопросы безопасности и отсутствие открытой лицензии на протокол и программу.
Проект был перемещён на GitHub 15 декабря 2013 года, а 22 декабря того же года вышла первая версия. Изначально программа распространялась под лицензией MIT, затем была переведена на GPL 3.0. В октябре 2014 года проект ненадолго переименовали в Pulse, однако создатель и ведущий разработчик Якоб Борг отменил это решение и прекратил сотрудничество с партнёром из-за разногласий относительно управления проектом и приватности. В марте 2015 года лицензия была изменена на MPL 2.0.
Первый «стабильный» выпуск 1.0.0 состоялся 1 января 2019 года. Он почти не содержал заметных изменений по сравнению с последней бета-версией и скорее отразил широкое использование программы и почти пятилетний срок её разработки. Вместе с этим релизом введена система семантического версионирования. В выпуске 1.2.0 (2019) добавлена поддержка транспортного протокола QUIC. Версия 1.28.0 (октябрь 2024 года) стала последней с официальной поддержкой Android: после этого разработчик удалил Android-версию из Google Play и репозитория F-Droid, тогда как неофициальные форки остались доступны. В выпуске 2.0.0 (август 2025 года) база данных LevelDB заменена на SQLite.
Восприятие В сравнительном обзоре журнала Linux Format (сентябрь 2017 года) Syncthing занял четвёртое место из пяти протестированных решений с общей оценкой 3 из 5. Обозреватель отметил, что программа лучше подходит для синхронизации данных между собственными устройствами пользователя и не позиционируется как инструмент для организации облачного хранилища с совместным доступом.
Ведущий подкаста Security Now! Стив Гибсон в 2014 году охарактеризовал Syncthing как потенциальную замену BitTorrent Sync с открытым исходным кодом и впоследствии неоднократно возвращался к программе в выпусках подкаста. Обозреватель LWN.net в 2021 году отметил, что разработчики создали систему функциональную, надёжную, безопасную и достаточно производительную, при этом простую в настройке и использовании.
См. также Resilio Sync
Примечания
Ссылки
Категория:Синхронизация Категория:Кроссплатформенное программное обеспечение Категория:Пиринговый файлообмен Категория:Свободное кроссплатформенное программное обеспечение Категория:Свободное программное обеспечение, написанное на Go Категория:Программное обеспечение с лицензией MPL