> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/proxy-guide/mtproto-proxy-telegram.md](https://docs.f3cloud.com/ru/proxy-guide/mtproto-proxy-telegram.md).

# Свой MTProto-прокси для Telegram на VPS – установка mtg с FakeTLS

Как поднять свой MTProto-прокси для Telegram на VPS за 10 минут. Установка mtg v2 в Docker, секрет FakeTLS с маскировкой под настоящий сайт, ссылка и QR-код для подключения, частые ошибки.

**MTProto-прокси** – это прокси, который понимает собственный протокол Telegram. Его поддерживают все официальные приложения Telegram, поэтому достаточно открыть одну ссылку, и мессенджер начнёт работать через ваш сервер, без VPN и без отдельных программ. В этой статье мы поднимем прокси на **mtg**, одной из самых известных реализаций MTProto-прокси, включим маскировку **FakeTLS** и получим ссылку, которую можно отправить близким. Все команды мы проверили на нашем тестовом сервере с Debian 12, а версия mtg на момент проверки **2.2.8**.

***

## Почему свой прокси лучше бесплатных списков

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

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

***

## Как работает маскировка FakeTLS

Чтобы понять, зачем нужен FakeTLS, полезно посмотреть, как прокси выглядит со стороны провайдера. Обычное соединение с MTProto-прокси несложно распознать по характерному началу обмена, и системы фильтрации трафика научились это делать. FakeTLS решает эту задачу так же, как многие современные VPN-протоколы. Соединение с прокси оформляется как **обычное защищённое подключение (TLS) к известному сайту**, например `www.microsoft.com`, и со стороны оно выглядит как посещение этого сайта.

Какой сайт изображать, задаётся прямо в **секрете**, то есть в ключе, по которому Telegram подключается к прокси. Секрет FakeTLS всегда начинается с букв `ee`, а в его конце закодировано имя выбранного сайта. У mtg есть ещё одна полезная защита, которая называется domain fronting. Если к прокси подключается не Telegram, а, например, проверяющая система или обычный браузер, mtg не обрывает соединение, а прозрачно передаёт его настоящему сайту. Мы проверили это на тестовом сервере. При обращении к порту 443 нашего прокси по имени `www.microsoft.com` в ответ пришёл **настоящий сертификат Microsoft**, ровно такой же, как у самого сайта.

***

## Что понадобится

* **Сервер** с Debian 12 или Ubuntu 24.04. Прокси почти не нагружает сервер, поэтому хватит самого простого тарифа, например **DE-Promo**. Если сервера ещё нет, закажите его по [инструкции](https://docs.f3cloud.com/ru/client-area/order-vps.md) или попробуйте [бесплатный тестовый сервер](https://docs.f3cloud.com/ru/client-area/trial-server.md).
* **Подключение к серверу по SSH**, например через [Termius](https://docs.f3cloud.com/ru/vps/termius-connection.md). Все команды ниже выполняются от имени `root`.
* **Свободный порт 443**. Если на сервере уже работает сайт или VPN на этом порту, возьмите для прокси другой порт, как описано в разделе [Если что-то не работает](#esli-chto-to-ne-rabotaet).

***

## 1. Установите Docker

mtg удобнее всего запускать в Docker, так его легко обновить и удалить без следов. Установите Docker официальным скриптом.

```bash
# Устанавливаем Docker официальным скриптом с сайта Docker
curl -fsSL https://get.docker.com | sh

# Проверяем, что Docker работает
docker --version
```

Последняя команда выведет версию, например `Docker version 29.9.1`.

***

## 2. Создайте секрет

Секрет генерирует сам mtg. В конце команды укажите сайт, под который будет маскироваться прокси.

```bash
# Генерируем секрет FakeTLS для маскировки под www.microsoft.com
docker run --rm nineseconds/mtg:2 generate-secret --hex www.microsoft.com
```

Команда выведет длинную строку из цифр и букв, которая начинается с `ee`. Это и есть секрет, скопируйте его, он понадобится на следующем шаге.

> **Какой сайт выбрать для маскировки.**
>
> Подойдёт крупный зарубежный сайт, который открывается по HTTPS, например `www.microsoft.com`. Разработчик mtg советует выбирать сайт, который логично связан с вашим сервером, и не использовать `google.com`, ведь у Google известный список собственных сетей, и подмену легко заметить. Если у вас есть свой домен на этом же сервере, его тоже можно использовать.

> **Секрет – это пароль от вашего прокси.**
>
> Любой, у кого есть секрет и адрес сервера, сможет подключиться к прокси. Не публикуйте его в открытых каналах и чатах.

***

## 3. Создайте файл настроек

mtg хранит настройки в небольшом файле. Создайте для него папку и сам файл, вставив вместо `ВАШ_СЕКРЕТ` строку из предыдущего шага.

```bash
# Папка для настроек прокси
mkdir -p /opt/mtg

# Файл настроек с секретом и портом
cat > /opt/mtg/config.toml <<'EOF'
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:443"
EOF
```

В файле всего две строки. В `secret` хранится секрет, а `bind-to` говорит mtg принимать подключения на порту **443**, как обычный HTTPS-сайт. Остальные параметры у mtg уже настроены разумно, и менять их не нужно.

***

## 4. Запустите прокси

```bash
# Запускаем mtg в фоне с автозапуском после перезагрузки сервера
docker run -d --name mtg-proxy --restart=unless-stopped \
  -v /opt/mtg/config.toml:/config.toml \
  -p 443:443 \
  nineseconds/mtg:2

# Проверяем, что контейнер работает
docker ps
```

В выводе `docker ps` должна появиться строка `mtg-proxy` со статусом **Up** и портом `0.0.0.0:443->443/tcp`. Ключ `--restart=unless-stopped` поднимет прокси сам после перезагрузки сервера.

> **Порт внутри и снаружи должен совпадать.**
>
> В инструкции к mtg прокси внутри контейнера слушает порт `3128`, а снаружи открывается порт `443`. Работает это так же, но тогда команда из следующего шага выдаст ссылку с портом **3128**, и Telegram к ней не подключится. Мы проверили это на тестовом сервере, поэтому в нашем варианте прокси и внутри, и снаружи работает на **443**, и ссылка сразу получается правильной.

***

## 5. Получите ссылку для подключения

mtg сам соберёт готовые ссылки.

```bash
# Выводим ссылки для подключения к прокси
docker exec mtg-proxy /mtg access /config.toml
```

В ответе будет блок `ipv4` с адресом сервера, портом `443` и несколькими ссылками.

* **`tme_url`**, ссылка вида `https://t.me/proxy?...`. Её удобнее всего отправлять другим людям, она открывается и в браузере, и в Telegram.
* **`tg_url`**, ссылка вида `tg://proxy?...`, которая сразу открывает Telegram.

> **QR-код без сторонних сервисов.**
>
> В ответе mtg есть и ссылки на QR-коды, но они создаются на внешнем сайте, и секрет при этом уходит туда же. Надёжнее нарисовать QR-код прямо в терминале. Установите программу командой `apt install -y qrencode` и выполните `qrencode -t ansiutf8 'ссылка_tme_url'`. QR-код можно отсканировать камерой телефона.

***

## 6. Подключите Telegram

Откройте ссылку `tme_url` на устройстве, где установлен Telegram, например отправьте её себе в «Избранное» и нажмите на неё. Telegram покажет окно с данными прокси, подтвердите в нём подключение. С этого момента мессенджер работает через ваш сервер.

Добавить прокси можно и вручную. Откройте в настройках Telegram раздел с прокси, выберите тип **MTProto** и введите адрес сервера, порт `443` и секрет.

***

## Если нужен рекламный тег или установка без терминала

* **Рекламный тег**, то есть продвижение своего канала через специального бота Telegram, mtg версии 2 не поддерживает. Сам автор mtg советует для этого проект [telemt](https://github.com/telemt/telemt).
* **Без терминала** прокси для Telegram умеет ставить приложение **AmneziaVPN** версии 5.0.0.5 и новее, на вкладке **Сервисы**. Подробно это описано в [документации Amnezia](https://docs.amnezia.org/ru/documentation/instructions/telegram-proxy). Если вы уже подняли VPN по [нашей инструкции](https://docs.f3cloud.com/ru/vpn-guide/setup-amnezia.md), так получится быстрее всего.

***

## Как обновить или удалить прокси

Чтобы обновить mtg до новой версии, скачайте свежий образ и пересоздайте контейнер. Настройки и секрет хранятся в файле `/opt/mtg/config.toml`, поэтому ссылка для подключения не изменится.

```bash
# Скачиваем новую версию mtg
docker pull nineseconds/mtg:2

# Удаляем старый контейнер и запускаем новый с теми же настройками
docker rm -f mtg-proxy
docker run -d --name mtg-proxy --restart=unless-stopped \
  -v /opt/mtg/config.toml:/config.toml \
  -p 443:443 \
  nineseconds/mtg:2
```

Чтобы удалить прокси полностью, выполните `docker rm -f mtg-proxy` и удалите папку командой `rm -rf /opt/mtg`. Все выданные ссылки после этого перестанут работать.

***

## Если что-то не работает

<details>

<summary>Контейнер не запускается, порт 443 занят</summary>

Проверьте, какая программа уже занимает порт.

```bash
# Кто слушает порт 443
ss -lntp | grep ':443 '
```

Если там веб-сервер или VPN, выберите для прокси другой порт, например `8443`. Поменяйте его в файле настроек в строке `bind-to = "0.0.0.0:8443"`, а при запуске контейнера укажите `-p 8443:8443`. Ссылка из шага 5 сама получит новый порт.

</details>

<details>

<summary>В ссылке указан порт 3128</summary>

Значит, внутри контейнера прокси слушает `3128`, а снаружи открыт другой порт. Проверьте строку `bind-to` в файле `/opt/mtg/config.toml` и параметр `-p` у контейнера, номера портов слева и справа должны совпадать с портом в `bind-to`. После исправления пересоздайте контейнер, как описано в разделе об обновлении.

</details>

<details>

<summary>Telegram не подключается к прокси</summary>

Проверьте по порядку.

1. Контейнер работает. В выводе `docker ps` у `mtg-proxy` статус **Up**.
2. Порт открыт в брандмауэре сервера. Если вы включали UFW по [нашей инструкции](https://docs.f3cloud.com/ru/vps/security/firewall.md), разрешите порт командой `ufw allow 443/tcp`.
3. В ссылке правильный IP-адрес сервера и порт.

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

</details>

<details>

<summary>Как посмотреть, что происходит с прокси</summary>

mtg пишет события в журнал контейнера.

```bash
# Последние 50 строк журнала прокси
docker logs --tail 50 mtg-proxy
```

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

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
