Syncthing. Частный релей
Syncthing. Частный релей.
Содержание
1 Общая информация
- Релейный сервер (relay server) в Syncthing выполняет роль посредника при передаче данных между вашими устройствами.
- Он нужен, когда прямое (peer-to-peer) соединение между устройствами установить невозможно.
- Этот механизм используется для передачи файлов.
- Если устройства не могут соединиться напрямую, они используют релей (ретранслятор) для передачи данных.
- Релей — это резервный канал.
- Syncthing всегда пытается установить в первую очередь прямое соединение (используя порт
22000). - Только если это не удаётся, он переключается на релей.
- Поэтому в настройках клиентов мы оставляем
default(прямые соединения) и добавляем адрес частного релея как дополнительный способ связи.
1.1 Работа релея
Пусть устройства находятся за разными межсетевыми экранами (NAT), в сетях с ограничениями или без публичных IP-адресов. Они «не видят» друг друга напрямую. В этом случае Syncthing автоматически пытается использовать релей:
Устройство А подключается к релейному серверу.
Устройство Б подключается к тому же релейному серверу.
Релей получает зашифрованные данные от А и перенаправляет их к Б, и наоборот.
Таким образом, релей не хранит ваши файлы и не может их расшифровать (трафик сквозным образом шифруется между устройствами). Он просто временно передаёт зашифрованный поток, решая проблему сетевой недоступности.
1.2 Когда релей необходим
- Устройства находятся в разных локальных сетях без возможности прямой маршрутизации.
- Отсутствует публичный IP-адрес хотя бы у одного из них.
- Не удаётся настроить проброс портов (port forwarding) на роутере.
- Сеть блокирует прямые входящие соединения (например, корпоративный файрвол).
1.3 Публичные и частные релеи
- Публичные релеи — бесплатные, предоставляются сообществом.
- Syncthing по умолчанию использует глобальный пул таких серверов.
- Они могут быть перегружены, медленны, и их доступность не гарантируется.
- Частный (приватный) релей — ваш собственный сервер:
- контроль над доступом (благодаря токену);
- стабильность и предсказуемую скорость;
- конфиденциальность — трафик не уходит через чужие серверы;
- независимость от состояния публичных релеев.
2 Установка и настройка сервера релея
2.1 Общая информация
Для создания приватного релея необходимо запустить сервер
strelaysrvна машине с публичным IP-адресом, к которой будут иметь доступ все ваши устройства.Порт по умолчанию
- Сервер слушает порт
22067.
- Сервер слушает порт
Настройки для приватности
- Отключение от публичного пула
- Ключевой параметр
-pools""=, который гарантирует, что ваш релей не будет анонсирован в общем пуле.
- Ключевой параметр
- Токен безопасности (опционально)
- Параметр
-token="МойСекретныйТокен"гарантирует, что подключиться к вашему релею смогут только те клиенты, которые знают этот токен.
- Параметр
- Отключение от публичного пула
2.2 Установка программы
- Rocky Linux:
Установка репозитория EPEL
sudo dnf install epel-releaseУстановка пакета
sudo dnf install syncthing-toolsПакет
syncthing-toolsсодержит в себеstrelaysrvиstdiscosrv(сервер обнаружения).
2.3 Межсетевой экран
- Сервер релея должен быть доступен из интернета. Убедитесь, что порт
22067(по умолчанию для TCP-соединений) открыт.
2.3.1 Настройка firewalld
Откройте порт:
sudo firewall-cmd --permanent --add-port=22067/tcp sudo firewall-cmd --reloadПорт для веб-статистики (
22070/tcp) можно не открывать, если сервер используется частным образом.
2.3.2 Проброс портов
- Если сервер находится за роутером (NAT), потребуется настроить на нем проброс порта
22067(Port Forwarding) на локальный IP-адрес сервера.
2.4 Каталоги
- Создайте пользователя
strelaysrv. - Создайте каталог
/etc/strelaysrvдля хранения ключей. - Ключи генерируются при первом запуске.
sudo useradd strelaysrv sudo mkdir /etc/strelaysrv sudo chown strelaysrv /etc/strelaysrv sudo -u strelaysrv /usr/bin/strelaysrv -keys /etc/strelaysrv
2.5 Генерация токена
2.5.1 С помощью openssl
- Генерирует 48 случайных байт и кодирует их в base64, обрезая до 48 символов:
openssl rand -base64 48 | tr -d '\n' | cut -c1-48
2.5.2 С помощью pwgen
- Флаг
-s— полностью случайный,48— длина,1— одна строка:pwgen -s 48 1
2.5.3 С помощью /dev/urandom
- Прямое чтение случайных данных с фильтрацией только разрешённых символов:
cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c48
2.6 Настройка systemd-сервиса
Создайте файл сервиса:
sudo touch /etc/systemd/system/strelaysrv.serviceВставьте следующее содержимое:
[Unit] Description=Syncthing Relay Server After=network.target Documentation=man:strelaysrv(1) [Service] Restart=always #WorkingDirectory=/var/lib/syncthing-relaysrv #EnvironmentFile=/etc/default/syncthing-relaysrv #ExecStart=/usr/bin/strelaysrv -nat=${NAT} $RELAYSRV_OPTS ExecStart=/usr/bin/strelaysrv -keys=/etc/strelaysrv -status-srv="" -pools="" -token="YOUR_VERY_SECRET_TOKEN" # Hardening User=strelaysrv Group=strelaysrv ProtectSystem=strict ReadWritePaths=/etc/strelaysrv NoNewPrivileges=true PrivateTmp=true PrivateDevices=true ProtectHome=true SystemCallArchitectures=native MemoryDenyWriteExecute=true [Install] WantedBy=multi-user.target Alias=syncthing-relaysrv.service-keys=/etc/strelaysrv: указывает серверу хранить сгенерированные ключи в этой директории.-pools="": параметр для приватности; отключает отправку данных о вашем сервере в публичные пулы серверов Syncthing.-token="YOUR_VERY_SECRET_TOKEN": (рекомендуется) устанавливает секретный пароль, без которого никто не сможет использовать ваш релей.-status-srv="": отключает публичный веб-интерфейс для просмотра статистики.
Запустите сервис и добавьте его в автозагрузку:
sudo systemctl daemon-reload sudo systemctl enable --now strelaysrv.serviceПроверьте статус и найдите адрес для подключения:
# Проверка статуса sudo systemctl status strelaysrv.service # Поиск уникального адреса (URL) вашего релея в логах sudo journalctl -u strelaysrv.service -fВ логах вы увидите строку, которая начинается с
relay://.Она будет иметь вид:
relay://<Ваш_Публичный_IP>:22067/?id=<Уникальный_ID_Сервера>&token=YOUR_VERY_SECRET_TOKENСкопируйте её полностью — она потребуется для клиентов.
3 Настройка клиентских устройств
3.1 Через веб-интерфейс
- Откройте веб-интерфейс Syncthing (обычно
http://127.0.0.1:8384). - Перейдите в “Действия” (Actions) -> “Настройки” (Settings) в правом верхнем углу.
- Выберите вкладку “Соединение” (Connection).
- В поле “Адреса для прослушивания протокола синхронизации” (Sync Protocol Listen Addresses) вставьте скопированный
relay://адрес послеdefault(через запятую). - Ключевое слово
defaultгарантирует, что если ваши устройства окажутся в одной локальной сети, они будут обмениваться данными напрямую, а не через релей.
3.2 Через файл конфигурации
- Файл конфигурации
config.xml. - Добавьте строки в узел
<relayservers>в секции<options>.<options> <!-- ... другие настройки ... --> <listenAddress>default</listenAddress> <!-- Строка "default" для прямых подключений ОБЯЗАТЕЛЬНА --> <listenAddress>relay://ВАШ_IP_ИЛИ_ДОМЕН:22067/?id=УНИКАЛЬНЫЙ_ID_РЕЛЕЯ&token=ВАШ_ТОКЕН</listenAddress> <!-- ... другие настройки ... --> </options>
