LINUX.ORG.RU

Syncthing: ваше личное, децентрализованное и свободное облако

 , , ,


1

4

Syncthing — это свободный P2P‑инструмент синхронизации файлов между вашими устройствами без централизованного облака и подписок. Данные остаются у вас, ключи — у вас, инфраструктура — тоже у вас.

Это обзорная статья, написанная, чтобы дать читателю представление о технологии. Здесь нет конкретных команд для запуска и технических деталей. Вместо этого я предлагаю читателю установить Syncthing и самостоятельно попробовать его на практике.

Проблемы коммерческих «облаков» и как Syncthing отстаивает нашу свободу

Когда мы загружаем файл в коммерческое облако, мы, по сути, отдаем его на хранение третьей стороне. Что это значит на деле:

  • Потеря контроля: Ваши файлы лежат на чужих серверах. Корпорация может в любой момент изменить условия обслуживания, заблокировать ваш аккаунт или, в худшем случае, потерять ваши данные.
  • Отсутствие приватности: Несмотря на все заверения в безопасности, ваши файлы могут быть просканированы алгоритмами для показа рекламы, проанализированы для сбора метаданных или предоставлены спецслужбам по запросу.
  • Vendor Lock-in: Вы привязываетесь к одной экосистеме. Переезд с одного облака на другое становится проблемой. Корпорации не заинтересованы в использовании открытых протоколов и сторонних приложений, и даже если у конкретного облака есть доступ для сторонних приложений, он может быть ограничен или закрыт в любой момент.
  • Зависимость от интернета: Нет доступа к серверам корпорации — нет доступа к вашим файлам, даже если ваши устройства находятся в одной комнате.

Syncthing — это противоположность вышеописанному. Это не сервис, а программа. Она не хранит ваши данные на центральном сервере, потому что центрального сервера просто нет. Ваши данные синхронизируются напрямую между вашими устройствами (Peer-to-Peer). Вы — единственный владелец и контролёр своих данных.

Это не «облако» в том смысле, который сейчас подразумевают корпорации. Однако это облако в том смысле, который вкладывался в этот термин изначально. Хранение и обработка данных отвязаны от конкретных физических машин и их настроек. Вместо этого программная среда, в которой живут ваши данные, существует как бы «поверх» машин. Конкретная машина становится несущественна для целостности данных.

Таким образом, ваше облако — это ваши машины.

Ключевые особенности

  • Пиринговая (P2P) синхронизация папок между устройствами в реальном времени.
  • Вы контролируете носители и маршрут данных. Нет аккаунтов, логинов, чужих серверов, которым нужно «доверять».
  • Децентрализация: ваши устройства составляют «облако». Вы не платите подписку за хранение данных, вы используете накопители, которые купили и физически ими владеете.
  • Отсутствует выделенная роль «сервера». Любое устройство может быть источником/получателем.
  • Сквозное шифрование трафика, идентификация пиров по криптографическому Device ID.
  • Приложение имеет веб‑интерфейс, управляется через браузер либо через REST API.
  • Свободная лицензия — MPL 2.0, воспроизводимые сборки. Нет «черных ящиков» и vendor lock‑in.
  • При желании можно поднять собственные discovery/relay-серверы либо использовать публичные.

Гибкая организация облачных папок

С Syncthing очень легко создавать новые расшаренные папки. Нет необходимости складывать всё в единственную папку. Вместо одной большой папки «Dropbox» или «Яндекс.Диск» вы создаете логические группы для разных типов данных. Это позволяет тонко настроить, что и где хранить.

Вот некоторые примеры, какие папки использую я. У каждой папки можно задать свои настройки версионирования и на каких устройствах она хранится.

  • Vadim-Min — «минимальное» облако с важными данными, которые желательно иметь на всех устройствах.
  • Vadim-General — различные рабочие и личные файлы более крупного размера.
  • Vadim-Media — крупные файлы, в основном видео, скачанные из соцсетей и других мест. Обычно это временные файлы: просмотреть видео, проанализировать, удалить.
  • Vadim-Photo — личный фотоальбом за несколько лет, сортированный по годам и темам.
  • Vadim-Нужности — различная документация и прочие скачанные из интернета файлы, которые важно иметь под рукой.
  • Vadim-Архив — сжатые резервные копии текущих проектов и архивы старых проектов, неактуальные данные.
  • Камера-{модель_смартфона} — папки, зеркалирующие каталог DCIM на моих смартфонах. Фотографии, сделанные на смартфоне, сразу становятся доступны на компьютере. На компьютере я могу просмотреть, удалить, рассортировать фото, перенести фотографии в папку Vadim-Photo. Удаления файлов синхронизируются обратно на смартфон, таким образом одновременно я еще и на нём освобождаю место.
  • Несколько папок, синхронирующихся с рабочими компьютерами в организации и с личными ПК знакомых, чтобы обмениваться рабочими файлами.

