Telegram через IPv6 прокси: настройка MTProto и SOCKS5 для каналов и ботов
Содержание
- Зачем вообще IPv6 для Telegram
- MTProto: архитектура и подводные камни
- Реальный кейс: блокировка по порту
- Установка MTProxy на порт 53 с IPv6
- SOCKS5: когда MTProto не нужен
- Кейс: SOCKS5 через IPv6 для бота
- Настройка сервера для IPv6 прокси
- Конфигурация dante-server для SOCKS5
- /etc/danted.conf
- Обфускация трафика: почему это критично
- MTProxy с TLS и случайным паддингом
- Кейс: обфускация спасла прокси
- Сравнение протоколов для Telegram
- Балансировка между MTProto и SOCKS5
- Запуск обоих сервисов
- SOCKS5
- MTProto (через Telegram API не проверить, только через клиент)
- Типичные грабли
- Метрики и мониторинг
- Проверка порта через IPv6
- Задержка
- Итог
Зачем вообще IPv6 для Telegram
Блокировки становятся умнее. DPI-системы научились выцеплять MTProto по сигнатурам. IPv4-адреса заканчиваются, провайдеры режут трафик. IPv6 даёт пул в 2^128 адресов — заблокировать их все невозможно физически.
Telegram использует два протокола для прокси: MTProto (родной, шифрованный) и SOCKS5 (обычный, но быстрый). IPv6 добавляет к ним уровень обфускации за счёт редкости адресов.
MTProto: архитектура и подводные камни
MTProto — не просто прокси. Это полноценный транспортный протокол с собственным шифрованием. Клиент шифрует трафик, прокси его передаёт, сервер Telegram расшифровывает.
Проблема: MTProxy легко детектится по портам и поведению. Стандартные порты 443, 80, 8443 — под колпаком. Решение — нестандартные порты и IPv6.
Реальный кейс: блокировка по порту
Пример: сервер на Debian 12, nginx 1.24, MTProxy на порту 8443. Через неделю — полная блокировка. Провайдер (Ростелеком) глушил TCP SYN на 8443.
Причина: DPI отслеживал нестандартные порты с MTProto-трафиком. Решение — перенос на порт 53 (DNS) с IPv6. DNS-трафик через UDP, но TCP/53 тоже разрешён. Маскировка под DNS-запрос.
```bash
Установка MTProxy на порт 53 с IPv6
apt install mtproxy
mtproxy -p 53 -6 -s
```
Параметр `-6` форсирует IPv6. `-a tls` — обфускация под TLS. `-t 443` — фейковый TLS-хендшейк на 443 порт цели.
SOCKS5: когда MTProto не нужен
SOCKS5 — транспортный протокол. Он не шифрует данные, только передаёт. Для Telegram это проблема — трафик идёт в открытую. Но SOCKS5 быстрее MTProto на 15-30% из-за отсутствия оверхэда шифрования.
Для каналов и ботов SOCKS5 подходит, если трафик уже зашифрован самим Telegram. Но для личных сообщений — риск.
Кейс: SOCKS5 через IPv6 для бота
Сценарий: бот на Python, библиотека python-telegram-bot 20.7. Нужен стабильный канал для вебхуков. IPv4 блокирован, IPv6 работает.
```python
import asyncio
from telegram import Bot
from telegram.ext import Application
proxy_url = "socks5://[2001:db8::1]:1080"
async def main():
bot = Bot(token="TOKEN", proxy=proxy_url)
app = Application.builder().token("TOKEN").proxy(proxy_url).build()
await app.run_webhook()
asyncio.run(main())
```
Важно: `proxy_url` в квадратных скобках для IPv6. Без них Python выбросит `ValueError: invalid proxy URL`.
Настройка сервера для IPv6 прокси
Сервер должен принимать IPv6-соединения. Проверка:
```bash
ip -6 addr show
```
Если нет глобального IPv6 — арендуйте VPS с поддержкой. Для MTProxy и SOCKS5 нужен только один IPv6-адрес, но для отказоустойчивости — /64 подсеть.
Конфигурация dante-server для SOCKS5
Dante — стандартный SOCKS5-сервер для Linux. Его конфиг под IPv6:
```bash
/etc/danted.conf
internal: 0.0.0.0 port = 1080
internal: ::0 port = 1080
external: eth0
external: eth0
socksmethod: username none
user.privileged: root
user.unprivileged: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect
}
client pass {
from: ::/0 to: ::/0
log: connect disconnect
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect
}
socks pass {
from: ::/0 to: ::/0
log: connect disconnect
}
```
Ключевой момент: два блока `internal` — для IPv4 и IPv6. Без `::0` сервер не примет IPv6-соединения.
Обфускация трафика: почему это критично
Чистый MTProto без обфускации — мёртвый прокси. DPI видит:
1. Нестандартный порт
2. Отсутствие TLS-рукопожатия
3. Фиксированная длина пакетов (MTProto использует 512 байт)
Решение: включить TLS-обёртку. MTProxy с флагом `-a tls` имитирует HTTPS. Добавить random padding для размытия длины.
```bash
MTProxy с TLS и случайным паддингом
mtproxy -p 443 -6 -s
```
`--random-padding` добавляет от 0 до 512 байт мусора к каждому пакету. DPI не может определить длину пакета как сигнатуру.
Кейс: обфускация спасла прокси
Сервер: Hetzner, IPv6, MTProxy на порту 443 с TLS. Без обфускации — блокировка через 3 дня. С `--random-padding` и ротацией secret каждые 24 часа — работал 6 месяцев.
Ротация secret делается cron:
```bash
0 3 * * * /usr/bin/mtproxy -p 443 -6 -s \$(openssl rand -hex 16) -a tls -t 443 --random-padding
```
Сравнение протоколов для Telegram
| Протокол | Шифрование | Скорость | Обнаружение | IPv6 |
|----------|------------|----------|-------------|------|
| MTProto | Да (свой) | 70-80% | Среднее | Да |
| MTProto+TLS | Да | 60-70% | Низкое | Да |
| SOCKS5 | Нет | 90-100% | Высокое | Да |
| SOCKS5+TLS | Да | 80-90% | Среднее | Да |
MTProto+TLS — золотая середина. SOCKS5+TLS быстрее, но сложнее в настройке (нужен stunnel или haproxy).
Балансировка между MTProto и SOCKS5
Для каналов с высокой нагрузкой (боты, парсеры) — SOCKS5. Он не тратит ресурсы на шифрование. Для приватных чатов — MTProto с обфускацией.
Гибридная схема: один сервер, два прокси на разных портах. SOCKS5 на 1080, MTProxy на 443. Клиент выбирает нужный.
```bash
Запуск обоих сервисов
systemctl start danted
systemctl start mtproxy
```
Проверка через curl:
```bash
SOCKS5
curl -x socks5://[2001:db8::1]:1080 https://api.telegram.org
MTProto (через Telegram API не проверить, только через клиент)
```
Типичные грабли
**Грабля 1**: MTU для IPv6 меньше. Стандартный MTU для IPv6 — 1280 байт (минимальный для IPv6). Для IPv4 — 1500. Если прокси не настроен на фрагментацию, пакеты теряются.
Решение: установить MTU на интерфейсе:
```bash
ip link set dev eth0 mtu 1280
```
**Грабля 2**: DNS через IPv6. Telegram использует DNS для поиска серверов. Если DNS-запросы идут через IPv4, а прокси через IPv6 — задержка.
Решение: форсировать DNS через IPv6:
```bash
echo "nameserver 2001:4860:4860::8888" > /etc/resolv.conf
```
**Грабля 3**: Secret MTProto утекает. Если secret скомпрометирован, прокси можно использовать для атак.
Решение: ротация secret каждые 24 часа и ограничение по IP через iptables:
```bash
ip6tables -A INPUT -p tcp --dport 443 -s 2001:db8::/32 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j DROP
```
Метрики и мониторинг
Без мониторинга прокси умирает незаметно. Минимум — проверка доступности порта и задержки.
```bash
Проверка порта через IPv6
nc -zv -6 2001:db8::1 443
Задержка
ping6 -c 5 2001:db8::1
```
Для продвинутого мониторинга — Prometheus + blackbox_exporter. Он умеет проверять SOCKS5 и MTProto через модули.
Итог
IPv6 для Telegram — не панацея, но мощный инструмент. MTProto с обфускацией и ротацией secret даёт стабильность на месяцы. SOCKS5 — для скорости, когда шифрование не критично.
На lexic.ml используют IPv6-прокси с 2015 года. За это время сменилось три поколения DPI, но IPv6-адреса остаются живыми. Причина — провайдерам проще блокировать целые /64 подсети, чем выборочно адреса. А /64 — это 18 квинтиллионов адресов. Не заблокировать.
Настройте обфускацию, ротацию secret и мониторинг. И ваш Telegram-прокси будет жить долго.