вівторок, 8 жовтня 2013 р.

BTSync на службе у админа

BitTorrent Inc известна своим легендарным, пиринговым протоколом BitTorrent и клиентом μtorrent. Но есть удивительная утилита BitTorrent Sync - btsync, которая может пригодиться в ИТ хозяйстве администратора.

Что такое btsync?
Минусы btsync.
Установка в систему.
Параметры, используемые в btsync.
Какие бывают ключи-секреты в btsync.
Игнорирование файлов.
Версионность файлов.
Использование btsync с помощью веб интерфейса.
Использование btsync без помощи веб интерфейса.
FAQ btsync.
Сравнение btsync с другими.

BitTorrent Sync



Что такое btsync?

BitTorrent Sync - это возможность безопасно с шифрованием передавать файлы между вашими (и только вашими) устройствами с помощью BitTorrent протокола. Не нужны будут новомодные облака, в которые люди заливают шифрованные резервные копии, так как не понятно кто может на стороне облака рыться в ваших файлах.

btsync работает на большинстве современных операционных систем:

  • Mac OS X Snow Leopard или новее.
  • Windows XP SP3 или новее.
  • Linux с ядром 2.6.16 (glibc 2.4) или новее.
  • FreeBSD 8.4, 9.1 или новее.
  • Android 2.2 или новее.
  • iOS 5.0 или новее.

Для многих привычно ассоциировать BitTorrent с кучей народа, качающим сообща пиратские фильмы, благодаря торрент-трекерам. Но в случае с btsync - это не так! Для синхронизации ваших файлов между вашими устройствами вы должны будете сгенерировать символьный ключ-секрет. BitTorrent Sync использует /dev/random в Mac и Linux и Crypto API в Windows для создания вашего случайного, Base32-основанного, символьного ключа-секрета. Весь трафик при синхронизации будет зашифрован AES.

Если синхронизация будет осуществляться не в локальной сети, а через Интернет, то могут быть задействованы UDP, NAT traversal и UPnP для прохода шифрованного трафика через маршрутизаторы. Но в любом случае файлы передаются по шифрованным соединениям только между вашими устройствами, которые знают ключ-секрет.

Для решения задачи поиска ваших устройств в сети существуют следующие решения:

  • Local peer discovery. Если все ваши устройства находятся в локальной сети, то для их поиска производится отправка широковещательного (broadcast) пакета. Все устройства с единым секретом отвечают на такой пакет и тем самым начинают взаимодействие.
  • Peer exchange (PEX). Ваши устройства помогают друг другу, выдавая известные им адреса.
  • Известные хосты. Для локальной сети с постоянными IP адресами можно вручную указать адреса, по которым обитают ваши устройства.
  • DHT (Distributed Hash Table). Если вы разрешите, то с помощью распределённой хеш-таблицы будет осуществлён поиск всех ваших устройств, знающих SHA1(ключ-секрет).
  • BitTorrent трекер. BitTorrent Sync может с вашего разрешения использовать трекер для облегчения поиска друг друга вашим устройствам. Трекер так же выступает в роли STUN сервера и помогает устройствам установить прямое соединение, которые могут находиться за NAT.


Минусы btsync.

btsync - это бесплатная программа с закрытым кодом.

Компания BitTorrent Inc не имеет доступа к зашифрованным файлам, не размещает файлы у себя и никак не контролирует процесс, но собирает анонимную статистику о:

  • Архитектуре.
  • Кол-во файлов.
  • Кол-во папок.
  • Уникальный ID.
  • Опции программы.

и при определённых ситуациях отправляет её на сервера BitTorrent Inc - смотри подробности в FAQ btsync. Эти минусы могут для кого-то перевесить плюсы программы и знать об них следует заранее.


Установка в систему.

Дело в том, что скачанный со страницы labs.bittorrent.com/experiments/sync.html бинарник btsync при своём запуске раскидает и создаст нужные ему файлы по вшитым в него путям.

Чтобы сделать всё красиво в Убунту и сразу решить все вопросы с правами доступа на нужные папки и организовать после перезагрузки запуск btsync, можно воспользоваться BitTorrent Sync PPA репозиторием - ppa:tuxpoldo/btsync и добавить его в систему

sudo apt-add-repository ppa:tuxpoldo/btsync

