3SELLER Journal 3SELLER →

Web proxy для телеграм: 4 шага, 3 ошибки и 2 часа до рабочего узла на VPS

14.11.2026

Свой web proxy для Telegram поднимается за вечер. Задача сводится к четырём шагам: сервер, домен, секрет, Nginx. Дальше начинается отладка, и на ней люди застревают на часы.

Ниже то, что я бы рассказал себе два года назад. Тогда я ставил первый узел и половину вечера искал ошибку, которой в конфиге не было.

Web proxy для Telegram - это сервис, а не кнопка в приложении

В мессенджере есть поле для прокси: Настройки, Данные и память, Прокси. Туда вбиваются параметры. Но чтобы параметры появились, кто-то должен поднять узел. Владелец узла либо вы, либо сервис, которому вы доверяете.

Технически web proxy выглядит для сети как обычный HTTPS-сайт. Снаружи идут запросы к домену по TLS. Внутри работает либо MTProto поверх FakeTLS, либо канал через WebSocket. Отсюда и название: для наблюдателя это веб, а не что-то отдельное.

Момент, который упускают почти все: web proxy для телеграм не делает вас анонимным автоматически. Он меняет то, через какой узел идёт трафик мессенджера. Остальные приложения на устройстве идут своим путём. Если задача завернуть вообще всё, это другая история и другой инструмент.

Три технологии, которые постоянно путают

Вокруг Telegram намешано три разных штуки, и люди регулярно покупают не то.

MTProto с FakeTLS - родной протокол мессенджера. Трафик маскируется под обычный TLS-сеанс. Секрет здесь 16 байт, а ссылка начинается с префикса ee или dd.

SOCKS5 - универсальный прокси на уровне сокетов, к Telegram не привязанный вообще. Логин и пароль здесь отдельные учётные данные, никак не связанные с секретом MTProto. Перепутать их - самая частая причина фразы «не подключается».

WEB proxy - надстройка, где тот же узел отдаёт соединение через HTTPS и WebSocket. Для сети это выглядит как работа с сайтом. Плюс один домен закрывает сразу несколько сценариев: сам прокси, заглушку и страницу с инструкцией.

Что нужно до первой команды

Домен - самый частый источник боли. Если он делегирован через Cloudflare, переключите запись в режим DNS Only, серый значок. Иначе автоматический выпуск сертификата не пройдёт, а вы будете искать проблему в конфиге Nginx, где её нет.

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

Архитектура: три слушателя, которые нельзя перепутать

Внутри схемы живут три сущности. Публичный TLS-листенер Nginx смотрит наружу. Приватный WEB-листенер telEgo слушает внутри docker-сети на отдельном порту. И MTProxy-часть, которая отвечает за FakeTLS.

Nginx проксирует запросы на приватные листенеры и наружу не отдаёт ничего лишнего. В режиме https-lanes на публичном TLS-листенере нужен HTTP/2. Выбрали WebSocket - Nginx обязан пробрасывать заголовки Upgrade и Connection. Без них соединение умрёт на рукопожатии.

Здесь и лежит главная ошибка новичка. Он включает WebSocket-режим, но оставляет конфиг Nginx по умолчанию. Соединение открывается, висит и закрывается. Со стороны Telegram это выглядит как «прокси не отвечает», а в логах приложения пусто.

Второй по частоте промах - два листенера на одном порту внутри контейнера. Docker поднимет контейнер, но один из сервисов молча не запустится. Проверяйте вывод telEgo при старте, а не только статус контейнера.

Быстрый запуск через Docker Compose

Самый короткий путь - готовый пример из проекта telEgo. Клонируете репозиторий и заходите в каталог examples/web-proxy. Там три файла: docker-compose.yml с контейнерами и приватной сетью, telego.toml с настройками MTProxy, TLS fronting и WEB proxy, nginx/nginx.conf с TLS, WEB ingress и обычным сайтом.

Дальше заменяете proxy.example.com на свой домен во всех трёх файлах. Не в одном и не в двух, а во всех. Авторы telEgo в описании примера web-proxy предупреждают об этом отдельно: я видел конфиги, где домен поменяли в toml и compose, а в nginx оставили заглушку. Результат - сертификат на чужое имя и тишина в логах.

