Установка MTProto Proxy (mtg) на Linux-сервере: различия между версиями

Материал из wolfram
Перейти к навигации Перейти к поиску
Новая страница: « = 📡 Установка MTProto Proxy (mtg) на Linux-сервере = Полная пошаговая инструкция для новичков. Проверено на '''Ubuntu/Debian''' с <code>mtg v2.2.4</code>. ---- ---- == Что это и зачем == '''mtg''' — это легковесный MTProto-прокси для Telegram. Его задача — дать пользователям доступ к Telegram, встраивая пр...»
 
Строка 3: Строка 3:
Полная пошаговая инструкция для новичков. Проверено на '''Ubuntu/Debian''' с <code>mtg v2.2.4</code>.
Полная пошаговая инструкция для новичков. Проверено на '''Ubuntu/Debian''' с <code>mtg v2.2.4</code>.
----
----
----
== Что это и зачем ==
== Что это и зачем ==
'''mtg''' — это легковесный MTProto-прокси для Telegram. Его задача — дать пользователям доступ к Telegram, встраивая прокси прямо в настройки приложения (без необходимости запускать VPN).
'''mtg''' — это легковесный MTProto-прокси для Telegram. Его задача — дать пользователям доступ к Telegram, встраивая прокси прямо в настройки приложения (без необходимости запускать VPN).

Версия от 16:35, 26 марта 2026

📡 Установка 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 = "ee1234567890abcdef1234567890abcdef676f6f676c652e636f6d"

# Адрес и порт для прослушивания
# 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=ВАШ_СЕКРЕТ

ℹ️ Проект: https://github.com/9seconds/mtg

Версия: v2.2.4 (март 2026)

Лицензия: MIT