Я пошёл другим путём через создание своего деб пакета btsync, который позволил самостоятельно проконтролировать все этапы.

  • Скачайте архив btsync.tar.gz, содержащий всё для создания своего деб пакета.
  • Распакуйте архив.
  • Новые версии бинарника btsync, скачанные с его родного сайта следует разместить в bittorrentsync/usr/local/bin/.
  • В файле bittorrentsync/DEBIAN/control следует изменить поля Version и Architecture, в зависимости от того что скачали с официального сайта.
  • Предполагается и в скриптах прописано, что будут созданы пользователь и группа с именем btsync.
  • Можете заранее создать конфигурационный файл с нужными настройками и сохранить его в bittorrentsync/etc/btsync/sync.conf. Параметры будут описаны ниже.
  • Запустите create-bittorrentsync и получите деб пакет, который можно устанавливать в Убунту системах.


Параметры, используемые в btsync.

Формат конфигурационного файла должен быть в JSON. В файле конфигураций можно применять следующие параметры:

  • device_name - имя устройства. Должно быть уникальным для каждого устройства в вашей системе синхронизации.
  • listening_port - используемый по умолчанию порт. Если 0, то будет выбран произвольный.
  • storage_path - путь где будут находиться служебные файлы btsync. В эту папку у пользователя btsync должны быть права на запись.
  • pid_file - путь к PID файлу.
  • check_for_updates - проверять наличие обновления для программы (true) или нет (false)?
  • use_upnp - использовать Universal Plug and Play (UPnP)?
  • download_limit - лимит скачивания. Если 0, то ограничения нет.
  • upload_limit - лимит отдачи. Если 0, то ограничения нет.
  • webui - блок, регламентирующий работу встроенного веб интерфейса. Если веб интерфейс не нужен, то удаление listen отключит его. Так же веб интерфейс не работает, если в ручную настроен блок shared_folders.
    • listen - какой слушать интерфейс и порт. Для работы на всех сетевых интерфейсах устройства с портом 8888 можно указать "0.0.0.0:8888"
    • login - логин к веб админке.
    • password - пароль к веб админке.
  • shared_folders - блок, описывающий выданные в доступ папки.
    • secret - строка ключа-секрета. Используйте команду btsync --generate-secret чтобы получить себе уникальный ключ. О ключах-секретах чуть ниже.
    • dir - путь к каталогу, который будет расшарен со своим содержимым.
    • use_relay_server - использовать релей сервер (true) или нет (false)? Релей-сервер в сложнейших ситуациях, когда ваши устройства не могут из своих сетей соединиться друг с другом напрямую, позволит устройствам связаться с ним и передать всё в шифрованном трафике друг другу.
    • use_tracker - использовать трекер (true) или нет (false)?
    • use_dht - использовать DHT (true) или нет (false)?
    • search_lan
    • use_sync_trash - что делать если человек удалил файлы в расшаренной папке? Если use_sync_trash = true, то файлы будут перемещены в подкаталог .SyncArchive/ внутри каталога переменной dir. Если use_sync_trash = false, то в зависимости от операционной системы, файлы будут стёрты навсегда или попадут в системную Корзину.
    • known_hosts - список известных адресов устройств в формате IP:порт.
  • disk_low_priority - Если true, то файловый приоритет btsync'а при операциях I/O будет понижен.
  • folder_rescan_interval - Число в секундах для дополнительной проверки папок, помимо используемых алгоритмов реального времени для определения изменений.
  • lan_encrypt_data - Если true, то btsync будет шифровать данные в локальной сети так же как и в сети Интернет.
  • lan_use_tcp - Если true, то в локальной сети будет использоваться протокол TCP вместо UDP.
  • max_file_size_diff_for_patching - размер указывается в Мб. Если файл меньше этого размера, то при обновлении он будет скачиваться целиком, иначе будет выясняться какие куски (чанки - chunks) изменились и будут скачиваться только изменённые. По умолчанию BitTorrent протокол работает с чанками размером 4 мб. Возможно, не имеет смысла указывать max_file_size_diff_for_patching меньшим или равным 4 мб. Вероятно, имеет смысл указывать max_file_size_diff_for_patching большим, чтобы только крупные файлы обновлялись методом патчинга изменённых чанков. Мелкие файлы лучше перекачать заново.
  • max_file_size_for_versioning - размер указывается в Мб. Если размер файла больше значения max_file_size_for_versioning, то для него не будет создаваться его версионная копия.
  • rate_limit_local_peers - лимиты скорости применять и в локальной сети.
  • sync_max_time_diff - указывается в секундах, сколько разрешена разница в показаниях часов на устройствах. Синхронизируйте время на своих устройствах с помощью публичных серверов времени.
  • sync_trash_ttl - указывается в днях, через сколько будут автоматически удаляться файлы из папки .SyncArchive/. Этот параметр связан с use_sync_trash = true.