В telego.toml добавьте секцию [web-proxy]. В ней указывается публичный домен и параметры приватного листенера. Без этой секции узел поднимется как обычный MTProxy, а WEB-ссылка не появится, и вы будете гадать, почему.

Если не хочется разбираться с compose, есть скрипты быстрой установки под Ubuntu. Они делают то же самое, но прячут детали. Минус очевиден: когда что-то отвалится, вы не поймёте, что именно сломалось.

Секрет генерируется один раз и живёт отдельно

Секрет - это 16 байт, из которых потом собираются все ссылки. Генератор вызывается прямо из образа, без установки:

docker run --rm scratchnet/telego:latest generate proxy.example.com --web-host proxy.example.com

Первая позиция - домен для FakeTLS. Значение --web-host - публичный домен WEB proxy. Для простой установки это один и тот же домен, и так делает большинство.

Команда напечатает базовый секрет, ссылки MTProxy с префиксами ee и dd, а также WEB-ссылки. В telego.toml идёт базовый секрет без префикса. Ссылки с префиксами уже готовы к отправке пользователям, редактировать их руками не надо.

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

И ещё: для настройки прокси никому не нужен код входа в ваш Telegram и пароль двухэтапной аутентификации. Если владелец узла их просит, разговор закончен.

Nginx: приватные листенеры и аккуратный ingress

В конфиге Nginx должно быть три блока. Первый проксирует на приватный WEB-листенер. Второй отвечает за MTProxy-часть. Третий отдаёт обычный сайт, чтобы домен открывался в браузере.

Заглушка на том же домене полезна не для красоты. Есть куда повесить инструкцию для тех, кому вы даёте ссылку. И куда привести человека, если он случайно открыл адрес в браузере и решил, что «ничего не работает».

HTTP/2 на публичном листенере включается одной директивой. Забыть про неё легко, а симптом неприятный: соединение устанавливается, но данные идут рывками или не идут вовсе. Именно поэтому в инструкциях повторяют про HTTP/2 в режиме https-lanes, а не потому что так модно.

Отдельно про сертификаты. Автоматический выпуск требует, чтобы домен уже резолвился в ваш сервер. Если DNS обновился минуту назад, подождите. Ручной выпуск через certbot тоже работает, но тогда не забудьте про автопродление. Иначе через три месяца узел тихо умрёт, и вы узнаете об этом от пользователей.

Проверка конфига - это не формальность

Перед перезапуском обязательно nginx -t. Синтаксическая ошибка, которую не поймали, оставит вас без TLS-листенера после reload. Telegram покажет «соединение с прокси не установлено» без единой детали.

Порядок действий такой: проверка конфига, перезапуск telEgo, перезагрузка Nginx, ожидание сертификата. Не наоборот. Если сделать reload Nginx до того, как внутренний сервис поднялся, вы получите пятисотые и решите, что конфиг неверный.

Дальше откройте домен в браузере. Видите заглушку - TLS в порядке. Не видите - смотрите логи Nginx, а не логи Telegram. Приложение вам ничего полезного не расскажет, оно просто не достучалось.

Как добавить ссылку в Telegram

Запустите telEgo с флагом -l. Он напечатает WEB-ссылку. Дальше два пути, и оба рабочие.

В Telegram Desktop: Настройки, Продвинутые, Тип соединения, Прокси, Добавить прокси. Вставляете ссылку в поле, приложение само разбирает параметры на домен, порт и секрет. Названия пунктов зависят от версии и языка интерфейса, но логика одна.

На мобильном проще всего отправить ссылку себе в Избранное и нажать на неё. Telegram предложит подключиться, вы соглашаетесь. Ручной ввод через форму тоже работает, но там легко ошибиться в одном символе секрета и потом искать причину.

Если добавляете вручную, выбирайте тип, который указал владелец узла. Не переносите secret из MTProto в поле пароля SOCKS5. Это разные вещи, и половина обращений в поддержку растёт именно из этой путаницы.