Примечание: Если вы используете файловую систему с дедупликацией, например btrfs, то вы можете без дополнительных затрат места на диске держать идентичные копии файлов в разных расшаренных папках.

Версионирование файлов

Syncthing умеет сохранять старые версии изменённых/удалённых файлов — это и «страховка от ошибки», и элемент стратегии бэкапа.

Варианты:

  • Trash Can: хранение только одной копии удалённого/изменённого файла.
  • Simple: хранит фиксированное число последних ревизий.
  • Staggered: «ступенчатая» ротация.
  • External: передача управления внешнему скрипту.

Для каждой облачной папки на каждом устройстве можно выставить отдельные настройки версионирования. Это позволяет гибко выбирать между надёжностью и экономией места на устройстве.

Обнаружение конфликтов

Syncthing автоматически отслеживает конфликты правок, когда файл изменялся с нескольких устройств.

В этом случае он выбирает более свежий по дате вариант файла как основной, а прочие — как конфликтные. Конфликтные варианты переименовываются в <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext>, и затем эти файлы распространяются по облаку в обычном порядке.

Syncthing не делает предположений о том, кто и как ответственен за решение конфликта правок, потому он просто доводит эти файлы до всех пиров и даёт пользователю возможность самому разобраться. Информация о имеющихся конфликтах отображается в веб-интерфейсе программы.

Примечание: По моему опыту, Syncthing крайне редко обнаруживает «ложно-положительные» конфликты (т.е. когда конфликта правок на самом деле нет, но облако считает, что есть). Этим он выгодно отличается от некоторых коммерческих решений, с которыми мне приходилось иметь дело ранее. В том случае ложные конфликты и потеря файлов были обычным делом.

Режимы работы папок

  • Send & Receive — режим по умолчанию. Изменение на любом устройстве распространяется на все остальные. Основной вариант для синхронизации рабочих документов между десктопом, ноутбуком и смартфоном.
  • Send Only. Устройство в этом режиме является «авторитетным источником». Оно отправляет свои изменения файлов другим узлам, но игнорирует изменения, приходящие от них.
  • Receive Only Устройство только принимает и ретранслирует изменения, но не отправляет изменения, которые внесены локально. Подходит для сервера-архива или медиа-сервера, который должен хранить актуальную копию файлов, но сам их не изменять.

Следует отметить, что режим работы папки контролируется тем пиром, на котором, собственно, выставлена настройка. Пиры не знают и не проверяют, какие режимы стоят у других пиров. Таким образом, например, режим Receive Only защищает от случайного распространения изменений, внесенных локально. Но не от злоумышленника, который получил контроль над узлом. Чтобы злоумышленник не мог безвозвратно испортить ваши файлы, включите версионирование на более чем одном устройстве. Чем больше устройств с версионированием включено - тем выше избыточность и надёжность хранения версий.

Зашифрованные реплики на недоверенных машинах (Receive Encrypted)

Хотите держать копию на VPS, но чтобы владелец машины не имел доступа к данным? Для этого есть особый тип папки — Receive Encrypted:

  • На «недоверенном» узле файлы хранятся только в зашифрованном виде. Шифруется как содержимое файлов, так и их имена и структура директорий.
  • Расшифровка возможна лишь на доверенных устройствах, где настроен «обычный» (нешифрованный) режим папки.
  • Используется симметричное шифрование. Шифрование и расшифровка выполняются по паролю, известному доверенным узлам.
  • Отлично подходит для внешнего бэкапа без доверия: дешёвый VPS превращается в безопасный архив.

Ограничение очевидно: на таком узле содержимое просматривать/использовать/модифицировать нельзя — только хранить и ретранслировать.

Сеть

Прямая работа в LAN:

  • Локальное обнаружение пиров, никакого выхода в интернет.
  • Скорость ограничена только вашей сетью, удобно для домашнего/офисного сегмента.

Интернет и NAT:

  • Global Discovery — глобальные discovery‑серверы помогают узлам узнать внешние адреса друг друга. Есть публичные, можно поднять свои.
  • Relay Servers — ретрансляторы, когда прямое соединение через NAT не складывается. Есть публичные, можно поднять свои.