Какие бывают ключи-секреты в btsync.

  • С полным доступом (Full access) - данный master ключ даёт возможность всем устройствам полный двухсторонний доступ при синхронизации. В консоли используйте btsync --generate-secret
  • Только-на-чтение (Read only) - данный ключ генерируется на основе master ключа с помощью btsync --get-ro-secret МАСТЕР-КЛЮЧ. Используется только в односторонних синхронизациях.
  • Одноразовый (One-time) - данный ключ-секрет можно создать на основе мастер-ключа Full access или ключа Read only. Время ключа One-time ограничено 24 часами после его создания, после чего он не будет работать.


Игнорирование файлов.

Если вы выдали для синхронизации папки и файлы, но некоторые файлы вы хотели бы исключить из операций синхронизации, то файл .SyncIgnore в кодировке UTF-8 вам поможет.

Поддерживаются маски для файлов - * и ?


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

BitTorrent Sync поддерживает версионность файлов со своего релиза 1.1.16. По умолчанию старые файлы хранятся 30 дней в подпапке .SyncArchive/. Период хранения можно настроить через параметр sync_trash_ttl. Старые версии файлов маркируются дополнительным числом в имени файла и чем выше число, тем более "поздняя" версия этого файла.


Использование btsync с помощью веб интерфейса.

Для работы веб интерфейса нужно:
1) отсутствие в конфигурационном файле блока shared_folders. Расшаривать папки будете уже в веб-интерфейсе.
2) наличие в конфигурационном файле блока webui.
Пример

"webui" :
{
    "listen" "0.0.0.0:8888",
    "login" "admin",
    "password" "pa$$1admin2very3Strong!"
}

С помощью веб-интерфейса совсем не сложно расшарить папку. Используйте вначале кнопку Добавить папку (Add Folder) и нажмите один и только один раз кнопку Сгенерировать (Generate) и сохраните ваш ключ-секрет. Укажите Путь (Path) к папке, которая будет участвовать в синхронизации.

На остальных ваших устройствах больше не нажимайте кнопку Сгенерировать (Generate), а просто добавляйте папки и указывайте уже полученный ключ-секрет.


Использование btsync без помощи веб интерфейса.

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

Мне нужно было настроить синхронизацию среди 3 серверов, где каждый бы из серверов складывал свои резервные копии в определённую папку, а файлы из неё с помощью btsync синхронизировались на другие два сервера, что создавало нужную избыточность.

Веб-интерфейс сам отключится, если
1) присутствует в конфигурационном файле блок shared_folders.
2) отсутствие блока webui или его параметра listen.

С помощью команды btsync --generate-secret был получен ключ-секрет AVE43EXY2TMKKXZISGEJ7S7NSGGPHRJBR , который был прописан в параметре secret блока shared_folders. Так как синхронизация будет проходить в стенах локальной сети, то отключены такие технологии как трекер, DHT, релей-сервер. А раз речь идёт о локальной сети, то указаны все IP адреса серверов в блоке known_hosts. Пользователю, от которого будет работать btsync, даны права на запись в каталоги /var/dump_backup/, /var/run/btsync/ и /usr/local/lib/btsync/.

В моём случае, конф /etc/btsync/sync.conf приобрёл вид:

{
    "device_name": "node1",
    "listening_port" : 8889,
    "storage_path" : "/usr/local/lib/btsync/",
    "pid_file" : "/var/run/btsync/btsync.pid",
    "check_for_updates" : false, 
    "use_upnp" : false,
    "disk_low_priority" : true,
    "lan_encrypt_data" : true,
    "lan_use_tcp" : true,
    "max_file_size_diff_for_patching" : 50,
    "folder_rescan_interval" : 60,
    "download_limit" : 0,
    "upload_limit" : 0,
    "shared_folders" :
      [
      {
      "secret" : "AVE43EXY2TMKKXZISGEJ7S7NSGGPHRJBR",
      "dir" : "/var/dump_backup/",
      "use_relay_server" : false,
      "use_tracker" : false,
      "use_dht" : false,
      "search_lan" : false,
      "use_sync_trash" : false,
      "known_hosts" :
          [
          "10.0.1.11:8889",
          "10.0.1.22:8889",
          "10.0.1.33:8889"
          ]
      }
      ]
}

Данный конфиг был растиражирован на остальные сервера и подправлен только параметр device_name, который должен быть уникален в пределах вашей системы синхронизации. Рестарт службы btsync на всех серверах - sudo /etc/init.d/btsync restart и теперь любой файл, попавший в каталог /var/dump_backup/ окажется на всех остальных серверах в их локальных каталогах /var/dump_backup/.


