Создаем личное облако данных в своей сети

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

Возможности платформы Syncthing

  • Кроссплатформенность - поддерживаются почти все популярные операционные системы.
  • Мобильность - существует приложение для Android, обещается приложение для IOS.
  • Безопасность - все данные передаются в зашифрованном виде. Каждый узел идентифицируется заверенным сертификатом. Подробнее о безопасности можно прочитать здесь.
  • Управление версиями файлов - защита от случайного удаления, также поддерживается ступенчатое управление версиями.
  • Синхронизация по схеме P2P - для передачи файл разбивается на части, и если он есть на других нодах вашего кластера, то они тоже участвуют в передаче.
  • Возможность работы через NAT и фаерволы.
  • Open Source! - открытый код и стандартизированный протокол Block Exchange Protocol v1.

Основные термины в Syncthing

ID - уникальный идентификатор устройства.
Релеи - сервера, которые используются для передачи трафика между устройствами в случае невозможности установки прямого соединения.
Глобальное обнаружение - сервера, сопоставляющие ID устройств их внешним IP адресам. При отключении функции и смене внешнего IP адреса устройство будет недоступно через интернет.
Локальное обнаружение - широковещательная рассылка IPv4 и IPv6 пакетов по локальной сети, содержащих ID устройства и номер прослушиваемого порта. При отключении функции и смене IP адреса устройство будет недоступно в локальной сети.

Настройка Syncthing в Windows

Приложение Syncthing не требует установки, просто распаковываем и запускаем syncthing.exe. Все ссылки для загрузки Syncthing можно посмотреть на странице программы. Само приложение консольное, графический интерфейс сделан в виде web-станицы и доступен по адресу 127.0.0.1:8384.

Syncthing интерфейс

Чтобы добавить устройство, необходимо знать его ID. Также на добавляемом устройстве необходимо подтвердить это действие. Нажимаем «Add Remote Device» и вписываем идентификатор и название устройства. Можно указать, какими папки с ним можно поделиться.

Syncthing добавить устройство

Затем подтверждаем запрос на удаленном устройстве

Подтвердить добавление

Если планируется часто использовать программу, то имеет смысл настроить автозапуск. Можно настроить запуск в планировщике Windows. При этом, если Вы хотите запускать приложение без входа пользователя (актуально для серверов), то необходимо задать пароль для графического интерфейса и выполнять от имени непривилегированного пользователя. Это требуется для безопасности!
Можно добавить аргументы к запуску: -no-console -no-browser, что означает «не запускать консоль, не открывать в браузере».

Запуск с параметрами

Чтобы защитить свои файлы от случайного удаления, включаем функцию управления версиями файлов. Для этого на нужной папке кликаем кнопку «Изменить» и задаем подходящий вариант управления версиями.

Управление версиями файлов

Запуск собственного relay сервера

Как уже было сказано выше, при отсутствии прямого соединения между устройствами, оно устанавливается через relay сервер. В принципе, ничего страшного в этом нет, единственная получаемая этими серверами информация - это IP адреса клиентов и их ID, весь передаваемый трафик проходит в зашифрованном виде. Другой вопрос, что этих серверов не так уж много. И поскольку это некоммерческий проект, то скорость передачи данных никто гарантировать не может. Но ничто не мешает Вам развернуть собственный relay сервер.

Скачиваем и распаковываем архив с сервером, который представляет собой консольное приложение. При первом запуске в папке с программой генерируются сертификат и секретный ключ RSA. Расположение ключа и сертификата можно изменить командой -keys, например, -keys="C:\Keys". По умолчанию сервер запускается как общедоступный. Чтобы запускать его как приватный, необходимо использовать команду -pools="".

Syncthing relay сервер

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

relay сервер - запуск с параметрами

Команда -listen=":22069" задает прослушиваемый порт, по умолчанию используется TCP 22067. Ниже приведу список команд, с описанием на английском:

Usage of relaysrv:
-debug
Enable debug output
-ext-address string
An optional address to advertising as being available on.
Allows listening on an unprivileged port with port forwarding from e.g.
443, and be connected to on port 443.
-global-rate int
Global rate limit, in bytes/s
-keys string
Directory where cert.pem and key.pem is stored (default ".")
-listen string
Protocol listen address (default ":22067")
-message-timeout duration
Maximum amount of time we wait for relevant messages to arrive (default 1m0s)
-network-timeout duration
Timeout for network operations between the client and the relay.
If no data is received between the client and the relay in this
period of time, the connection is terminated. Furthermore, if no
data is sent between either clients being relayed within this
period of time, the session is also terminated. (default 2m0s)
-per-session-rate int
Per session rate limit, in bytes/s
-ping-interval duration
How often pings are sent (default 1m0s)
-pools string
Comma separated list of relay pool addresses to join (default "https:// relays.syncthing.net/endpoint")
-provided-by string
An optional description about who provides the relay
-status-srv string
Listen address for status service (blank to disable) (default ":22070")

После того, как определились с нужными командами, необходимо открыть порт для нашего relay сервера. Как открыть порт на роутере, можно прочитать в статье.
Теперь можно указывать в устройствах в качестве релея свой собственный сервер. Пишется он в следующем формате: relay://192.168.10.2:22069. Здесь можно указывать как внешний IP адрес, так и домен.
UPD: Теперь релеи необходимо указывать в поле "Адрес протокола синхронизации".

Адрес relay сервера

Настройки Syncthing в Android приложении аналогичны настройкам в Windows. Там их также можно производить через Web интерфейс.