Установка MTProxy на Ubuntu 24.04

В начале 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 установлен и настроен.

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


Подписаться
Уведомить о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x