Установка MTProto Proxy (mtg) на Linux-сервере
📡 Установка MTProto Proxy (mtg) на Linux-сервере
Полная пошаговая инструкция для новичков. Проверено на Ubuntu/Debian с mtg v2.2.4.
Что это и зачем
mtg — это легковесный MTProto-прокси для Telegram. Его задача — дать пользователям доступ к Telegram, встраивая прокси прямо в настройки приложения (без необходимости запускать VPN).
Как это работает
┌──────────────┐ MTProto FakeTLS ┌──────────────┐ ┌──────────────┐ │ Telegram │ ──────────────────────────► │ Ваш │ ──────► │ Telegram │ │ клиент │ маскируется под обычный │ сервер │ │ серверы │ │ │ HTTPS-трафик к google.com │ (mtg) │ │ │ └──────────────┘ └──────────────┘ └──────────────┘
FakeTLS — технология маскировки. Для стороннего наблюдателя трафик выглядит как обычное HTTPS-соединение к google.com (или другому указанному домену). На самом деле внутри передаётся зашифрованный трафик Telegram.
Требования
| Требование | Описание |
|---|---|
| Сервер | VPS/VDS с Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+) |
| Доступ | SSH-доступ с правами root
|
| Порт | Свободный порт (рекомендуется 443 или 8443)
|
| Доступ к Telegram | Сервер должен иметь прямой доступ к серверам Telegram (т.е. сервер не в стране с блокировкой) |
| Архитектура | amd64 (x86_64) — стандарт для большинства VPS
|
⚠️ Внимание: MTProto-прокси нужно размещать на сервере, с которого Telegram доступен напрямую (например, сервер в Европе, США и т.д.). Поднимать его на сервере внутри РФ бессмысленно — Telegram всё равно будет недоступен.
Установка mtg
Шаг 1: Подключитесь к серверу по SSH
ssh root@ВАШ_IP_СЕРВЕРА
Шаг 2: Скачайте последнюю версию mtg
# Скачиваем архив с GitHub
curl -sL https://github.com/9seconds/mtg/releases/download/v2.2.4/mtg-2.2.4-linux-amd64.tar.gz -o /tmp/mtg.tar.gz
💡 Совет: Актуальную версию всегда можно проверить на странице релизов: https://github.com/9seconds/mtg/releases
Если у вас ARM-сервер (например, Oracle Cloud Free Tier), скачивайте файл mtg-X.X.X-linux-arm64.tar.gz
Шаг 3: Распакуйте архив
# Распаковываем
tar -xzf /tmp/mtg.tar.gz -C /tmp/
Шаг 4: Установите бинарник
# Перемещаем бинарник в системную директорию
mv /tmp/mtg-2.2.4-linux-amd64/mtg /usr/local/bin/mtg
# Даём права на исполнение
chmod +x /usr/local/bin/mtg
Шаг 5: Проверьте установку
mtg --version
Ожидаемый результат:
2.2.4 (go1.26.1: 2026-03-24T08:59:03Z ...)
✅ Если видите версию — mtg установлен успешно!
Шаг 6: Очистите временные файлы
rm -rf /tmp/mtg.tar.gz /tmp/mtg-2.2.4-linux-amd64/
Генерация секрета
Секрет — это уникальный ключ, который нужен для подключения клиентов к вашему прокси. Он же определяет домен для маскировки (FakeTLS).
Генерация в hex-формате
mtg generate-secret --hex google.com
Пример вывода:
ee1234567890abcdef1234567890abcdef676f6f676c652e636f6d
Генерация в base64-формате
mtg generate-secret google.com
⚠️ Внимание: Сохраните секрет! Он понадобится для конфигурации сервера и для подключения клиентов Telegram. Если потеряете — можно сгенерировать новый, но придётся обновить настройки у всех клиентов.
Какой домен выбрать для маскировки?
Домен после команды — это сайт, под который маскируется трафик. Правила выбора:
| ✅ Хороший выбор | ❌ Плохой выбор | Почему |
|---|---|---|
google.com
|
ya.ru
|
Российский домен не должен "жить" на европейском IP |
www.microsoft.com
|
vk.com
|
Аналогично — геолокационное несоответствие |
cloudflare.com
|
localhost
|
Несуществующий/локальный домен подозрителен |
www.amazon.com
|
telegram.org
|
Очевидно связан с Telegram |
Правило: выбирайте крупный международный сайт, который территориально соответствует расположению вашего сервера.
Создание конфигурации
mtg v2 использует конфигурационный файл в формате TOML.
Минимальный конфиг (рекомендуется для начала)
cat > /etc/mtg.toml << 'EOF'
# Ваш секрет (замените на свой!)
secret = "xxxxxxxx"
# Адрес и порт для прослушивания
# 0.0.0.0 означает "все сетевые интерфейсы"
bind-to = "0.0.0.0:8443"
# Защита от replay-атак (рекомендуется оставить включённой)
[defense.anti-replay]
enabled = true
max-size = "1mib"
error-rate = 0.001
EOF
⚠️ Внимание: Не забудьте заменить значение secret на ваш настоящий секрет, сгенерированный на предыдущем шаге!
Выбор порта
| Порт | Плюсы | Минусы |
|---|---|---|
443
|
Максимальная маскировка (стандартный HTTPS-порт) | Может быть занят другим сервисом (nginx, 3X-UI и т.д.) |
8443
|
Альтернативный HTTPS-порт, редко занят | Чуть менее «стандартный», но вполне нормальный |
3128
|
Порт из примера mtg | Ассоциируется с прокси (Squid), может насторожить DPI |
Рекомендация: если порт 443 свободен — используйте его. Если занят — используйте 8443.
Проверка, занят ли порт
ss -tlnp | grep :443
Если ничего не вывело — порт свободен. Если вывело процесс — порт занят, используйте другой.
Первый запуск и проверка
Запуск в режиме отладки (для первого раза)
Добавьте временно debug = true в начало конфига:
# Открываем конфиг
nano /etc/mtg.toml
Добавьте первой строкой:
debug = true
Запустите:
mtg run /etc/mtg.toml
Что вы увидите:
- Если всё ОК — mtg начнёт выводить отладочные сообщения и будет ждать подключений
- Если ошибка — mtg покажет описание проблемы и завершится
Проверка что порт слушается (в другом терминале)
ss -tlnp | grep 8443
Ожидаемый вывод:
LISTEN 0 4096 0.0.0.0:8443 0.0.0.0:* users:(("mtg",pid=12345,fd=3))
✅ Если видите строку с mtg — прокси запущен и слушает!
Остановка после проверки
Нажмите Ctrl+C в терминале, где запущен mtg.
💡 Совет: После успешной проверки уберите строку debug = true из конфига — в рабочем режиме отладка не нужна, она создаёт лишнюю нагрузку.
Настройка автозапуска (systemd)
Чтобы mtg запускался автоматически при загрузке сервера и перезапускался при падении:
Шаг 1: Создайте файл сервиса
cat > /etc/systemd/system/mtg.service << 'EOF'
[Unit]
Description=MTProto Proxy (mtg)
Documentation=https://github.com/9seconds/mtg
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mtg run /etc/mtg.toml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
Шаг 2: Примените и запустите
# Перечитать конфигурацию systemd
systemctl daemon-reload
# Включить автозапуск при загрузке системы
systemctl enable mtg
# Запустить прямо сейчас
systemctl start mtg
Шаг 3: Проверьте статус
systemctl status mtg
Ожидаемый вывод:
● mtg.service - MTProto Proxy (mtg)
Loaded: loaded (/etc/systemd/system/mtg.service; enabled)
Active: active (running) since ...
✅ Статус active (running) — всё работает!
Полезные команды управления
| Команда | Описание |
|---|---|
systemctl start mtg
|
Запустить |
systemctl stop mtg
|
Остановить |
systemctl restart mtg
|
Перезапустить |
systemctl status mtg
|
Проверить статус |
journalctl -u mtg -f
|
Смотреть логи в реальном времени |
journalctl -u mtg --since "1 hour ago"
|
Логи за последний час |
Настройка файрвола
Не забудьте открыть порт, на котором работает mtg!
UFW (Ubuntu)
ufw allow 8443/tcp
ufw status
iptables
iptables -A INPUT -p tcp --dport 8443 -j ACCEPT
# Чтобы сохранить правило после перезагрузки:
apt install iptables-persistent -y
netfilter-persistent save
firewalld (CentOS/Fedora)
firewall-cmd --permanent --add-port=8443/tcp
firewall-cmd --reload
⚠️ Внимание: Если у вашего хостинга есть внешний файрвол (Security Groups, Cloud Firewall), откройте порт и там! Это частая причина, почему прокси «не работает» — порт закрыт на уровне провайдера.
Подключение клиентов Telegram
Способ 1: Ссылка для быстрого подключения (рекомендуется)
Сформируйте ссылку и отправьте её пользователям:
tg://proxy?server=IP_СЕРВЕРА&port=8443&secret=ВАШ_СЕКРЕТ
Пример:
tg://proxy?server=185.100.200.50&port=8443&secret=ee1234567890abcdef1234567890abcdef676f6f676c652e636f6d
Или в формате HTTPS (открывается в браузере):
https://t.me/proxy?server=185.100.200.50&port=8443&secret=ee1234567890abcdef1234567890abcdef676f6f676c652e636f6d
Пользователь открывает ссылку → Telegram предлагает подключить прокси → нажимает «Подключить» → готово! 🎉
Способ 2: Ручная настройка
Android
Настройки → Данные и память → Тип прокси → Добавить прокси ├── Тип: MTProto ├── Сервер: IP вашего сервера ├── Порт: 8443 └── Секрет: ваш секрет
iOS
Настройки → Данные и память → Прокси → Добавить прокси ├── Тип: MTProto ├── Сервер: IP вашего сервера ├── Порт: 8443 └── Секрет: ваш секрет
Telegram Desktop (ПК)
Настройки → Продвинутые настройки → Тип подключения → Использовать свой прокси → Добавить прокси ├── Тип: MTPROTO ├── Хост: IP вашего сервера ├── Порт: 8443 └── Секрет: ваш секрет
Проверка подключения
После добавления прокси рядом с ним появится индикатор:
- 🟢 Доступен + время пинга — работает!
- 🔴 Недоступен — см. раздел диагностики
Диагностика проблем
Встроенная диагностика mtg
В v2.2.4 есть команда mtg doctor:
mtg doctor /etc/mtg.toml
Она проверит:
- Корректность конфигурации
- Сетевую доступность серверов Telegram
- Доступность домена фронтинга
- Соответствие SNI и DNS
Частые проблемы и решения
| Проблема | Причина | Решение |
|---|---|---|
| Telegram показывает 🔴 «Недоступен» | Порт закрыт файрволом | Откройте порт: ufw allow 8443/tcp
|
bind: address already in use
|
Порт занят другим процессом | grep :8443 |
mtg: command not found
|
Бинарник не в PATH | Проверьте: ls -la /usr/local/bin/mtg
|
| Прокси работал, но перестал | Процесс упал и не перезапустился | Настройте systemd (см. раздел выше) |
| Работает с сервера, не работает из РФ | ТСПУ заблокировал IP или протокол | Смените порт на 443; если не помогает — нужна дополнительная обфускация |
Проверка из командной строки
# Проверить что процесс запущен
ps aux | grep mtg
# Проверить что порт слушается
ss -tlnp | grep 8443
# Посмотреть логи
journalctl -u mtg --no-pager -n 50
Продвинутые настройки
Полный конфиг с пояснениями
# Режим отладки (true = подробные логи, false = тишина)
# Включайте только при диагностике!
debug = false
# Ваш секрет (FakeTLS)
secret = "ваш_секрет"
# Адрес:порт для прослушивания
bind-to = "0.0.0.0:8443"
# Максимум одновременных подключений
concurrency = 8192
# Предпочтение IPv4/IPv6 для связи с Telegram
# Варианты: "prefer-ipv4", "prefer-ipv6", "only-ipv4", "only-ipv6"
prefer-ip = "prefer-ipv4"
# Допуск расхождения времени (для FakeTLS проверки)
tolerate-time-skewness = "5s"
# DNS-резолвер (DNS-over-HTTPS через Cloudflare)
[network]
dns = "https://1.1.1.1"
# Таймауты
[network.timeout]
tcp = "5s"
http = "10s"
idle = "1m"
# Защита от replay-атак
[defense.anti-replay]
enabled = true
max-size = "1mib"
error-rate = 0.001
# Блокировка подозрительных IP (ботнеты, сканеры)
[defense.blocklist]
enabled = true
download-concurrency = 2
urls = [
"https://iplists.firehol.org/files/firehol_level1.netset",
]
update-each = "24h"
Запуск через Docker (альтернативный способ)
Если предпочитаете Docker:
docker run -d \
--name mtg \
--restart always \
-p 8443:3128 \
nineseconds/mtg:2 \
run /config.toml
📝 Краткая шпаргалка (всё в одном)
# 1. Скачать и установить
curl -sL https://github.com/9seconds/mtg/releases/download/v2.2.4/mtg-2.2.4-linux-amd64.tar.gz -o /tmp/mtg.tar.gz
tar -xzf /tmp/mtg.tar.gz -C /tmp/
mv /tmp/mtg-2.2.4-linux-amd64/mtg /usr/local/bin/mtg
chmod +x /usr/local/bin/mtg
# 2. Сгенерировать секрет
mtg generate-secret --hex google.com
# Сохраните вывод!
# 3. Создать конфиг (замените SECRET на ваш секрет)
cat > /etc/mtg.toml << EOF
secret = "ВАШ_СЕКРЕТ"
bind-to = "0.0.0.0:8443"
[defense.anti-replay]
enabled = true
max-size = "1mib"
error-rate = 0.001
EOF
# 4. Создать systemd-сервис
cat > /etc/systemd/system/mtg.service << 'EOF'
[Unit]
Description=MTProto Proxy (mtg)
After=network.target
[Service]
ExecStart=/usr/local/bin/mtg run /etc/mtg.toml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 5. Запустить
systemctl daemon-reload
systemctl enable --now mtg
# 6. Открыть порт
ufw allow 8443/tcp
# 7. Проверить
systemctl status mtg
# 8. Ссылка для клиентов:
# tg://proxy?server=IP_СЕРВЕРА&port=8443&secret=ВАШ_СЕКРЕТ