Важно: discovery/relay — это лишь «сигнализация» и транспорт. Данные остаются шифрованными end‑to‑end, а аутентификация машин — через Device ID.

Поддерживаемые ОС

  • Linux (включая серверные дистрибутивы и NAS), Windows, macOS, Android.
  • Пакеты есть во многих репозиториях; Android‑клиенты доступны в F‑Droid.
  • Также доступны пакеты для FreeBSD, OpenBSD, Illumos.

Syncthing‑Lite на Android: доступ «по требованию»

Сейчас развивается приложение Syncthing‑Lite для Android — оно позволяет работать с вашим облаком Syncthing без загрузки полной копии файлов на телефон:

  • Просмотр структуры, выборочная загрузка/кэширование «по клику».
  • Добавление локальных файлов в облако.
  • Экономия места на смартфоне, удобно для больших медиатек и архивов.
  • Расширяет сценарии использования: телефон — вьювер/клиент, а полные копии живут на ПК/сервере.

Этот проект является возрождением старой версии приложения, которая была уже какое-то время брошена.

К сожалению, прямо сейчас у меня приложение не заработало - соединение между пирами есть, но оглавление папки не загрузилось. Такого приложения очень не хватает для расширения возможностей Syncthing. Надеюсь, что разработчик продолжит работу над ним.

Ну а пока это приложение в разработке, вы можете воспользоваться стабильной версией «обычного» варианта приложения: https://github.com/Catfriend1/syncthing-android.

Заключение

Syncthing — это не просто утилита, а технология, меняющая принцип хранения и доступа к данным. Это практический инструмент, который даёт пользователю безопасность и свободу в управлении своими данными. Он реализует принципы свободного программного обеспечения не просто по букве, но и по духу.

★★★

Проверено: hobbit ()
Последнее исправление: wandrien (всего исправлений: 2)
Ответ на: комментарий от vitruss

Поставить пароль на доступ в веб-морду у каждого пользователя.

Запускать сервисы на разных портах у каждого пользователя.

wandrien ★★★
() автор топика
Ответ на: комментарий от Iron_Bug

5 устройств, которые в сети в разное время и только одно из них с белым ИП через rsync? Можно конечно… Но не очень удобно будет…

vitruss ★★★★★
()
Ответ на: комментарий от wandrien

Если запускать на разных портах то обнаружение пиров в локальной сети работать не будет, потому что оно использует только порт 22000, а если пользователей несколько, то кто первый занял, того и тапки… Я себе добавил на локальный интерфейс IP адресов по количеству пользователей, но это выглядит как костыль…

vitruss ★★★★★
()
Ответ на: комментарий от vitruss

Для такого случая, наверное, надо поднимать и локальный дискавери.

legolegs ★★★★★
()
Ответ на: комментарий от mord0d

удаление части данных на одной машине приводит к удалению их на всех

ignoreDelete

sinaps ★★
()
Ответ на: комментарий от legolegs

а вот и да !! :)
что синхфинг == rsync-daemon полностью согласен. причем несколько лет назад syncthing-inotify был отдельной прогой, потом допилив до ума, его внедрили в основной код.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)

Я через гуи создал директорию для синхронизации и добавлял клиентов. А через консоль это можно делать? Чтобы в деплой это поставить

bryak ★★★★
()
Ответ на: комментарий от bryak

Да, что-то типа syncthing cli config folders add --help, и он справку выдаст по ключам этой команды.

wandrien ★★★
() автор топика

Использую это чудо для хранения паролей, документов и фоток между тремя устройствами. Причем ПК раздает, а малинка и смартфон только принимают. Для больших данных синхронизирую между SSD и HDD через rsync по крону.

abradox
()

использую года с 2018 для своих ноутов и пк. для телефонов предпочитаю nextcloud сервер которого можно к директории сабжа подрубить. не без нюансов, но в общем все круто. забавно что основная директория до сих пор называется Dropbox, но того уж нет в помине у меня

zendrz ★★
()
Последнее исправление: zendrz (всего исправлений: 1)

кстати, для желающих есть еще GNU unison

zendrz ★★
()

В нем можно как то зафильтровать папки внутри синхронизируемых папок?

Для пример в restic можно положить внутрь подпапки файлик CACHEDIR.TAG и тогда это не попадет в бекап.

theurs ★★
()
Ответ на: комментарий от theurs

Можно. В корень синхронизируемой директории можно положить файл .stignore, в котором перечислить образцы файлов/поддиректорий, которые нужно игнорировать при синхронизации: https://docs.syncthing.net/users/ignoring.html

TeopeTuK ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.