НейроАгент

VLESS+REALITY: решение проблем с звонками в Telegram

Полное руководство по устранению зависания звонков в Telegram при использовании VLESS+REALITY. Узнайте как настроить UDP поддержку и решить проблемы с NAT traversal.

Вопрос

Не работают звонки в Telegram при использовании VLESS+REALITY: что делать?

У меня есть сервер (провайдер aeza) с панелью 3X-UI (VLESS, XTLS Vision, REALITY). В целом всё работает нормально: трафик загружается, блокировки обходятся, но последние пару дней возникли проблемы с звонками в Telegram. Звонки зависают на стадии “Соединение…” и не проходят дальше.

Важная деталь: проблема возникает только когда оба устройства (телефоны/планшеты) подключены к моему VPN-серверу. Если звонить на компьютер, который также подключен к моему VPN, звонок проходит успешно. Если же один телефон подключить к другому VPN (в моем случае PaperVPN), то звонок тоже работает нормально.

Я уже пробовал следующие решения:

  1. Настроить SOCKS-прокси
  2. Изменить Transmission с TCP(RAW) на WebSocket и другие варианты
  3. Включить Sniffing
  4. Поменять Flow с xtls-rprx-vision на xtls-rprx-vision-udp443
  5. Изменить SNI на разные варианты, включая те, которые должны быть доступны при белых списках
  6. Включить Force TCP в настройках Telegram

Ни одно из этих действий не помогло решить проблему. Если кто-то сталкивался с подобной ситуацией, буду благодарен за советы по устранению этой неполадки.

НейроАгент

Проблема с зависанием звонков в Telegram при использовании VLESS+REALITY, особенно когда оба устройства подключены к одному VPN-серверу, является известной технической сложностью, связанной с обработкой UDP-трафика и NAT-треверса. Это происходит потому, что Telegram использует UDP для голосовых и видеозвонков, а стандартная конфигурация VLESS+REALITY с XTLS Vision оптимизирована преимущественно для TCP-трафика.

Содержание

Причины проблемы

Основная причина заключается в том, что голосовые и видеозвонки в 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 и убедитесь, что:

json
"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:

json
"streamSettings": {
  "network": "grpc",
  "grpcSettings": {
    "serviceName": "grpc"
  }
}

Или для KCP:

json
"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 специально для звонков:

json
"inbounds": [
  {
    "port": 443,
    "protocol": "vless",
    "settings": {
      "clients": [...],
      "decryption": "none"
    },
    "streamSettings": {
      "network": "tcp",
      "security": "tls",
      "tlsSettings": {
        "certificates": [...]
      }
    }
  }
]

Альтернативные решения

1. Использование двойного VPN

Настройте туннель в туннеле - создайте внутри вашего VLESS+REALITY дополнительное VPN-соединение (например, WireGuard или OpenVPN) специально для звонков:

bash
# Пример настройки WireGuard поверх VLESS
wg-quick up /etc/wireguard/phone-wg.conf

2. Раздельные серверы для разных нужд

Используйте один сервер для обычного трафика, а второй - специально для звонков. Это можно настроить через балансировку нагрузки:

nginx
# Пример конфигурации 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 и отслеживайте ошибки:

bash
# Просмотр логов XRay
tail -f /var/log/xray/access.log
tail -f /var/log/xray/error.log

Ищите ошибки вида:

  • failed to dial dest: dial: unknown network
  • connection timeout
  • udp session failed

2. Тестирование UDP

Используйте утилиты для тестирования UDP-соединений:

bash
# Тестирование UDP-соединения между клиентами
nc -u -v [IP_адрес] [порт]

3. Мониторинг трафика

Используйте tcpdump для анализа трафика:

bash
tcpdump -i any -n 'port 443 or port 8080' -vvv

Заключение

Проблема с зависанием звонков в Telegram при VLESS+REALITY имеет техническое решение. Ключевые рекомендации:

  1. Основная проблема: UDP-трафик для звонков обрабатывается иначе, чем обычный TCP-трафик
  2. Наиболее эффективное решение: Создайте отдельный inbound без XTLS Vision или используйте альтернативные протоколы (grpc, kcp)
  3. Временный workaround: Используйте двойное VPN-соединение или разные VPN-серверы для звонков
  4. Долгосрочное решение: Рассмотрите возможность разделения трафика - один сервер для чатов, другой для звонков

Если ни одно из решений не помогает, возможно, стоит рассмотреть альтернативные протоколы, такие как Hysteria2 или TUIC, которые лучше оптимизированы для UDP-трафика и real-time приложений.

Источники

  1. Telegram voice/video calls not working – how to enable UDP for my VLESS inbound?
  2. VLESS + Reality (xtls-rprx-vision) on 3x-UI works in Russia but TLS handshake times out in China
  3. Telegram connection can not be established after VPN connection
  4. 3X-UI Graphics Panel Documentation
  5. Error with XRay Config - Vless+TCP+Reality+XTLS+uTLS
  6. Vless + Reality/TLS keeps timing out every 10-20 minutes