Перейти к основному содержимому

DC Relay

DC Relay нужен, когда b4 работает внутри цензурируемой сети и WebSocket-транспорт тоже заблокирован, поэтому прямой маршрут до Telegram должен уходить через VPS.

Телефон ──────▶ b4 (роутер) ──────▶ VPS ──────▶ Telegram
ТСПУ видит ТСПУ видит
"HTTPS на google.com" "трафик на VPS"

VPS нужен только как TCP-форвардер. Ни ключей, ни специфичного для MTProto софта.

Где релей не применяется

Релей принадлежит прокси-серверу. WebSocket-мост очищает его для каждой своей сессии, а режим Только WebSocket вообще не создаёт TCP-плеча, поэтому в обоих случаях поле ни на что не влияет.

Настройка​

Установить socat на VPS:

apt install -y socat

Указать DC Relay в разделе Настройки, Telegram как адрес VPS с базовым портом, например my-vps.com:7007. Поле появляется при режиме транспорта Прямой TCP или Авто.

Затем открыть кнопку ? рядом с полем. Окно Настройка socat для DC Relay перечисляет дата-центры и готовую команду socat для каждого, а внизу есть Копировать всё.

Окно настройки socat для DC Relay

Что делают команды

Каждый socat пересылает один порт релея на публичный адрес дата-центра, к которому b4 подключается напрямую: базовый порт + DC - 1 на эндпоинт :443 этого дата-центра. Медиа-дата-центр 203 использует порт DC 2, поэтому отдельная команда для него не нужна.

Firewall на VPS

Каждый порт из списка должен быть открыт на VPS, всего пять, по одному на основной дата-центр. Окно печатает их последней строкой.

подсказка

Запуск команд из /etc/rc.local или юнита systemd сохраняет их после перезагрузки.

При режиме Авто с настроенным релеем план ставит relay TCP первым, а WebSocket за ним. Прогретый пул WebSocket-соединений прокси-сервера проверяется до построения этого плана, поэтому прогретое соединение из пула всё равно может быть использовано раньше релея.

IPv4 или IPv6​

Переключатель Семейство адресов в окне меняет, к каким адресам Telegram подключаются сгенерированные команды. Он нужен для VPS, который дотягивается до Telegram по IPv6, но не по IPv4.

Переключатель меняет только верхнюю сторону команды:

# IPv4
socat TCP-LISTEN:7007,fork,reuseaddr TCP:149.154.175.50:443 &

# IPv6
socat TCP-LISTEN:7007,fork,reuseaddr TCP6:[2001:b28:f23d:f001::a]:443 &

Сторона прослушивания следует адресу из поля DC Relay. IPv6-литерал там записывается в скобках, [2001:db8::1]:7007, и помощник выдаёт TCP6-LISTEN, чтобы VPS принимал соединение от b4 тоже по IPv6. Стороны независимы, и IPv4-адрес релея с IPv6-адресами наверх - допустимое сочетание.

Обновление не меняет эти адреса

Адреса дата-центров, которые набирает b4, встроены в сервис - и по IPv4, и по IPv6. Обновить меняет список, по которому b4 сопоставляет наблюдаемый адрес с дата-центром, и адреса, которые печатает это окно; на то, куда идёт подключение, оно не влияет.

У медиа-DC 203 нет адреса IPv6, и он использует порт DC 2, поэтому медиа идёт туда же, куда указывает команда для DC 2. Если после перехода на IPv6 медиа перестало загружаться, эту одну команду возвращают на IPv4, а остальные оставляют.