ShiftStage

Свой узел

Одна команда на небольшом сервере — и на пути между телефоном и Mac к нам не уходит ни одного запроса.

Зачем узел нужен

В локальной сети наше не участвует вовсе: телефон и Mac находят друг друга сами. Узел нужен вне дома, и делает он две вещи.

СигнализацияДва устройства, уже доверяющие друг другу, узнают, как друг до друга добраться. Узел видит отпечатки и адреса; прочитать то, что они говорят, он не может.
RelayКогда сети отказывают в прямом соединении, узел переносит непрозрачный зашифрованный поток. Расшифровать его он не может и ничего не хранит.

Роли включаются по отдельности. Узел с одной сигнализацией — рабочая конфигурация: полосу расходует relay, и его можно не поднимать вовсе либо взять с другого узла.

Что даёт свой узел

  • Метаданные к нам не попадают. Кто с кем и когда соединялся — единственное, что видят наши узлы; ваш этого нам не покажет.
  • Ваш узел ни у кого не спрашивает разрешения. Проверка права защищает нашу полосу, поэтому на вашем узле её нет вовсе — он отвечает перед вами.
  • Мы не можем его приостановить. Когда приостановлены службы производителя, ваш узел не затронут — по устройству, а не по любезности.
  • Ваш регион, ваш провайдер. Задержка зависит от расстояния: узел рядом с вами лучше узла рядом с нами.

Чего он не даёт

Сказать это прямо — и есть смысл страницы. Он не отменяет подписки. Соединение из-за пределов своей сети требует действующей подписки независимо от того, чей узел на пути: вы платите за приложение, а не за нашу полосу, и приложение проверяет это на устройстве, прежде чем кому-то позвонить. Он не меняет шифрования — оно и так сквозное. И он не отменяет работы: машина, её полоса и её обновления — ваши.

Что потребуется

  • Сервер с публичным адресом. Хватит младшего тарифа любого провайдера: сигнализация — это единицы килобайт на соединение, а relay стоит ровно того, что через него прошло.
  • Docker — или вообще ничего, если взять статический бинарник.
  • Пять открытых портов: 7443/TCP, 3478/UDP, 3479/UDP для сигнализации, 7444/UDP и 7445/TCP для relay.

Как

Выпустить ключ и запустить узел:

docker run --rm -v "$PWD/tls:/tls" ghcr.io/zavsegdatai/rendezvous keygen --out /tls
docker run -d --name rendezvous --restart unless-stopped \
  -p 7443:7443 -p 3478:3478/udp -p 3479:3479/udp \
  -p 7444:7444/udp -p 7445:7445 \
  -v "$PWD/tls:/tls:ro" \
  ghcr.io/zavsegdatai/rendezvous \
  --tls-certificate /tls/cert.pem --tls-key /tls/key.pem \
  --advertise адрес.вашего.сервера --roles signaling,relay

Первая команда печатает отпечаток ключа. Адрес и этот отпечаток вводятся в настройках агента на Mac, в списке узлов. Сертификат публичного удостоверяющего центра не нужен: устройство доверяет узлу по закреплённому отпечатку — так же, как доверяет вашему Mac.

Образ и бинарник публикуются с каждым выпуском узла. Пока этот выпуск не вышел, узел собирается из исходников — пошаговое руководство лежит в репозитории.

Как держать его свежим

Сигнальный обмен версионируется, и незнакомое поле игнорируется, а не отвергается — узел, отставший на версию, продолжает работать. Узел, отставший на несколько, однажды перестанет, и обновление — это загрузка нового тега.