Не работают звонки в Telegram при использовании VLESS+REALITY: что делать?
У меня есть сервер (провайдер aeza) с панелью 3X-UI (VLESS, XTLS Vision, REALITY). В целом всё работает нормально: трафик загружается, блокировки обходятся, но последние пару дней возникли проблемы с звонками в Telegram. Звонки зависают на стадии “Соединение…” и не проходят дальше.
Важная деталь: проблема возникает только когда оба устройства (телефоны/планшеты) подключены к моему VPN-серверу. Если звонить на компьютер, который также подключен к моему VPN, звонок проходит успешно. Если же один телефон подключить к другому VPN (в моем случае PaperVPN), то звонок тоже работает нормально.
Я уже пробовал следующие решения:
- Настроить SOCKS-прокси
- Изменить Transmission с TCP(RAW) на WebSocket и другие варианты
- Включить Sniffing
- Поменять Flow с xtls-rprx-vision на xtls-rprx-vision-udp443
- Изменить SNI на разные варианты, включая те, которые должны быть доступны при белых списках
- Включить Force TCP в настройках Telegram
Ни одно из этих действий не помогло решить проблему. Если кто-то сталкивался с подобной ситуацией, буду благодарен за советы по устранению этой неполадки.
Проблема с зависанием звонков в Telegram при использовании VLESS+REALITY, особенно когда оба устройства подключены к одному VPN-серверу, является известной технической сложностью, связанной с обработкой UDP-трафика и NAT-треверса. Это происходит потому, что Telegram использует UDP для голосовых и видеозвонков, а стандартная конфигурация VLESS+REALITY с XTLS Vision оптимизирована преимущественно для TCP-трафика.
Содержание
- Причины проблемы
- Настройка 3X-UI для поддержки UDP
- Альтернативные решения
- Дополнительные настройки клиента
- Диагностика и мониторинг
- Заключение
Причины проблемы
Основная причина заключается в том, что голосовые и видеозвонки в Telegram используют UDP-протокол, в то время как стандартная конфигурация VLESS+REALITY с XTLS Vision отлично справляется с TCP-трафиком (чатами, файлами), но имеет ограничения при работе с UDP.
Как указано в отчете об ошибке на GitHub, проблема проявляется именно при попытках установления UDP-соединений между клиентами, подключенными к одному и тому же VPN-серверу. Это связано с:
- Ограниченной поддержкой UDP в некоторых конфигурациях XTLS
- Проблемами с NAT-треверса при одинаковых исходных IP-адресах
- Блокировкой UDP-трафика на сетевом уровне в некоторых настройках
Ваше наблюдение, что звонки работают при подключении к другому VPN (PaperVPN) или на компьютере, подтверждает, что проблема специфична именно для вашей VLESS+REALITY конфигурации.
Настройка 3X-UI для поддержки UDP
1. Включение UDP-поддержки в inbound
В панели 3X-UI перейдите в раздел настройки вашего VLESS+REALITY inbound и убедитесь, что:
"streamSettings": {
"network": "tcp",
"tcpSettings": {
"header": {
"type": "none"
}
},
"sockopt": {
"mark": 255,
"tcpMptcp": false,
"tcpNoDelay": true,
"tcpKeepAliveIdle": 300,
"tcpKeepAliveInterval": 60,
"tcpFastOpen": true,
"tproxy": "off"
}
}
Важно: Добавьте параметр "tcpFastOpen": true для улучшения производительности TCP-соединений.
2. Настройка транспортного слоя
Попробуйте изменить транспортный слой на grpc или kcp вместо чистого TCP:
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "grpc"
}
}
Или для KCP:
"streamSettings": {
"network": "kcp",
"kcpSettings": {
"mtu": 1350,
"tti": 50,
"uplinkCapacity": 12,
"downlinkCapacity": 100,
"congestion": false,
"readBufferSize": 2,
"writeBufferSize": 2,
"header": {
"type": "none"
},
"seed": "password"
}
}
3. Отключение XTLS Vision для звонков
Создайте отдельный inbound без XTLS Vision специально для звонков:
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [...],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"certificates": [...]
}
}
}
]
Альтернативные решения
1. Использование двойного VPN
Настройте туннель в туннеле - создайте внутри вашего VLESS+REALITY дополнительное VPN-соединение (например, WireGuard или OpenVPN) специально для звонков:
# Пример настройки WireGuard поверх VLESS
wg-quick up /etc/wireguard/phone-wg.conf
2. Раздельные серверы для разных нужд
Используйте один сервер для обычного трафика, а второй - специально для звонков. Это можно настроить через балансировку нагрузки:
# Пример конфигурации Nginx как reverse proxy
server {
listen 443 ssl;
server_name your-domain.com;
location /chat/ {
proxy_pass http://vless-server:80;
}
location /calls/ {
proxy_pass http://calls-server:80;
}
}
3. Использование STUN/TURN серверов
Настройте Telegram для использования внешних STUN/TURN серверов для обхода NAT:
- Google STUN:
stun:stun.l.google.com:19302 - Microsoft STUN:
stun:stun1.l.google.com:19302
В настройках Telegram (доступно через Telegram Desktop) можно указать кастомные STUN серверы.
Дополнительные настройки клиента
1. Принудительный режим работы
В настройках Telegram Desktop включите:
- Force TCP: принудительное использование TCP-протокола
- Disable VoIP: временно отключите звонки для перезапуска соединения
2. Настройки клиента VLESS
Для мобильных клиентов (v2box, nekobox) попробуйте:
- Изменить режим работы с
xtls-rprx-visionнаwsилиgrpc - Включить опцию
"mux": {"enabled": false}для отключения мультиплексирования - Установить таймауты:
"dialerProxy": {"dialerTimeout": "30s"}
3. Оптимизация сети
В настройках сети операционной системы:
- Увеличьте размер буфера UDP
- Отключите энергосбережение для сетевых интерфейсов
- Настройте QoS для приоритизации голосового трафика
Диагностика и мониторинг
1. Логирование ошибок
Включите детальное логирование в 3X-UI и отслеживайте ошибки:
# Просмотр логов XRay
tail -f /var/log/xray/access.log
tail -f /var/log/xray/error.log
Ищите ошибки вида:
failed to dial dest: dial: unknown networkconnection timeoutudp session failed
2. Тестирование UDP
Используйте утилиты для тестирования UDP-соединений:
# Тестирование UDP-соединения между клиентами
nc -u -v [IP_адрес] [порт]
3. Мониторинг трафика
Используйте tcpdump для анализа трафика:
tcpdump -i any -n 'port 443 or port 8080' -vvv
Заключение
Проблема с зависанием звонков в Telegram при VLESS+REALITY имеет техническое решение. Ключевые рекомендации:
- Основная проблема: UDP-трафик для звонков обрабатывается иначе, чем обычный TCP-трафик
- Наиболее эффективное решение: Создайте отдельный inbound без XTLS Vision или используйте альтернативные протоколы (grpc, kcp)
- Временный workaround: Используйте двойное VPN-соединение или разные VPN-серверы для звонков
- Долгосрочное решение: Рассмотрите возможность разделения трафика - один сервер для чатов, другой для звонков
Если ни одно из решений не помогает, возможно, стоит рассмотреть альтернативные протоколы, такие как Hysteria2 или TUIC, которые лучше оптимизированы для UDP-трафика и real-time приложений.
Источники
- Telegram voice/video calls not working – how to enable UDP for my VLESS inbound?
- VLESS + Reality (xtls-rprx-vision) on 3x-UI works in Russia but TLS handshake times out in China
- Telegram connection can not be established after VPN connection
- 3X-UI Graphics Panel Documentation
- Error with XRay Config - Vless+TCP+Reality+XTLS+uTLS
- Vless + Reality/TLS keeps timing out every 10-20 minutes