Что такое Syncthing
Syncthing — это децентрализованное приложение для синхронизации файлов между пирами. Оно позволяет обмениваться данными между компьютерами, смартфонами и другими устройствами без использования централизованных серверов. Вместо этого Syncthing использует прямое соединение между пирами через интернет или локальную сеть, что обеспечивает высокую степень конфиденциальности и безопасности.
Основные особенности Syncthing:
- Децентрализация: данные передаются напрямую между пирами, без промежуточных серверов.
- Шифрование трафика: вся передаваемая информация защищена с помощью шифрования.
- Кроссплатформенность: Syncthing работает на различных операционных системах, включая Windows, macOS, Linux, Android и другие.
- Открытый исходный код: проект полностью открыт, что позволяет сообществу проверять код и вносить улучшения.
В некоторых источниках Syncthing сравнивают с инструментами для резервного копирования. С этим можно согласиться лишь отчасти, так как основная цель разработчиков — это именно синхронизация данных между пирам. Однако при правильной настройке Syncthing можно использовать и для создания подобия системы резервного копирования. Об этом мы поговорим чуть позже.
Проблема централизованного подхода
Какие минусы есть у централизованных решений?
- Зависимость от сторонних серверов: вы вынуждены доверять свои данные третьим лицам.
- Риски утечки данных: централизованные серверы часто становятся мишенью для хакерских атак.
- Ограничения на использование и хранение информации: многие сервисы накладывают лимиты на объем данных или типы файлов.
- Зависимость от интернета: без стабильного подключения к интернету доступ к данным может быть затруднен.
Как Syncthing решает эти проблемы?
Syncthing предлагает альтернативу, устраняя перечисленные недостатки за счет децентрализованной архитектуры. Вместо того чтобы полагаться на централизованные серверы, данные передаются напрямую между пирами. Это не только повышает безопасность, но и дает пользователям полный контроль над своими файлами.
Почему это важно?
На мой взгляд, минусы централизованных решений достаточно существенные. При использовании Syncthing вам даже не обязательно покупать домашний сервер, чтобы обеспечить сохранность данных в случае отказа одного из устройств. Под “отказом” я имею в виду, в первую очередь, поломку носителей.
Децентрализованный подход
При децентрализованном подходе каждый участник сети становится полноценным сервером. Это означает, что:
- Данные распределены между пирами, что снижает риск их потери.
- Нет единой точки отказа, как в случае с централизованными сервисами.
- Вы можете строить как простые, так и сложные схемы передачи данных, адаптированные под ваши нужды.
Пример использования: синхронизация между ПК и ноутбуком
В такой схеме два пира — ноутбук и ПК — передают данные друг другу. Например, пока ноутбук выключен, вы работаете с данными на ПК. После завершения работы на ПК, включаете ноутбук, и данные автоматически синхронизируются. Таким образом, на обоих пирах всегда хранятся актуальные данные, что можно сравнить с резервированием информации.
Резервное копирование на смартфон
На смартфоне можно настроить синхронизацию так, чтобы данные передавались только при подключенной зарядке и активном приложении Syncthing. Например, включая приложение раз в неделю, пока телефон на зарядке, вы получаете резервную копию данных недельной давности. При этом на смартфоне можно настроить папки только для получения данных (односторонняя синхронизация).
И можно строить что-то сложнее
Локация 1 — это ваш “дом”. Здесь находятся четыре пира, которые обмениваются данными между собой в рамках локальной сети. Один из этих пиров также выполняет роль шлюза, обеспечивая доступ к другим локациям. Это позволяет синхронизировать данные не только внутри домашней сети, но и за её пределами.
Локация 2 — в этой локации один из пиров подключается к другому через интернет для удалённого обмена данными. Это можно реализовать двумя способами:
Белый IP и перенаправление портов
Для прямого подключения необходимо открыть порт 22000 (TCP/UPD) на роутере и настроить перенаправление (port forwarding). Это позволит пирам устанавливать прямое соединение без промежуточных серверов.Преимущество: высокая скорость передачи данных и минимальная задержка.
Недостаток: требует наличия белого IP-адреса и настройки роутера.Обход NAT и использование ретрансляторов Если у вас нет возможности открыть порты (например, из-за серого IP-адреса), Syncthing предлагает встроенные методы обхода NAT. В этом случае пиры подключаются через ретрансляторы (relays), предоставляемые разработчиками Syncthing.
Преимущество: не требует сложных настроек сети.
Недостаток: скорость передачи данных может быть ниже из-за использования промежуточных серверов.
Если вы не хотите использовать серверы разработчиков, можно настроить прямое подключение. Для этого:
- Откройте порт на одном из пиров.
- Настройте обнаружение (discovery) на другом пире, которое находится в сети без открытых портов.
- После успешного обнаружения пиры смогут “подружиться” и обмениваться данными напрямую.
Локация 3 — если у вас настроен VPN-туннель до другой локации, весь трафик можно направить через него. VPN в данном случае нужен не столько для защиты данных (Syncthing и так шифрует весь трафик), сколько для упрощения подключения и избежания использования серверов разработчиков.
Преимущество: пиры видят друг друга как будто они находятся в одной локальной сети, что упрощает настройку и повышает надёжность соединения.
Недостаток: требуется дополнительная настройка VPN.
Безопасность передачи данных
Важно помнить, что Syncthing всегда шифрует данные при передаче между пирами. Это значительно снижает риски атак, даже если вы вынуждены использовать серверы разработчиков для глобального обнаружения. Шифрование осуществляется с помощью протокола TLS, что обеспечивает конфиденциальность и целостность данных.
Установка на Desktop системы
Установка Syncthing относительно проста. У нее есть некоторые нюансы. Дело в том, что разработчики предоставляют программу в виде CLI инструмента и мы запускаем обычную консоль, которая должна бысть влючена постоянно пока работает ПК. Это не удобно, и нет иконок для быстрого доступа к управлению и настройкам Syncthing.
В репах есть только одно готовое решение от разработчиков, это syncthing-macos
После установки которого мы получим иконку в трее и работу в фоне
Само управление и настройка Syncthing доступно по адресу http://127.0.0.1:8384
Если мы хотим предоставить кому-то еще доступ к админке, можно подключить HTTPS и авторизацию по паролю из коробки
Вы можете конечно взять на себя бремя настройки запуска Syncthing, как службы на ваших ПК, но все же есть и альтернативные решения для простой установки
Например:
Установка на сервер Linux
А что, если есть желание, поднять свой сервер, которы будет некой хранилкой ваших данных? Что если, у вас 1 устройство, на телефон по разным причинам мы не можем сихронизировать данные, но есть второй ноутбук/одноплатный компьютер/вируальная машина на домашнем сервере.
Это убережет от потери наши данные, если на рабочем устройстве откажет диск.
В моем случае на сервере установлен Arch и я его ставлю из своих реп
pacman -Sy syncthing
Для Debian нужно подключить репозиторий
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
apt install apt-transport-https
apt update
apt install syncthing
Теперь определимся, из под какого пользователя будем запускать Syncthing.
systemctl --now enable [email protected]
Вместо username - пишем своего пользователя, у которого должна быть создана домашняя папка
Проверяем, что все работает
systemctl status [email protected]
И Syncthing, обязательно по умолчанию забиндит адрес 127.0.0.1:8384
- для доступа к панели управления.
Нам нужно открыть доступ например через 0.0.0.0 или прописать какой-то определнный адрес доступный на интерфейсе.
У нас есть 2 пути:
- Останавливаем работу Syncthing
systemctl stop [email protected]
и редактируем файл~/.config/syncthing/config.xml
строка<address>127.0.0.1:8384</address>
, меняем на<address>0.0.0.0:8384</address>
- Пробрасываем порт через SSH
ssh -L 3000:localhost:8384 user@IP -N
и запускам в браузере https://localhost:3000/
В первом варианте нам обязательно нужно остановить демон Syncthing, потому как любое редактирование и сохранение файла ни к чему не приведут. Данные откатяться.
В некоторых дистрибутивах, файл конфигурации может находиться по другому пути ~/.local/state/syncthing
Первый запуск Syncthing нам нужно сделать обязательно, чтобы сгенерировались дефолтные конфигурации и создать папку по умолчанию ~/Sync
Откроем порты
iptables -A INPUT -p tcp --dport 8384 -j ACCEPT
iptables -A INPUT -p tcp --dport 22000 -j ACCEPT
iptables -A INPUT -p udp --dport 22000 -j ACCEPT
Сохраняем правила
iptables-save > /etc/iptables/[file]
22000 - порт небходимо открыть, чтобы пиры могли общаться с нашим сервером 8384 - порт для доступа к панели управления
Установка завершена. Далее нам необходимо спарить между собой пиры и начать пользоваться синхронизацией.
Настройки Syncthing
Общие настройки
Рассмотрим основные настройки
Мы можем переименовать наше устройство, и отключить отправку анонимной статистики.
Интерфейс
В настройках интерфейса, можно определить на каком адресе будет доступен именно GUI, настроить авторизацию и подключить HTTPS самоподписным сертификатом, чтобы шифровать трафик до GUI
Подключения
Адрес протокола синхронизации - тут мы настраиваем привязку для порта 22000
Актуальную информацию можно почитать в документации
Если коротко, можно задать несколько IP tcp://0.0.0.0:22000, quic://0.0.0.0:22000
В остальных настройках будут пополняться данные об игнорируемых устройствах и папках, если такие будут конечно.
Настройка синхронизации
Создание папки для синхронизации
Для того, чтобы что-то синхронизировать. Я сначала создаю папки для синхронизаций
Добавляем папку
Дадим ей имя Test
В окне добавление папки вся информация предоставлена уже сразу и не нужно думать о нюансах. Если папки на вашем устройстве нету, она будет создаваться автоматически
Предоставление доступа определяет к каким устройствам будет доступна создаваемая папка
Пока писал статью, для себя открыл, что Syncthiong умеет версионировать файлы. И это круто, уже что-то похоже на резервную копию.
Данным функционалом я не пользовался. В доке есть хорошее описание, как это работает
Управление версиями применяется к изменениям, полученным с других устройств. То есть, если у Алисы включено управление версиями и Боб изменяет файл, старая версия будет заархивирована на компьютере Алисы, когда это изменение будет синхронизировано с Бобом. Если Алиса изменит файл локально на своем компьютере, синхронизация не произойдет и не сможет заархивировать старую версию.
Шаблоны игнонирования можно включить уже после того, как создание папки было завершено
То есть тут можно описать регулярные выражения, которые создают правила игнорирования файлов с других устройств
Последний пункт настроек
Что я тут обычно настраиваю
- Игнорировать файловые права доступа - полезно, когда устройства сихнронизируют данные в разных ОС
- Тип папки - все зависит от того, для чего устройство его использует. Например мой сервер настроен только на получение данных, и является некой резевной копией, а 2 рабочих компьютера передают данные друг другу
Жмем “Cохранить” и наша папка сейчас доступна только на одном устройстве.
Подключение устройств
Настало время добавить другое устройство
Предположим, что на устройстве 2 у нас нет ничего и мы с устройства 1 будем синхронизировать данные
Передаем на устройство 1 ID от устройства 2
ID я тут поставил не валидный, не хочется мне их показывать. Но если ID устройства был скомпроментирован, тут ничего страшного особо нет. Потому как оба устройства должны подтвердить подключение. Единственной проблемой может быть только то, что слишком настойчивый пир будет пытаться установить подключение постоянно
Следующая вкладка “Предоставление доступа”. Тут можно выставить устройство PC которое мы подключаем как Рекомендатель и Автопринятие, которые позволят нам создать чуть более автономную сеть. Не придется на двух стройствах постоянно заниматься настройками папок.
На мой взгляд эти настройки лучше всего подходят, когда у вас есть много динамических папок, которые требуется синхронизировать
Ну и в самом низу, есть возможность предоставить доступ к нужным папкам устройству PC. Возьмем папку Test
Если посмотреть чуть правее, то есть поля с паролями. Пароли в данном случае являются дополнительным механизмом защиты и на двух устройствах потребуется ввести пароль, чтобы началась синхронизация.
Поля с паролями не отвечают за шифрование передаваемого трафика, Syncthing шифрует сетевой трафик всегда по умолчанию
Дополнительные настройки обычно я использую только для того, чтобы прописать IP адрес добавляемого устройсва или оставляю dynamic, если у последнего нет статического IP в моей сети.
Syncthing умет автоматически находить устройства в тех сетях в которых ему предоставлен доступ. Если на пире закрыт доступ к relay серверам и т.д., но включен доступ для локального обнаружения, в локальной сети поиск устройств происходит успешно
После нажатия кнопки “Сохранить”, проверяем оба пира, что они нашли друг друга и начали передавать данные.
Дожидаемся, что наши папки завершат синхронизацию
Теперь можно проверять данные, изменить или добавить новые файлы или вложенные директории. Что еще интересно, если у нас есть устройства доступные из другой сети по VPN например, мы можем поднимать туннель до другой сети. Таким образом у нас будет слепок данных хранящийся удаленно. Sycthing обранаружит, что устройства доступны и можно с ними начать обмениваться данными
Ну и синхронизация не сломается, если данные на ноутбуке были изменены в тот момент, когда он был не дома. Это если синхроназация настроена только для локальной сети. При подключении к домашней локалке, процесс синхроназации начнется автоматически.
Я рекомендую посматривать за состоянием папок синхроназиации, если вы работали с двумя устройствами и у них могут быть конфликты, когда редактировались одни и те же файлы.
Что еще удобно, для подобный типо синхронизации можно использовать в связке в Web-сервером или с SMB, главное чтобы права на файлы были доступны для Syncthing и для других демонов системы.
Ну и на этом я думаю можно закончить, это были основы и демонстрация основного функционала Syncthing.
Анонсы и еще больше информации в Telegram-канале