Многоуровневый шейпер трафика для Telegram MTProto-прокси на базе telemt.
Отслеживает скорость каждого подключённого IP, и если кто-то начинает выжимать канал — автоматически режет ему скорость. Если клиент продолжает упираться в лимит — лимит ужесточается. Когда трафик утихает — шейп снимается.
MTProto-прокси любят использовать как «бесплатный VPN» — качать фильмы, сериалы, музыку прямо в Telegram. Один такой клиент может выжать всю полосу сервера и положить опыт остальным. telemt-shaper ловит таких и аккуратно режет им скорость, не мешая остальным пользователям.
- Многоуровневый шейп. Не «ударил молотком и забыл», а постепенное ужесточение для тех, кто продолжает злоупотреблять. По умолчанию: 40 → 24 → 8 Мбит/с.
- Автоматическое снятие ограничений после периода тишины (по умолчанию 2 минуты).
- Не трогает Telegram. Серверы Telegram добавлены в список исключений из коробки.
- Минимум зависимостей. Только Python 3 и
iproute2. Никаких внешних библиотек. - Безопасно при старте/остановке. Graceful shutdown через SIGTERM, single-instance lock через flock.
- Удобные логи. Цветной вывод в консоль/journald + отдельный файл с историей всех событий шейпа.
curl -fsSL https://raw.githubusercontent.com/lie-must-die/telemt-shaper/main/install.sh | sudo bashУстановщик интерактивный: проверит зависимости, покажет список интерфейсов, создаст конфиг, поставит systemd-службу и запустит её. Подробнее — в docs/install.md.
Если хочется сначала посмотреть что будет выполняться:
curl -fsSL https://raw.githubusercontent.com/lie-must-die/telemt-shaper/main/install.sh -o install.sh
less install.sh
sudo bash install.sh- Linux с ядром 4.19+ (для модуля
sch_cake) - Python 3.8+
iproute2(tc,ss)- systemd
telemt(или другой MTProto-прокси с именем процессаtelemt) — основной случай использования- root — нужен для управления
tcи чтенияbytes_sent/receivedиз всех сокетов
Протестировано на Ubuntu 22.04, 24.04 и Debian 12.
Кратко: каждые 5 секунд скрипт парсит вывод ss -tnip, считает скорость каждого IP по дельтам bytes_sent/received отдельных сокетов. Если IP стабильно превышает порог — создаём для него отдельный HTB-класс с cake qdisc и навешиваем фильтр по dst-адресу.
Подробное описание архитектуры, потоков данных и принятия решений — в docs/how-it-works.md.
Все настройки в /opt/telemt-shaper/config.py. Дефолты:
IFACE = "eth0" # подставляется автоматически при установке
SHAPE_LEVELS = [
{"threshold_mbps": 60, "limit_mbps": 40, "exceed_ticks": 2}, # L0
{"threshold_mbps": 36, "limit_mbps": 24, "exceed_ticks": 4}, # L1
{"threshold_mbps": 20, "limit_mbps": 8, "exceed_ticks": 4}, # L2
]
CALM_RATIO = 0.5
COOLDOWN_SECS = 120Полное описание всех параметров — в docs/configuration.md.
После изменений:
sudo systemctl restart telemt-shaper# Вывод службы (всё что в консоль)
journalctl -u telemt-shaper -f
# История событий шейпа (ВСПЛЕСК / ШЕЙП / ЖМЁТ / АПГРЕЙД / УСПОКОИЛСЯ / СНЯТ)
tail -f /var/log/telemt-shaper.log
# Текущие активные шейпы
tc class show dev eth0 | grep -v '1:10'
tc filter show dev eth0Пример события из лога:
2026-04-16 00:59:29 ШЕЙП 158.160.188.132 L0: 40 Mbit
2026-04-16 01:00:05 АПГРЕЙД 158.160.188.132 L0 → L1: 24 Mbit
2026-04-16 01:00:26 АПГРЕЙД 158.160.188.132 L1 → L2: 8 Mbit
2026-04-16 01:00:57 УСПОКОИЛСЯ 158.160.188.132 0.0 Mbit L2
2026-04-16 01:04:01 СНЯТ 158.160.188.132
Просто запустите установщик ещё раз — он сам остановит службу, обновит файлы, спросит про конфиг (рекомендуется оставить старый) и перезапустит:
curl -fsSL https://raw.githubusercontent.com/lie-must-die/telemt-shaper/main/install.sh | sudo bashsudo bash /opt/telemt-shaper/uninstall.shИли скачать отдельно:
curl -fsSL https://raw.githubusercontent.com/lie-must-die/telemt-shaper/main/uninstall.sh | sudo bash- Как это работает — архитектура, потоки данных, как принимаются решения о шейпе
- Конфигурация — детальное описание всех параметров
- Troubleshooting — частые проблемы и их решения
Багрепорты и предложения — в GitHub Issues.