Рекомендуем почитать:
Xakep #288. Неправильные эльфы
- Содержание выпуска
- Подписка на «Хакер» -60%
Для синхронизации и резервного копирования файлов созданы десятки программ и онлайновых сервисов. Самый популярный из облачных хостингов — Dropbox, а для синхронизации по локальной сети часто используют BitTorrent Sync, Owncloud и Sparkleshare. Но все эти проекты имеют определённые недостатки. Например, BitTorrent Sync работает по проприетарному протоколу с закрытыми исходниками, да и криптографические методы там немного странные. С остальными сервисами тоже не всё в порядке, поэтому появление новой альтернативы не может не радовать.
Проект Syncthing — работа плодовитого программиста Якоба Борга. Хотя первая версия программы ещё не увидела свет, но судя по истории релизов, этот день не за горами. Якоб Борг, похоже, работает круглосуточно.
Syncthing — Синхронизация файлов и папок без облака и чужих серверов Windows, Linux, MacOS и Android
Для синхронизации файлов между узлами в P2P-сети написан простой, эффективный, открытый и безопасный протокол обмена блоками Block Exchange Protocol (BEP). Утилита Syncthing — это образцовая реализация данного протокола, хотя его можно использовать в любом программном обеспечении. Программа выпускается под Mac OS X, Windows, Linux, FreeBSD и Solaris, работает в локальной сети или через интернет, легко настраивается через веб-интерфейс.
От использования протокола BitTorrent решено отказаться по понятным причинам. Неизвестно даже, используется ли он в программе BitTorrent Sync.
Syncthing синхронизирует файлы между пирами по защищённым каналам TLS с использованием протокола обмена ключами с совершенной прямой секретностью, дабы исключить возможность прослушивания. Аутентификация каждого узла в сети происходит с помощью надёжного криптографического сертификата. Только после этого узел может присоединиться к файлообменному кластеру. Для обмена файлами нужно всего лишь сообщить ID своего компьютера тому человеку, с которым хотите организовать совместное хранилище. Синхронизация происходит по дате последнего изменения файлов, версионность пока не поддерживается, зато есть поддержка синхронизации на уровне блоков, то есть при маленьком изменении в большом файле будет обновляться только небольшая часть файла.
Разработка идёт полностью открыто, весь исходный код публикуют на Github. Протокол тоже полностью открыт, так что любые баги можно сразу обнаружить и исправить.
Советы по работе программы проще всего получить на форумах пользователей с тематическими подразделами по каждому вопросу.
Источник: xakep.ru
Syncthing: улучшение локального обнаружения и ускорение синхронизации
Syncthing: как бесплатно пользоваться Obsidian Sync на Android и синхронизировать папки на ПК и моби
Я довольно долго пользовался для синхронизации файлов между своими серверами, компьютерами и мобильными устройствами такой программой, как Resilio Sync (в девичестве BTSync). Но от Resilio пришлось отказаться, поскольку на протяжении нескольких лет разработчики так и не смогли избавиться от проблемы, связанной с зависанием приложения для Android. Ошибка была признанной, обнаруживалась у многих пользователей, но не исправлялась. Вероятно, что у Resilio просто закончились программисты для Android. Пришлось перейти на Syncthing.
Syncthing – open-source аналог Resilio, а именно децентрализованная система синхронизации файлов между устройствами. Принципы ее работы схожи с Resilio, но благодаря обширному комьюнити – система работает стабильно, мобильное приложение не останавливается, синхронизация происходит без сбоев. Как и у большинства open-source проектов, связанных с программным обеспечением, у Syncthing самую малость хромает документация. Разработчики справедливо полагают, что пользователь, решивший погрузиться в мир open-source, вполне сам способен просмотреть исходный код и найти нужный ему параметр настройки, а заодно и понять, что он означает, в каких случаях применяется, а в каких нет.
Syncthing может проводить синхронизацию между устройствами как напрямую, если оба устройства находятся в одной сети или же хотя бы одно из них имеет «белый» IP-адрес, так и через сервер посредник, расположенный где-то в глобальной сети. Поиск устройства для синхронизации осуществляется через сервер посредник обнаружения, расположенный тоже где-то в глобальной сети. Сообщество Syncthing предоставляет несколько десятков или даже сотен серверов посредников обоих типов, разбросанных по всему миру.
Однако если синхронизируемые устройства располагаются в одной сети, то они могут найти друг друга, если включена функция локального обнаружения, а она включена по умолчанию. В этом случае каждое из устройств, с заданной периодичностью (от 30 до 60 секунд) шлет broadcast (в случае IPv4) и multicast (в случае IPv6) сообщение в локальную сеть. По идее, остальные устройства должны их прослушивать, анализировать и применять полученные данные для последующей прямой синхронизации.
Но все идет далеко не всегда как по маслу и в некоторых случаях автоматическое обнаружение устройства для синхронизации происходит не сразу или не случается вовсе. В этом случае задействуется внешний сервер посредник для обнаружения и велика вероятность, что и трафик синхронизации аналогично пойдет через внешний сервер посредник. Анализируя свои устройства, а под синхронизацией у меня 8 устройств, включая машины под Windows, Android-устройства и сервера с Linux, я обнаружил, что часть устройств соединяется через IPv6 (соединение хоть и прямое, но идет через туннельный сервис, так как не везде еще провайдеры предоставляют IPv6 своим клиентам), часть ходит через мост между объеденными посредством VPN локальными сетями используя внутреннюю адресацию моста. Синхронизацию как ее начало, так и время, можно попробовать ускорить, если подсказать устройствам, где именно, по какому адресу непосредственно искать другое устройство для синхронизации. Это актуально для устройств работающих в локальной сети или объединенных локальных сетях.
В настройках устройств Syncthing присутствует отдельный пункт для указания адреса, по умолчанию он устанавливается в dynamic. И все работает «из коробки». Но именно в этом пункте кроется возможность для оптимизации, настройки на конкретную сетевую инфраструктуру.
Настройка устройства. В Addresses указано dynamic.
Согласно документации на Syncthing, поле Addresses (в конфигурационном файле это address) может принимать несколько значений. А dynamic используется как универсальный элемент, позволяющий полагаться исключительно на функцию автоматического обнаружения другого устройства для синхронизации. Помимо dynamic поле способно принимать конкретные указания на IP-адрес как IPv4, так и IPv6. Вместо IP-адреса может быть использовано доменное имя как локальное, так и глобальное из сети Internet (для обоих типов имен важно, чтобы они могли быть разрешены в IP-адрес, посредством DNS, WINS и прочего). Дополнительно можно указать порт, на котором работает Syncthing на удаленном устройстве, если не используется порт по умолчанию (22000).
Актуальные на конец 2022 года версии Syncthing поддерживают два протокола для соединения между устройствами для синхронизации. Это обычный протокол TCP и новый протокол QUIC основанный на UDP. QUIC хоть и считается некоторыми ретроградами – экспериментальным, но он уже твердо вошел в обиход и на нем уже работают самые продвинутые Web-сервера. Основная особенность QUIC – большая производительность на хороших каналах по сравнению с TCP за счет отсутствия необходимости установления сеансовых соединений, обеспечения подтверждения получения пакетов и мультиплексирования потоков.
TCP-соединения прописываются как tcp4 или tcp6 для, соответственно, подключения по протоколу IPv4 и IPv6. Если не требуется разделения по версиям IP, то указывается просто tcp . Однако если указывать не доменное имя, а IP-адрес с модификатором протокола tcp , то будет выбран вариант версии протокола в зависимости от версии указанного адреса. Например, tcp://[2001:db8::23:42] указывает на использование TCP протокола с адресом IPv6. Для QUIC все аналогично: quic для универсального использования, quic4 для использования IPv4, а quic6 для IPv6.
Куда и как прописывать адреса и протоколы? Для начала следует убедиться, что прописываемые адреса – постоянны для устройств в рамках выбранной инфраструктуры сети. Например, для мобильного, стационарного компьютера и сервера я зафиксировал в маршрутизаторе (роутере) постоянные IPv4 адреса. Их же прописал и в Syncthing. А вот для IPv6 использовал локальный адрес fe80.
Такой адрес формируется на основе MAC-адреса (в большинстве случаев) и в рамках локальной сети остается уникальным.
Адреса с протоколами можно прописать через запятую в интерфейсе Syncthing, настройках устройства, либо указать адреса в конфигурационном файле settings.xml . Конфигурационный файл располагается в системах Linux по следующим путям (в зависимости от типа системы):
$HOME/.config/syncthing $HOME/Library/Application Support/Syncthing
%LOCALAPPDATA%Syncthing
Прописать адреса устройств в конфигурационном файле можно следующим образом:
tcp://192.0.2.1:22001 quic://192.0.1.254 quic://[2001:db8::23:42] quic4://my_local_server tcp6://blog.kvv213.com:54001 dynamic
Таким образом, после правильной настройки адресов модно получить более высокую скорость подключения устройств друг к другу, а также оптимизацию каналов синхронизации, исключающую, с одной стороны, пересылку данных через не самые прямые маршруты, с другой, если вдруг что-то пойдет не так, то параметр dynamic позволит безальтернативно, найти устройство и подключиться к нему.
Источник: blog.kvv213.com
Что за программа syncthing
Библиотека сайта rus-linux.net
Настройки ( Settings ) и Показать ID ( Show ID ).
Рисунок 3: Вы можете ограничить доступ к веб-интерфейсу приложения из диалога настроек.
Далее нужно ввести уникальное имя устройства в поле ввода Имя устройства ( Device Name ); по умолчанию Syncthing использует в качестве имени устройства установленное имя узла. Также в данном подразделе вы можете ограничить пропускную способность канала, если вам нужно сохранить часть его пропускной способности для соединения с ресурсами сети Интернет. Используемое по умолчанию значение 0 позволяет использовать всю доступную пропускную способность канала. Если есть возможность, в данном разделе следует установить галочку Включить релеи ( Enable UPnP ), а также воспользоваться размещенными рядом с ней галочками для того, чтобы устройство отображалось на компьютерах из глобальной и локальной сетей. Дополнительно можете активировать поддержку протокола HTTPS и ввести имя пользователя с паролем для ограничения доступа к веб-интерфейсу.
Галочка Анонимный отчет об использовании ( Anonymous Usage Reporting ) позволяет активировать механизм отправки информации о поведении пользователя на сервер проекта для последующего формирования вектора управления и разработки проекта. Ссылка рядом с галочкой ведет на страницу с дополнительной информацией о данном механизме. Вам не придется изменять значения остальных параметров, во всяком случае, после первого запуска приложения. Все значения параметров конфигурации хранятся в файлах конфигурации, которые расположены в директории ~/.config/syncthing/ и могут модифицироваться с помощью любого текстового редактора.
Сеть из узлов
После ввода настроек на всех используемых компьютерах следует связать эти компьютеры друг с другом. Индивидуальные идентификаторы устройств из 46 цифр, генерируемые на основе информации из сертификатов на каждом из устройств при первом запуске приложения, предназначены как раз для этой цели; они доступны посредством элемента меню настроек Показать ID ( Show ID ).
Вы можете переместить этот идентификатор в форме текстового файла, расположенного на флеш-накопителе с интерфейсом USB, воспользоваться смартфоном с приложением для чтения QR-кодов (Рисунок 4), отправить ого в сообщении электронной почты или воспользоваться другими веб-сервисами. После этого придется ввести идентификатор интересующего устройства вместе с его именем, нажав на кнопку Добавить удаленное устройство ( Add Device ) в веб-интерфейсе приложения на другом устройстве. Функция Рекомендатель ( Introducer ) в диалоге добавления устройства позволяет указать, следует ли использовать все известные системе распределения данных узлы на новом устройстве.
Рисунок 4: Простейший способ распространения идентификатора вашего компьютера связан с использованием приложения для сканирования QR-кодов.
Благодаря использованию идентификатора и имени устройства вы можете синхронизировать данные между вашими устройствами и делиться файлами с коллегами или друзьями. Вы можете настроить Syncthing с помощью графического интерфейса Syncthing GTK, открыв окно настроек с помощью кнопки с иконкой Syncthing в верхнем левом углу главного окна. Здесь, кроме всего прочего, имеется возможность интеграции приложения с файловым менеджером окружения рабочего стола GNOME, Cinnamon или Mate.
Добавление дополнительных директорий
По умолчанию после запуска приложение Syncthing создает директорию ~/Sync в домашней директории пользователя на каждом из устройств. В процессе синхронизации оно будет автоматически отслеживать состояние всех файлов из данной директории, а также из всех вложенных директорий, включая изменение их содержимого. Однако, при необходимости синхронизации большого объема данных вы можете добавить дополнительные директории со своими собственными параметрами с помощью диалога настройки Syncthing.
После нажатия на кнопку Добавить папку ( Add folder ) или Добавить новую папку ( Add shared folder ) из меню Syncthing GTK (Рисунок 5) следует ввести уникальное имя директории в поле ID папки ( Folder ID ) и выбрать целевую директорию. Параметры директории должны быть введены на всех используемых компьютерах, причем ее идентификатор должен быть идентичным. При этом соответствующая целевая директория может иметь отличное имя на каждом из устройств.
Рисунок 5: Syncthing автоматически создает резервные копии данных благодаря функции версионирования файлов.
Параметр Master Folder выделяется из множества других параметров. При его активации Syncthing будет защищать соответствующую директорию от добавления изменений, внесенных на остальных устройствах. Однако, Syncthing все также будет передавать информацию об изменениях, внесенных в файлы из рассматриваемой директории на данном устройстве, на другие устройства в сети. Файл исчезнет с других устройств лишь в случае его удаления из одной из защищенных директорий.
Параметр Интервал сканирования ( Search interval или Rescan Interval в новейших версиях приложения) позволяет указать, как часто Syncthing нужно искать новые или измененные данные. Вам определенно следует изменить стандартное значение в 60 секунд в сторону увеличения на малопроизводительных машинах. При необходимости вы можете нажать на кнопку Пересканировать ( Check All или Rescan ) для поиска измененных и новых файлов во всех известных приложению директориях с данными.
Syncthing позволяет использовать различные режимы создания и хранения резервных копий обрабатываемых данных с помощью инструментов из раздела Версионирование данных ( File Versioning ) [11] . В зависимости от ваших потребностей, вы можете либо вообще отказаться от создания резервных копий данных, либо использовать Простой режим версионирования ( Simple ), предусматривающий хранение фиксированного количества копий удаленных и измененных файлов в скрытой директории .stversions . Для расчета времени хранения файлов может устанавливаться даже алгоритм В шахматном порядке ( Staggered ). В случае выбора Внешнего версионирования ( External ) для создания резервных копий данных будет использоваться внешняя команда.
При добавлении данных в директорию в файловой системе без механизма разделения прав доступа (такой, как FAT) вы должны самостоятельно отключить механизм отслеживания прав доступа с помощью параметра Игнорировать права доступа ( Ignore permissions ). Далее нужно выбрать устройства, на которых Syncthing будет синхронизировать содержимое данной директории с помощью параметра Общий доступ ( Share with devices ). При необходимости вы можете исключить из процесса синхронизации поддиректории данной директории с помощью элемента меню Игнорировать шаблоны ( Ignore patterns ). После публикации новой директории вам придется подтвердить возможность доступа к ее содержимому с других компьютеров из сети (Рисунок 6).
Рисунок 6: Вам придется подтвердить возможность доступа к новой директории с удаленного компьютера на целевом компьютере.
Приложение для Android
Приложение Sycnthing для Android (Рисунок 7) все еще находится на начальных этапах разработки; однако, оно уже может успешно использоваться по прямому назначению. После запуска оно получает доступ к директории, в которой смартфон или планшет хранит фотоснимки. Как и в случае приложения для настольных компьютеров, данное приложение позволяет публиковать содержимое других директорий по мере необходимости. Процесс настройки приложения полностью аналогичен процессу настройки его версии для настольных компьютеров. Кроме того, рассматриваемое приложение позволяет активировать механизм обмена данными только при активации WiFi или при зарядке мобильного телефона.
Рисунок 7: Скорее всего, вы будете запускать приложение Syncthing для Android лишь при необходимости, ведь для его работы требуется большое количество энергии.
Необходимость в значительных энергозатратах для корректной работы приложения является одним из его главных недостатков. Если в разделе настроек приложения для мобильного телефона активированы параметры для постоянного отслеживания изменений данных и синхронизации новых данных (Рисунок 8), Syncthing будет постоянно функционировать, нагружая его центральный процессор и значительно сокращая время жизни его аккумулятора. По этой причине рекомендуется запускать Syncthing лишь при необходимости вместо запуска демона в фоновом режиме.
Рисунок 8: На данный момент Syncthing требует значительных энергозатрат для корректной работы. По этой причине стоит деактивировать демон, работающий в фоновом режиме.
Заключение
Приложение Syncthing и все его компоненты являются свободным программным обеспечением. Проект находится в фазе активной разработки и развивается в правильном направлении. Однако, приложение все еще выглядит незавершенным, что вовсе не означает, что оно не выполняет свою задачу. В моем случае синхронизация данных прошла без каких-либо эксцессов и заняла разумное время. Задержки передачи данных, такие, как минутная пауза из-за перезапуска демона, который необходимо осуществлять после каждого изменения настроек, объясняются принципом работы пиринговой сети.
Приложение показалось мне незавершенным, что простительно для текущей версии 0.11.25, еще и из-за периодических сообщений о несуществующих ошибках, которые никак не влияют на процесс синхронизации данных. Однако, команда разработчиков должна в скором времени устранить все подобные проблемы, если принимать во внимание текущий темп разработки.
Документация, доступная на данный момент лишь на английском языке, позволяет избежать некоторых проблем при первой настройке приложения [12] . Расширенная документация [13] , исчерпывающий список ответов на часто задаваемые вопросы [14] и описание методики настройки сетевого соединения на уровнях маршрутизатора и межсетевого экрана [15] также опубликованы в сети.
Syncthing поддерживает большое количество платформ и может использоваться как для синхронизации данных в домашней сети, так и для обмена данным с коллегами и друзьями. Достаточно простая процедура настройки и беспроблемный механизм синхронизации данных между множеством устройств нивелируют все имеющиеся на данный момент недоработки приложения. Как говорилось ранее, Syncthing является свободным инструментом, который можно рекомендовать пользователям, нуждающимся в альтернативе существующему закрытому решению.
Дополнительная информация
- BitTorrent sync: https://www.getsync.com
- P2P: https://en.wikipedia.org/wiki/Peer-to-peer
- Syncthing: https://syncthing.net
- Mozilla Public License: https://en.wikipedia.org/wiki/Mozilla_Public_License
- Репозиторий Debian: http://apt.syncthing.net
- Syncthing в Google Play: https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid
- Syncthing в F-Droid: https://f-droid.org/repository/browse/?fdid=com.nutomic.syncthingandroid
- Block Exchange Protocol: https://github.com/syncthing/specs/blob/master/BEPv1.md
- UPNP: https://en.wikipedia.org/wiki/Universal_Plug_and_Play
- Syncthing-GTK: https://github.com/syncthing/syncthing-gtk
- File versioning: http://docs.syncthing.net/users/versioning.html
- Start Guide: http://docs.syncthing.net/intro/getting-started.html
- Documentation: http://docs.syncthing.net
- FAQ: http://docs.syncthing.net/users/faq.html#faq
- Network settings: http://docs.syncthing.net/users/firewall.html#firewall-setup
Источник: rus-linux.net