Сколько это стоит и что с нагрузкой

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

Домен - от десяти долларов в год. Сертификат бесплатный. Время на первичную настройку - час-два, если делать по инструкции и не отвлекаться. Обслуживание - минут двадцать в месяц, если настроить мониторинг.

Сравните с готовым решением: там вы платите за трафик или за период, зато не думаете про обновления. Для одного человека разница часто в пользу готового. Для команды из десяти человек свой узел окупается быстро.

Мониторинг и обслуживание: скучная часть, которая решает

Проверка раз в сутки, что домен отвечает и сертификат не истекает, закрывает восемьдесят процентов инцидентов. Хватает cron-задачи с curl -I по адресу заглушки и напоминания за две недели до конца сертификата. Остальное - обновления образа и перезапуск при выходе новой версии.

Держите простой аптайм-чек на заглушку сайта. Если она перестала открываться, значит проблема на уровне TLS или DNS, и разбираться надо начинать оттуда. Логи telEgo смотрите вторыми, а не первыми.

Ещё одна привычка, которая экономит нервы: фиксируйте версии образов в compose. Автоматический latest однажды принесёт несовместимое изменение, и узел не поднимется после перезагрузки сервера. Это происходит редко, но всегда не вовремя.

Что вы получите и чего не получите

Получите свой узел, независимый от чужого владельца. Стабильную скорость, если сервер близко и не перегружен. Контроль над логами и обновлениями. Возможность выдать доступ команде или семье и в любой момент отозвать его, сменив секрет.

Не получите анонимности в широком смысле, защиты всего устройства и автоматического шифрования остальных приложений. Встроенный прокси в Telegram направляет трафик мессенджера через посредника. Всё, точка.

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

Когда свой сервер не нужен

Если нужен рабочий канал здесь и сейчас, а не ещё один проект на вечер, разумнее взять готовый прокси. Каталог на 3seller.com/proxy как раз про это: разные типы, разные географии, понятные условия. Выбираете, получаете параметры, подключаетесь.

Для наглядности, как это выглядит:

Каталог прокси 3seller

Готовый вариант выигрывает в другом: не надо думать про сертификаты и nginx -t. Минус тоже очевиден: узел не ваш, и вы доверяете владельцу настолько, насколько вообще готовы доверять посреднику.

Компромисс, который я обычно советую знакомым: держите под рукой оба варианта. Свой узел как основной, готовый как резерв на случай, когда сервер ушёл в ребут или провайдер устроил сюрприз. Пять минут на переключение вместо трёх часов на подъём упавшего VPS.

Три вещи, которые ломают настройку чаще всего

Первая: домен в режиме проксирования Cloudflare. Сертификат не выпускается, вы ищете ошибку в конфиге, а её там нет. Лечится переключением записи в DNS Only.

Вторая: WebSocket-режим без заголовков Upgrade и Connection в Nginx. Соединение висит, приложение молчит, логи пустые.

Третья: секрет с префиксом, вставленный в telego.toml. В конфиг идёт базовый секрет, префиксы живут только в ссылках для пользователей. Один лишний символ, и узел не стартует или стартует с нерабочим секретом.

Есть и четвёртая, менее очевидная: правки в конфиге без перезапуска контейнера. Nginx перезагрузили, telEgo забыли. Внешне всё живо, WEB-ссылка не работает.

Практический шаг, с которого стоит начать

Возьмите домен, который не жалко. Поднимите VPS на Ubuntu 22.04 или 24.04, откройте HTTP и HTTPS на фаерволе, прогоните Docker Compose из примера. Если через час домен открывается в браузере и показывает заглушку, а ссылка из -l подключается в Desktop, вы всё сделали правильно.

Если нет, начните с nginx -t и проверки DNS. В девяти случаях из десяти проблема там, а не в коде и не в провайдере.

А если возиться не хочется совсем, каталог прокси 3seller открывается в браузере и не требует ни одной команды в терминале. Иногда это ровно то, что нужно.

← Вернуться к блогу

Читать дальше