В начале 2022 гола я уже писал статью как установить официальный MTProxy, но с тех пор утекло много воды, сам официальный MTProxy перестал развиваться и появилось несколько альтернатив.
В этой статья я расскажу как быстро установить один из вариантов MTProxy — это MTG.
Обратите внимание, что использование MTProxy может нарушать локальное законодательство Вашей страны. Рекомендую уточнить данный момент до начала выполнения установки. Операции, описанные в данной статье, выполнялись на тестовом стенде, который был удален по окончании написания статьи.
Исходные данные: Ubuntu 24.04
Задача: Установить и настроить MTG
MTG — это opensource реализация MTProto Proxy для Telegram с минимальными настройками и быстрым стартом, написан на Go lang, исходный код размещен на Github.
Есть 2 версии MTG — v1 и v2
Актуальной является версия v2 в которой убрана поддержка adtag и тем самым запуск стал гораздо проще т.к. нет необходимости регистрировать прокси у бота @MTProxybot
Есть 3 варианта запуска MTG:
1. Запуск через docker
2. Запуск через systemd в качестве службы
3. Сборка из исходников и запуск по схеме 1 или 2
Мы рассмотрим 2-й вариант запуска как стандартной службы через systemd
1. Установить необходимые вспомогательные пакеты:
apt-get install -y curl wget jq tar
2. Скачиваем готовый архив с последней версией MTG под нужную архитектуру:
Приведенный ниже код на bash выполнит определение типа и архитектуры вашей ОС, проверит какая версия MTG актуальна и скачает именно последнюю версию без необходимости ввода номера руками.
Но если Вы хотите скачать конкретную версию MTG, то Вам нужно сходить на страницу Releases на Github и сделать это вручную.
Автоматически делаем так:
case "$(uname -m)" in
x86_64 | x64 | amd64) ARCH="amd64" ;;
i*86 | x86) ARCH="386" ;;
armv8* | armv8 | arm64 | aarch64) ARCH="arm64" ;;
armv7* | armv7 | arm) ARCH="armv7" ;;
armv6* | armv6) ARCH="armv6" ;;
mips*) ARCH="mips" ;;
*) echo "Unsupported CPU architecture!" && exit 1;;
esac && \
LATEST_VER=$(curl -Ls "https://api.github.com/repos/9seconds/mtg/releases/latest" 2>/dev/null | jq -r .tag_name | sed 's/[^0-9.]//g') && \
OS_NAME=$(uname -s | tr '[:upper:]' '[:lower:]') && \
wget https://github.com/9seconds/mtg/releases/download/v${LATEST_VER}/mtg-${LATEST_VER}-${OS_NAME}-${ARCH}.tar.gz -O mtg.tar.gz && \
tar -vzxf mtg.tar.gz && \
yes | cp mtg-${LATEST_VER}-${OS_NAME}-${ARCH}/mtg /usr/sbin/mtg && \
rm -f mtg.tar.gz
3. Создаем отдельного пользователя для работы MTG:
addgroup --system --quiet mtg adduser --quiet --system --disabled-login --ingroup mtg --home /var/lib/mtg --no-create-home mtg
4. Создаем вспомогательные каталоги для хранения файлов конфигурации, выставим владельцев и права на эти файлы, чтобы другие пользователи не смогли их читать и копируем файл с примером конфигурации example.config.toml
mkdir /var/lib/mtg /etc/mtg
chown -R mtg:mtg /var/lib/mtg /etc/mtg
chmod 750 /var/lib/mtg /etc/mtg
cp mtg-${LATEST_VER}-${OS_NAME}-${ARCH}/example.config.toml /etc/mtg/config.toml
chmod 640 /etc/mtg/config.toml
rm -rf mtg-${LATEST_VER}-${OS_NAME}-${ARCH}
5. Создадим секретный ключ для Fake-TLS в формате hex и запишем его в файл конфигурации:
Этот же ключ потребуется нам для подключения к нашему прокси из Телеграм на последнем шаге, поэтому мы поместим ключ в переменную и потом используем ее еще раз.
Сайт google.com замените на свой в зависимости от потребностей.
Порт для прокси мы изменим с 3128 на 8443 (можете сделать свой порт)
TG_SECRET=$(mtg generate-secret --hex google.com)
sed -i "s@ee367a189aee18fa31c190054efd4a8e9573746f726167652e676f6f676c65617069732e636f6d@${TG_SECRET}@g" /etc/mtg/config.toml
sed -i "s/0.0.0.0:3128/0.0.0.0:8443/s" /etc/mtg/config.toml
6. Создадим файл конфигурации для systemd для управления работой MTG
Сразу хочу заметить, что файл сделан более гибким, все настройки запуска MTG вынесены в переменную OPTIONS которая будет записана в файл /etc/default/mtg
Таким образом мы сможем легко менять настройки MTG не вмешиваясь в файл конфигурации для systemd.
Так же служба mtg запускается от непривилегированного пользователя mtg
(cat<<-EOF [Unit] Description=mtg - MTProto proxy server Documentation=https://github.com/9seconds/mtg After=network.target [Service] Type=simple User=mtg Group=mtg EnvironmentFile=-/etc/default/mtg WorkingDirectory=/var/lib/mtg ExecStart=/usr/sbin/mtg run \$OPTIONS Restart=on-failure RestartSec=3 LimitNOFILE=65536 AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target EOF )>/etc/systemd/system/mtg.service
Далее скажем systemd перечитать свою конфигурацию:
systemctl daemon-reload
7. Создадим файл /etc/default/mtg в котором будут прописаны настройки запуска MTG:
(cat<<-EOF OPTIONS='/etc/mtg/config.toml' EOF )>/etc/default/mtg chmod 640 /etc/default/mtg
8. Запуск MTG:
systemctl enable mtg.service --now
9. Проверим работу MTG:
systemctl status mtg.service
Служба должна работать:
● mtg.service - mtg - MTProto proxy server
Loaded: loaded (/etc/systemd/system/mtg.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-03-20 14:31:05 CET; 2min 39s ago
Docs: https://github.com/9seconds/mtg
Main PID: 993292 (mtg)
Tasks: 8 (limit: 4498)
Memory: 9.1M (peak: 9.4M)
CPU: 280ms
CGroup: /system.slice/mtg.service
└─993292 /usr/sbin/mtg run /etc/mtg/config.toml
Mar 20 14:31:05 myserver.local systemd[1]: Started mtg.service - mtg - MTProto proxy server.
Mar 20 14:31:05 myserver.local mtg[993292]: {"level":"debug","configuration":{"debug":true,"allowFallbackOnUnknownDc":false,"secret":"XXXXXXXXXXXXXXXXXXXXX","bindTo":"0.0.0.0:8443","proxyProtocolListener":false,"preferIp":"prefer-ipv4","autoUpdate":false,"do>
Mar 20 14:31:05 myserver.local mtg[993292]: ,"logger":"","timestamp":1774013465079,"message":"configuration"}
Mar 20 14:31:05 myserver.local mtg[993292]: {"level":"info","logger":"allowlist.ipblocklist.firehol","timestamp":1774013465081,"message":"ip list was updated"}
Mar 20 14:31:05 myserver.local mtg[993292]: {"level":"info","logger":"blocklist.ipblockist.firehol","timestamp":1774013465176,"message":"ip list was updated"}
Проверим открытые порты и наличие процесса:
# netstat -ltupn | grep [m]tg tcp 0 0 127.0.0.1:3129 0.0.0.0:* LISTEN 993292/mtg tcp6 0 0 :::8443 :::* LISTEN 993292/mtg # ps -ef | grep [m]tg mtg 993292 1 0 14:31 ? 00:00:00 /usr/sbin/mtg run /etc/mtg/config.toml
10. Теперь настало время подключиться к MTProxy в Вашем Телеграм-клиенте:
Для получения готовых ссылок на подключение можно воспользоваться встроенной командой, но к сожалению она выдает некорректные ссылки в случае использования Fake-TLS.
Команда выглядит так:
mtg access /etc/mtg/config.toml
Правильная ссылка в случае Fake-TLS будет создана корректно такой командой:
MTG_CONF=$(mtg access /etc/mtg/config.toml 2>/dev/null) && echo "tg://proxy?server=$(echo -n ${MTG_CONF} | jq -r .ipv4.ip)&port=$(echo -n ${MTG_CONF} | jq -r .ipv4.port)&&secret=$(echo -n ${MTG_CONF} | jq -r .secret.hex)"
На выходе Вы получите что-то вроде:
tg://proxy?server=XX.XX.XX.XX&port=8443&&secret=eeYYYYYYYYYYYYYYYYYYYYYY
Перейдя в Телеграм по этой ссылке Вам будет предложено подключиться к прокси.
11. Сбор и просмотр статистики работы:
По умолчанию MTG предоставляет вывод статистики в формате Prometheus на 127.0.0.1:3129
За настройку статистики отвечает секция [stats.prometheus] в файле конфигурации /etc/mtg/config.toml
Вы можете легко проверить статистику так:
curl http://127.0.0.1:3129
На этом все, MTG установлен и настроен.
Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