FAQ btsync.

  • Кто-нибудь из других пользователей BitTorrent может видеть мои файлы?
    Нет. Хоть BitTorrent Sync основан на протоколе BitTorrent, НО весь трафик шифруется приватными ключами, полученными на основе вашего мастер ключа-секрета. Ваши файлы могут видеть и скачивать только те люди, которым вы дадите ваш ключ-секрет.
  • Что это за ключ-секрет и как он работает?
    Секретная строка из символов автоматически генерируется по вашему запросу и обеспечивает его уникальность. Поскольку каждый ключ-секрет по 20 символов, то, маловероятно, что один и тот же ключ-секрет будет создан одновременно в двух разных местах. Если вы параноидально беспокоитесь о безопасности, то есть возможность создавать новые ключи-секреты и заменять текущие с количеством символов в секрете более 40. Не забудьте после генерации нового ключа для папки на всех ваших устройствах заменить старый ключ новым.
  • Как быстро начнётся синхронизация при появлении изменений?
    Если в расшаренную папку попадает файл, то он будет синхронизирован немедленно после его сохранения или закрытия. Так как на разных операционных системах бывают различные ньюансы, связанные с мониторингом файловых операций, введён дополнительно механизм принудительной проверки папки через определённый интервал времени. За это отвечает параметр folder_rescan_interval.
  • Что за файлы .SyncID, .SyncIgnore, .SyncPart, .SyncTemp и .!Sync и папки .SyncTrash/.SyncArchive?
    Когда вы расшариваете папку, то в ней создаются некоторые служебные файлы и папки:
    • .SyncID - файл содержит уникальный, внутренний ID папки. Если удалить файл или в ручную его изменить, то BitTorrent Sync может не распознать папку и не синхронизировать её.
    • .SyncIgnore - файл, в котором можно указать файлы, исключаемые из процесса синхронизации. Поддерживается указание через маски * и ?
    • .SyncTrash - (до v1.1.40) BitTorrent Sync по умолчанию не удаляет ваши файлы. Эта папка содержала файлы, удалённые на другом вашем устройстве.
    • .SyncArchive - (v1.1.40 и последующие) это новое имя для .SyncTrash, где хранятся удалённые файлы в новом версионном стиле.
    • .!Sync - временные файлы BitTorrent Sync во время передачи сохраняет с постфиком .!Sync. После получения всего файла, постфикс удаляется. Например file.mp3 во время получения будет виден как file.mp3.!Sync и после полной закачки станет file.mp3.
    • .SyncPart - данное расширение показывает, что файл сейчас обновляется методом патчинга изменённых чанков.
  • Что будет если несколько людей сделают изменения в одном и том же файле?
    Когда происходит изменение файла на одном устройстве, он воссоздается на других устройствах. Сохранится последняя версия файла.
  • Что будет если удалить файл из расшаренной папки?
    После удаления файла другие устройства проведут синхронизацию и так же уберут файл из своих каталогов, выделенных для синхронизации по данному ключу. Если use_sync_trash = true, то файлы будут перемещены в подкаталог .SyncArchive/ внутри каталога переменной dir. Если use_sync_trash = false, то в зависимости от операционной системы, файлы будут стёрты навсегда или попадут в системную Корзину.
    sync_trash_ttl определит количество дней нахождения в .SyncArchive/ удалённых файлов.
  • Что будет если одновременно в каталогах с разных устройств появится файл с одним и тем же именем?
    Человек всегда прав, поэтому BitTorrent Sync синхронизирует всё и кто был добавлен последний, тот перезатерёт конкурентов, даже если они более актуальные.
  • Что будет если убрать из расшаривания папку?
    Все файлы останутся на месте. Не докачанные файлы с расширением .!sync будут удалены.
  • Что и когда отправляется на сервера BitTorrent Inc?
    Только когда вы используете трекер (use_tracker = true), релей (use_relay_server = true) и проверку обновления (check_for_updates = true) возможна отправка анонимной статистики использования.
    Отправляется:
    • Архитектура.
    • Кол-во файлов.
    • Кол-во папок.
    • Уникальный ID.
    • Опции программы.
  • Как контролировать частоту опроса папки и синхронизации её?
    Синхронизация делается в режиме реального времени. В дополнение к реалтайм алгоритму - расшаренные папки сканируются раз в folder_rescan_interval.
  • А как синхронизируются устройства когда они выключены?
    Никак. BitTorrent Sync - это не облачное решение типа SkyDrive, DropBox, GDrive. Вы синхронизируетесь только между вашими устройствами и они должны быть включены все или, хотя бы, попарно.
  • А как синхронизировать внутренний HDD и внешний USB драйв?
    Никак. BitTorrent Sync не синхронизирует локальные папки в пределах компьютера, а синхронизирует папки между сетевыми устройствами.
  • Можно использовать синхронизацию только в локальной сети? Без какой-либо связи с Интернетом!
    Да, можно. Отключите:
    • Релей - use_relay_server = false
    • Трекер - use_tracker = false
    • DHT - use_dht = false

    Синхронизация будет происходить только внутри локальной сети.

  • Какие лимиты на размер файла или их количество при передаче?
    Никаких. Всё зависит только от возможностей вашей операционной системы и наличию свободного места на ваших дисках. ОЗУ используется из расчёта 1 файл = 400 байт. Для мониторинга 1 миллиона файлов BitTorrent Sync потребуется ~400 Мб ОЗУ.
  • Когда файл изменился BitTorrent Sync передаёт его заново целиком или только изменения?
    Файлы меньше 4 Мб передаются целиком. Большие файлы делятся на 4 мегабайтные чанки и передаются только изменённые чанки.
  • Можно использовать BitTorrent Sync в MS Windows XP?
    Вам нужна 32-битная MS Windows XP Service Pack 3. 64-битная MS Windows XP Service Pack 3 не поддерживается.
  • Есть консольный (CLI) вариант BitTorrent Sync для MS Windows?
    Нет. CLI только для Linux.
  • Есть WebUI для MS Windows?
    WebUI только для Linux.


