Как поднять собственный proxy для Telegram | telemt?

Введение
С февраля 2026 года пользователи Telegram в РФ столкнулись с блокировкой и замедлением работы сервиса, в статье описана инструкция по запуску собственного прокси на базе инструмента telemt. Использование прокси позволяет стабилизировать работу телеграм.
Решение: поднимаем собственный прокси (telemt) для Telegram
Инструкция для MTProxy: https://artydev.ru/posts/selfhosted-tg-proxy/
За основу будем использовать прокси telemt.
Все описанная ниже информация основана на открытой документации telemt:
Арендуем сервер, можно в РФ, можно вне РФ с Ubuntu 24, далее список команд:
✅ Список рекомендуемых хостеров
Установка необходимых утилит:
sudo apt-get update -y; \
sudo apt install fail2ban vnstat git curl build-essential libssl-dev zlib1g-dev net-tools neovim nload -y
Скачиваем бинарник:
wget -qO- "https://github.com/telemt/telemt/releases/latest/download/telemt-$(uname -m)-linux-$(ldd --version 2>&1 | grep -iq musl && echo musl || echo gnu).tar.gz" | tar -xz
Перемещаем в директорию /bin
mv telemt /bin
Делаем файл исполняемым
chmod +x /bin/telemt
Генерируем значение secret (для файла /etc/telemt/telemt.toml)
openssl rand -hex 16
Создаем директорию /etc/telemt
mkdir /etc/telemt
Создаем файл конфигурации /etc/telemt/telemt.toml:
cat > /etc/telemt/telemt.toml <<EOF
[general]
ad_tag = "ваш_ad_tag_из_бота" <<< нужно заменить
use_middle_proxy = true
[general.modes]
classic = false
secure = false
tls = true
[server]
port = 443
max_connections = 0
[server.api]
enabled = true
# listen = "127.0.0.1:9091"
# whitelist = ["127.0.0.1/32"]
# read_only = true
[censorship]
tls_domain = "домен_из_ру_зоны" <<< нужно заменить
[access.users]
hello = "значение_secret_из_команды_выше" <<< нужно заменить
EOF
Далее регистрием наш прокси в
MTProxybot (официальный телеграм бот) и получаем из бота параметр ad_tag.
Порт можно установить на ваше усмотрение, например 443 или 8443.
tls_domain - нужно заменить на адрес, под который вы планируете маскироваться.
- travel.yandex.ru
- ads.x5.ru
- api.perekrestok.ru
- api-maps.yandex.ru
- m.vk.com
- eh.vk.com
- rutube.ru
- max.ru
Можете подобрать домен сами или использовать свой сайт.
Если вы планируете добавлять балансировку и несколько нод - вам нужно вставить дополнительную секцию в файл, значение subdomain.domain.com заменить на своё.
[general.links]
public_host = "subdomain.domain.com" <<< нужно заменить
Далее создаем отдельного пользователя telemt для запуска сервиса.
useradd -d /opt/telemt -m -r -U telemt
chown -R telemt:telemt /etc/telemt
Создадим файл systemd сервиса telemt.service:
cat > /etc/systemd/system/telemt.service <<EOF
[Unit]
Description=Telemt
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=telemt
Group=telemt
WorkingDirectory=/opt/telemt
ExecStart=/bin/telemt /etc/telemt/telemt.toml
Restart=on-failure
LimitNOFILE=1048576
LimitNPROC=65535
TasksMax=infinity
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
Активация и запуск сервиса:
systemctl daemon-reload; \
systemctl enable telemt.service; \
systemctl restart telemt.service; \
sleep 2; \
systemctl status telemt.service
Получить ссылку для подключения:
curl -s http://127.0.0.1:9091/v1/users | jq
Урезанный формат
curl -s http://127.0.0.1:9091/v1/users | jq '.data[] | {current_connections, active_unique_ips, recent_unique_ips, tls: .links.tls}'
Реализация self sni / self steal
Установка reverse proxy server Caddy:
sudo apt install caddy -y
Сделаем простую конфигурацию /etc/caddy/Caddyfile:
<ваш домен>:443 {
root * /var/www/site
try_files {path} /index.html
file_server
log {
output file /var/log/caddy/access.log
}
}
Готовые шаблоны с сайтами заглушками:
https://github.com/Famebloody/SNI-Templates/tree/main
Для примера возьмем один из них, я выбрал downloader
mkdir -p /var/www/fake; \
git clone https://github.com/Famebloody/SNI-Templates.git /var/www/fake; \
chmod -R 775 /var/www/fake
Конфигурация /etc/caddy/Caddyfile:
<ваш домен>:443 {
root * /var/www/fake/downloader
try_files {path} /index.html
file_server
log {
output file /var/log/caddy/access.log
}
}
Перезапуск Caddy
systemctl restart caddy
Соответственно, так как caddy теперь занимает 443 порт, то telemt должен работать на другом порту, например 8443, 7443 или любой другой.
Изменения в файле /etc/telemt/telemt.toml:
[censorship]
tls_domain = "<ваш домен>"
mask = true
mask_port = 443
Перезапуск telemt:
systemctl restart telemt.service
Tuning
При развертывании Telemt под высокой нагрузкой (десятки и сотни тысяч одновременных подключений), стандартные ограничения сетевого стека ОС могут приводить к потерям пакетов, переключениям контекста CPU и отказам в соединениях. В данном руководстве описана настройка ядра Linux, системных лимитов и аппаратной конфигурации для работы в подобных сценариях.
Добавим в файл /etc/sysctl.conf:
fs.file-max = 2097152
fs.nr_open = 2097152
Создадим файл /etc/sysctl.d/99-telemt-highload.conf:
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
# Размеры буферов ядра (по умолчанию и макс)
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Специфичные TCP буферы (min, default, max)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Включение BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
После внесения правок нужно применить изменения командой:
sysctl -p
sysctl -p /etc/sysctl.d/99-telemt-highload.conf
Источник информации: Advanced_settings/HIGH_LOAD.ru.md

Большое спасибо всем за внимание! Если вам интересны подобные рассуждения - подписывайтесь на мой канал artydev & Co.