В условиях ужесточения блокировок и внедрения систем глубокого анализа трафика (DPI), классические прокси-серверы (SOCKS5, стандартный MTProto) всё чаще попадают под фильтры провайдеров. Они либо блокируются по сигнатурам, либо подвергаются таргетингу (замедлению).

Команда Telegram Desktop разработала и открыла код альтернативного решения — tproxy-server (Web Proxy). Его главная особенность в том, что он инкапсулирует зашифрованный трафик MTProto внутрь обычного HTTPS или WebSocket-соединения. Для DPI-систем и сетевых администраторов это выглядит как абсолютно легитимное посещение защищенного веб-сайта.

В этой статье мы разберем, как работает эта технология, и установим её на собственный VPS за 5 минут с помощью автоматизированного скрипта.

Как это работает?

Архитектура Web Proxy отличается от классической:

  1. Клиент Telegram (например, Desktop или WEB) открывает скрытый WebView.

  2. Вместо прямого TCP-соединения с прокси, клиент устанавливает стандартное HTTPS/WSS соединение с вашим доменом.

  3. Серверная часть (tproxy-server на Go) принимает этот веб-трафик, извлекает из него MTProto-пакеты и перенаправляет их локальному демону mtproxy (на C).

  4. mtproxy общается с серверами Telegram как обычно.

Ключевое преимущество: Внешний наблюдатель видит только TLS-трафик к вашему домену. Без расшифровки (которая невозможна благодаря HTTPS) отличить этот трафик от посещения обычного сайта-визитки невозможно.

Требования к серверу

Перед началом убедитесь, что у вас есть:

  1. VPS/VDS: Архитектура x86_64, ОС Ubuntu 22.04+ или Debian 12+. (Минимум 1 ГБ RAM для комфортной компиляции).

  2. Расположение сервера лучше всего брать зарубежом (Нидерланды, Финляндия и др.)

  3. Доменное имя: Например, proxy.example.com. Оно должно быть привязано к IP-адресу вашего сервера через A-запись.

  4. Открытые порты: В панели управления хостинга и фаерволе сервера должны быть открыты порты 80 (для получения SSL-сертификата Let's Encrypt) и 443 (для основного трафика).

  5. Важно: Не используйте CDN (например, Cloudflare) в прозрачном режиме для этого домена. Caddy должен иметь прямой доступ к порту 80 для HTTP-01 валидации.

    Рекомендуемые сервера

    SmartApe

    Firstbyte

    VDSka

    VDSina

Пошаговая установка

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

Шаг 1: Подготовка

Подключитесь к вашему серверу по SSH под пользователем root (или используйте sudo).

Шаг 2: Загрузка и запуск скрипта

Скачайте скрипт установки и запустите его строго через интерпретатор bash (использование sh может вызвать синтаксические ошибки из-за различий в оболочках):

curl -fsSL https://raw.githubusercontent.com/fastbrains13/telegram-web-proxy/main/install.sh -o install.sh
chmod +x install.sh
sudo bash install.sh

Шаг 3: Ввод данных

Скрипт интерактивно запросит у вас три параметра:

  1. Доменное имя (например, fbinfo.site).

  2. Email (нужен только для экстренных уведомлений от Let's Encrypt, можно использовать любой рабочий).

  3. Секретный ключ. Если оставить поле пустым и нажать Enter, скрипт сгенерирует надежный 32-символьный hex-ключ автоматически.

Что делает скрипт "под капотом"?

Если вам интересно, что именно запускается от имени root, скрипт выполняет следующие действия:

  • Устанавливает зависимости: curl, git, build-essential, golang-go, nftables.

  • Клонирует официальный репозиторий и компилирует tproxy-server (пропуская проблемные unit-тесты прав доступа).

  • Создает системных пользователей tproxy и mtproxy с ограниченными правами.

  • Генерирует конфигурационные файлы со строгими правами доступа (chmod 0400), что является требованием безопасности Telegram.

  • Устанавливает и настраивает веб-сервер Caddy для автоматического получения и продления SSL-сертификатов.

  • Настраивает правила nftables, чтобы скрыть внутренние порты (2398, 8080, 8081) от внешнего мира, оставляя доступными только 80 и 443.

  • Регистрирует и запускает systemd-службы.

Подключение в Telegram

После успешного завершения скрипт выведет в консоль готовые данные для подключения и удобную ссылку.

Она выглядит так:

https://t.me/webproxy?server=fbinfo.site&secret=48fabba482b3c337550ef2ba9fa0a77b

Просто кликните по этой ссылке на устройстве, где установлен Telegram (на данный момент наилучшая поддержка реализована в Telegram Desktop). Приложение автоматически распознает формат, предложит добавить прокси и сразу же проверит соединение.

Проверка работоспособности и диагностика

Если что-то пошло не так, первым делом проверьте статус служб:

systemctl status caddy tproxy-server mtproxy --no-pager

Все они должны иметь статус active (running) и подсвечиваться зеленым.

Частые проблемы:

  1. Ошибка 502 Bad Gateway при проверке домена: Подождите 30–60 секунд. Caddy в фоновом режиме запрашивает SSL-сертификат у Let's Encrypt. Повторите проверку: curl -I https://ваш-домен.site. Должен вернуться статус HTTP/2 200.

  2. Скрипт зависает на скачивании зависимостей Go: Убедитесь, что ваш хостинг-провайдер не блокирует исходящие соединения к github.com или core.telegram.org. В редких случаях может потребоваться временное использование HTTP-прокси для установки.

  3. Клиент не подключается: Проверьте, что A-запись домена обновилась и указывает на правильный IP. Убедитесь, что порт 443 открыт в фаерволе хостинга (Security Groups).

Рекомендация по безопасности (Anti-Probing)

По умолчанию скрипт создает простую HTML-заглушку. Если ваш прокси будет использоваться многими людьми, рекомендуется заменить содержимое /srv/tproxy-site/ на копию реального, существующего сайта.

Это защитит от так называемого "активного зондирования" (active probing), когда блокирующие системы пытаются отличить прокси от обычного сайта, анализируя содержимое главной страницы. tproxy-server устроен так, что он покажет ваш сайт любому обычному посетителю, и только клиент Telegram, знающий правильный secret, сможет "пробиться" через него к прокси-функционалу.


Репозиторий скрипта: GitHub

Официальный репозиторий технологии: telegramdesktop/tproxy-server

Комментарии (0)