Сравнение btsync с другими.

BTSync vs Rsync.

Общее:
Rsync (Remote Synchronization) помогает при безопасной передаче между сетевыми устройствами.

Rsync умеет с помощью алгоритма rolling checksum эффективно передавать изменения в файле, если на противоположной стороне есть отличающаяся версия этого файла. Следует знать, что за это приходится платить бо́льшей загрузкой CPU, хотя резервное копирования с помощью Rsync делается в часы минимальной нагрузки и процессоры стали настолько мощные, что данный "минус" можно не принимать в рассчёт. То есть Rsync и BTSync, каждый по своему, умеет передавать данные безопасно и передавать изменения (дельты) огромных файлов, когда в пункте назначения есть старая копия файла.

Различия:
Rsync "связывает" одномоментно только 2 устройства и можно двухсторонне синхронизироваться: А с Б и Б с А. Обычно Rsync применяют в схемах когда устройства (сервера, десктопы) копируют свои резервные копии на единый сервер бакапа.

Плюсом Rsync против BTSync является лучшая информативность о ходе синхронизации. BTSync скудно пишет в свой журнал чем он занят в данный момент.

Rsync является свободной программой, а BTSync - нет и это минус.

BTSync vs Zsync.

Общее:
Zsync создавался с оглядкой на Rsync в попытке создать инструмент, который эффективно решал бы проблему передачи по сети только изменений огромных файлов, типа образов ISO операционных систем и чтобы вся нагрузка была на стороне клиента, а не сервера. Для решения своих задач BTSync опирается на куски-чанки, а Zsync использует следующую схему. Всякий раз, когда происходит изменение некоего огромного файла нужно вызывать zsyncmake для создания индексного файла, который должен находится рядом с файлом, для которого он и был создан. Если загрузка осуществляется первый раз, то zsync автоматически загрузит весь файл и это будет похоже на скачивание файла с помощью wget. Но если файл загружается повторно, zsync загрузит индексный файл, оценит изменения между локальным и удалённым файлом и загрузит только изменившиеся блоки данных.

Различия:
Zsync - это синхронизация только в одну сторону и только между двух сторон! Клиент разгружает сервер, скачивая только дельты. Zsync'у очень нужен на стороне сервера - http-сервер, допускающий загрузку отдельных частей файла с помощью Range. BTSync - это множественная синхронизация в обе стороны среди всех участников.

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


Сто́ит или не сто́ит использовать BTSync? Этот вопрос должен решить каждый для себя сам. Утилита закрытая - это факт! Если её "успокоить", то она не будет отправлять анонимную статистику своим авторам, если кого-то это нервирует. В остальном это просто удивительный механизм синхронизации в неком едином поле, контролируемым только вами. Без посредников, без облаков, без оплаты.

Рекомендуется официальный видеокурс по BTSync.

Связующие звенья:
Дружище zsync спешит на помощь.
Обновление пакетов Ubuntu через BitTorrent.
Скачиваем образы и обновляем Ubuntu по прогрессивным технологиям.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments