VPSРейтинг
Сеть17 марта 2026 · 12 мин чтения

MTProto-прокси на VPS: свой Telegram-прокси за 10 минут

Поднимаем личный MTProto-прокси на базе mtg — современной реализации с поддержкой FakeTLS. Трафик выглядит как обычный HTTPS, прокси работает стабильно и без регистрации на сторонних сервисах.

1. Зачем свой прокси

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

🔒 Приватность

Только вы контролируете сервер. Никаких третьих сторон, никакой телеметрии.

Скорость

Публичные прокси перегружены. Ваш — только для вас и тех, кому вы дали ссылку.

🛡️ Надёжность

Не исчезнет завтра. Работает, пока работает ваш VPS.

👥 Для всей семьи

Поделитесь ссылкой с друзьями — прокси выдержит сотни пользователей.

2. Как работает mtg и FakeTLS

mtg (github.com/9seconds/mtg) — неофициальная реализация MTProto-прокси на Go от независимого разработчика. Официальный прокси Telegram (TelegramMessenger/MTProxy) написан на C и не обновлялся с 2018 года — он не поддерживает FakeTLS. mtg широко используется сообществом и де-факто стал стандартом для самостоятельного развёртывания MTProto-прокси.

Поддерживает режим FakeTLS: при подключении клиент и прокси имитируют TLS-хендшейк с SNI-именем легитимного сайта (например, google.com). Для систем глубокой инспекции пакетов (DPI) соединение выглядит как обычный HTTPS к google.com — отличить невозможно без мониторинга IP-адресов конечных серверов.

Схема соединения
Telegram-клиент──── TLS (маскировка) ────▶mtg на VPS──── MTProto ────▶Серверы Telegram
DPI видит: TLS к google.com ·  Реально: MTProto внутри TLS-обёртки

Секрет — строка, которая авторизует клиентов и содержит имя домена для маскировки. Секрет в формате ee... (начинается с ee) — это FakeTLS-режим. Простой hex-секрет (без ee) — обычный MTProto без маскировки, хуже проходит DPI.

Выбор домена для маскировки

Домен в секрете — только имя хоста для TLS-хендшейка, реального соединения с ним нет. Используйте крупные популярные сайты: google.com, cloudflare.com, microsoft.com. Их TLS-трафик точно не блокируется ни одним провайдером.

3. Требования

ПараметрМинимумПримечание
ОСUbuntu 22.04 / 20.04Или любой Debian-based
CPU / RAM1 vCPU / 512 МБmtg потребляет ~20–50 МБ RAM
Трафик100 ГБ/месПри 50 активных пользователях
Порт443 (рекомендуется)Или любой другой открытый порт
Расположение VPSЗа пределами РФНидерланды, Германия, Финляндия
Docker или Go 1.21+Для Docker-способаИли только wget для бинарника

Конфликт порта 443 с Nginx

Если на VPS уже работает Nginx или Apache на порту 443 — используйте порт 8443 вместо 443. Он тоже хорошо проходит через корпоративные сети и редко блокируется. Всё что описано ниже — просто замените 443 на 8443.

4. Способ 1: Docker (рекомендуется)

Docker-способ проще всего: не нужно следить за версиями, обновления делаются одной командой. Используем образ от автора mtg: nineseconds/mtg:2.

Шаг 1: установить Docker

Установить Docker Engine на Ubuntu
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker

Проверьте что Docker работает:

Проверить версию Docker
docker --version

Шаг 2: сгенерировать секрет

Секрет — ваш «пароль» прокси. Команда ниже генерирует FakeTLS-секрет с маскировкой под google.com. Запустите один раз и сохраните вывод.

Сгенерировать FakeTLS-секрет (флаг --hex для hex-формата)
docker run --rm nineseconds/mtg:2 generate-secret --hex google.com

Вывод будет одной строкой, примерно такой (ваш секрет будет другим):

ee4a7b3f1c8d2e9a5f6c0b4d8e1a3f7b2c676f6f676c652e636f6d

Секрет начинается с ee — признак FakeTLS-режима. Последние символы (676f6f676c652e636f6d) — hex-кодировка домена google.com. Итого ~54 символа.

Шаг 3: создать конфигурацию

Создать директорию и файл конфига
sudo mkdir -p /etc/mtg

Создайте файл конфига, подставив ваш секрет из шага 2:

/etc/mtg/config.toml — замените SECRET на ваш секрет
secret = "ВАШ_СЕКРЕТ_ИЗ_ШАГА_2"
bind-to = "0.0.0.0:443"

Быстрый способ создать файл сразу с секретом (замените ВАШ_СЕКРЕТ):

Создать config.toml одной командой
sudo tee /etc/mtg/config.toml << 'EOF'
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:443"
EOF

Шаг 4: запустить контейнер

Запустить mtg (автоматически перезапускается после перезагрузки VPS)
docker run -d   --name mtg   --restart unless-stopped   -v /etc/mtg/config.toml:/config.toml   -p 443:443   nineseconds/mtg:2

Убедитесь что контейнер запустился:

Проверить статус контейнера
docker ps --filter name=mtg

В колонке STATUS должно быть Up N seconds.

Флаг --restart unless-stopped

Контейнер автоматически перезапустится после перезагрузки VPS и при падении. Флаг unless-stopped отличается от always тем, что не запускается, если вы вручную остановили контейнер командой docker stop mtg.

5. Способ 2: бинарник + systemd

Если Docker не нужен или не установлен — скачайте готовый бинарник и настройте systemd-сервис. Не нужно ничего компилировать.

Шаг 1: скачать бинарник

Скачать mtg v2.2.1 для Linux AMD64
VERSION=2.2.1
wget -O /tmp/mtg.tar.gz "https://github.com/9seconds/mtg/releases/download/v${VERSION}/mtg-${VERSION}-linux-amd64.tar.gz"
tar -xf /tmp/mtg.tar.gz -C /tmp --strip-components=1
sudo install -m 755 /tmp/mtg /usr/local/bin/mtg
rm /tmp/mtg.tar.gz /tmp/mtg
Проверить что mtg установлен
mtg --help

Шаг 2: сгенерировать секрет

Сгенерировать FakeTLS-секрет (сохраните вывод)
mtg generate-secret --hex google.com

Шаг 3: создать конфиг

Создать директорию и конфиг
sudo mkdir -p /etc/mtg
sudo tee /etc/mtg/config.toml << 'EOF'
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:443"
EOF

Шаг 4: создать systemd-сервис

/etc/systemd/system/mtg.service
sudo tee /etc/systemd/system/mtg.service << 'EOF'
[Unit]
Description=MTG MTProto Proxy
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mtg run /etc/mtg/config.toml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF
Включить и запустить сервис
sudo systemctl daemon-reload
sudo systemctl enable --now mtg
Проверить статус
sudo systemctl status mtg

В выводе должно быть Active: active (running).

LimitNOFILE

Параметр LimitNOFILE=65536 увеличивает лимит открытых файловых дескрипторов. Каждое соединение потребляет 2 дескриптора (клиент ↔ mtg и mtg ↔ Telegram). Без этого параметра при 500+ пользователях могут возникнуть ошибки «too many open files».

6. Спонсорский канал (adtag)

Telegram позволяет операторам MTProto-прокси привязать спонсорский канал: пользователи, подключённые через прокси, видят продвигаемый канал с меткой «Прокси-спонсор». Управляется через бот @MTProxybot.

mtg v2 не поддерживает adtag

Функция adtag есть только в официальном C-реализации Telegram — TelegramMessenger/MTProxy. В mtg v2 эта возможность отсутствует: соответствующего параметра в конфиге нет. Если спонсорский канал нужен — придётся использовать официальный MTProxy вместо mtg.

Официальный MTProxy с adtag

Официальный MTProxy написан на C, последнее обновление — 2018 год, но adtag в нём работает. Установка через Docker:

Шаг 1. Запустите контейнер без TAG — контейнер автоматически сгенерирует SECRET и выведет tg://-ссылку в логи:

Первый запуск — получить SECRET из логов
docker run -d   --name mtproxy   --restart unless-stopped   -p 443:443   -v proxy-config:/data   telegrammessenger/proxy:latest

# Посмотреть логи — там будет tg://-ссылка с секретом
docker logs mtproxy

Шаг 2. В @MTProxybot: команда /newproxy → отправьте боту tg://-ссылку из логов → бот зарегистрирует прокси и выдаст TAG (adtag).

Шаг 3. Перезапустите контейнер с TAG:

Перезапуск с TAG
docker stop mtproxy && docker rm mtproxy
docker run -d   --name mtproxy   --restart unless-stopped   -p 443:443   -v proxy-config:/data   -e TAG=ВАШ_TAG_ИЗ_MTPROXYBOT   telegrammessenger/proxy:latest

Флаг -v proxy-config:/data обязателен — в нём сохраняется SECRET между перезапусками, поэтому tg://-ссылка остаётся прежней.

Сравнение: mtg vs официальный MTProxy

Параметрmtg v2Официальный MTProxy
FakeTLS✅ есть❌ нет
Adtag (спонсор)❌ нет✅ есть
ПоддержкаПоследний релиз 2022Не обновлялся с 2018
УстановкаПростоПросто (Docker)

7. Настройка UFW

Если на сервере включён фаервол UFW — откройте порт прокси. Если UFW не используется, пропустите этот шаг.

Открыть порт 443 (TCP) в UFW
sudo ufw allow 443/tcp
sudo ufw status

Если используете порт 8443 вместо 443 — замените в команде выше.

Docker и UFW

Docker пробрасывает порты напрямую через iptables, обходя UFW. Это значит, что при использовании Docker-способа порт 443 будет доступен снаружи даже без правила UFW. Тем не менее, добавить правило UFW рекомендуется — для единообразия и документирования открытых портов.

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

Самый простой способ — перейти по ссылке https://t.me/proxy?... с устройства, где открыт Telegram. Он автоматически откроет приложение с готовым диалогом добавления прокси.

🤖Android

Способ 1 (проще): нажмите на ссылку t.me/proxy?... → Telegram откроется с кнопкой Подключить.

Способ 2 (вручную): Настройки → Данные и память → Настройка прокси → Добавить прокси → MTProto → ввести сервер, порт, секрет.

🍎iPhone / iPad

Способ 1 (проще): откройте ссылку t.me/proxy?... в браузере → нажмите Открыть в TelegramПодключить.

Способ 2 (вручную): Настройки → Данные и хранилище → Прокси → Добавить прокси → MTProto → ввести сервер, порт, секрет.

🖥️Desktop (Windows / macOS / Linux)

Способ 1 (проще): вставьте ссылку tg://proxy?... в адресную строку браузера → браузер откроет Telegram с диалогом добавления.

Способ 2 (вручную): Настройки → Продвинутые настройки → Тип соединения → Использовать прокси → Добавить прокси → MTProto → ввести данные.

Проверка что прокси работает

После подключения в настройках прокси Telegram покажет статус «Подключено» и задержку в миллисекундах. Нормальная задержка — 30–150 мс. Если статус «Не удаётся подключиться» — проверьте что порт открыт в UFW и контейнер/сервис запущен.

10. Мониторинг и обновление

Просмотр логов

Docker: логи в реальном времени
docker logs -f mtg
Docker: последние 50 строк
docker logs --tail 50 mtg
Systemd: последние события
sudo journalctl -u mtg -f
Systemd: логи за сегодня
sudo journalctl -u mtg --since today

В логах mtg нет ничего лишнего — только служебные сообщения о запуске и остановке. Это сделано намеренно: логи не должны содержать информацию о пользователях.

Обновление mtg (Docker)

Обновить mtg до последней версии образа :2
docker pull nineseconds/mtg:2
docker stop mtg
docker rm mtg
docker run -d   --name mtg   --restart unless-stopped   -v /etc/mtg/config.toml:/config.toml   -p 443:443   nineseconds/mtg:2

Обновление mtg (бинарник)

Скачать новую версию и перезапустить сервис
VERSION=2.2.1  # замените на актуальную версию
wget -O /tmp/mtg.tar.gz "https://github.com/9seconds/mtg/releases/download/v${VERSION}/mtg-${VERSION}-linux-amd64.tar.gz"
tar -xf /tmp/mtg.tar.gz -C /tmp --strip-components=1
sudo systemctl stop mtg
sudo install -m 755 /tmp/mtg /usr/local/bin/mtg
sudo systemctl start mtg
rm /tmp/mtg.tar.gz /tmp/mtg

Диагностика подключения

Если Telegram не может подключиться — проверьте порт снаружи с другого компьютера:

Проверить доступность порта с другого компьютера
nc -zv IP_ВАШЕГО_VPS 443

Если nc не установлен: sudo apt install -y netcat-openbsd. Успешный вывод: Connection to IP 443 port [tcp/https] succeeded!

Частые причины проблем
Порт не открыт в UFWsudo ufw allow 443/tcp
Контейнер/сервис упалdocker ps / systemctl status mtg
Неправильный IP в ссылкеcurl -4 ifconfig.me — проверить внешний IP
Порт занят другим процессомsudo ss -tlnp | grep :443
Секрет скопирован с лишними пробеламиПересоздайте config.toml, проверьте секрет

11. Частые вопросы

Нужен быстрый VPS за рубежом для MTProto-прокси?

Рейтинг VPS →

Смотрите также