Telegram calls not working with VLESS+REALITY VPN: how to solve the problem?
I have a server (aeza provider) with a 3X-UI panel configured with VLESS, XTLS Vision, and REALITY protocols. Overall, the VPN works stably: it bypasses blocks and provides normal internet connection. However, for the past few days, there has been a problem with voice calls in Telegram - they hang at the “Connecting…” stage and don’t establish.
The key point: the problem only occurs under the following conditions:
- Both devices (phones or tablets) are connected to my VPN server
- Calls between two mobile devices don’t go through
At the same time:
- Calls from a mobile device to a computer (connected to the same VPN) work normally
- Calls go through if one of the devices uses a different VPN (for example, PaperVPN)
I have already taken the following steps to solve the problem:
- Configured SOCKS proxy
- Changed transport mode from TCP(RAW) to WebSocket and other available options
- Enabled the Sniffing function
- Changed Flow from xtls-rprx-vision to xtls-rprx-vision-udp443
- Tried various SNI options, including those that should work with whitelists
- Forced TCP usage in Telegram settings
None of these solutions helped. If anyone has encountered a similar problem, please share your experience solving it.
VLESS+REALITY VPN default configurations often don’t properly handle UDP traffic, which causes issues with voice calls in Telegram since they use UDP for data transmission. This problem occurs when both devices are connected to the same VPN server, because traffic between clients doesn’t go through proper routes and tries to connect directly via UDP.
Table of Contents
- Main Causes of the Problem
- Solution Through Routing Settings in 3X-UI
- Alternative Methods to Fix the Issue
- Verification and Testing
- Additional Recommendations
Main Causes of the Problem
The problem with voice calls in Telegram when using VLESS+REALITY VPN occurs because:
-
UDP traffic is not properly routed: As noted in GitHub issue #3283, Telegram voice and video calls use UDP under the hood, and standard VLESS/Reality configuration doesn’t always properly handle this traffic between clients.
-
Direct connection between clients: When both devices are connected to the same VPN server, Telegram tries to establish a direct UDP connection between them, bypassing the server. This causes hanging at the “Connecting…” stage.
-
Lack of proper routing rules: Without special rules, traffic between clients may go through the standard internet rather than through the secure VPN channel.
Interestingly, calls from mobile to computer work because desktop Telegram clients can use alternative communication methods such as TCP tunneling or WebRTC through TURN servers.
Solution Through Routing Settings in 3X-UI
You need to configure proper routing rules in the 3X-UI panel:
1. Outbound Configuration
Go to Xray Configuration → Outbounds and ensure you have the correct settings:
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "your-server-ip",
"port": 443,
"users": [
{
"id": "your-uuid",
"encryption": "none",
"flow": "xtls-rprx-vision"
}
]
}
]
}
}
2. Routing Rules
This is the key point. In the Xray Configuration → Routing Rules section, add the following rules:
{
"type": "field",
"outboundTag": "proxy",
"inboundTag": ["vless"],
"network": ["udp"],
"domain": ["domain:telegram.org", "domain:tdesktop.com"]
}
Also add a rule to force TCP usage for all Telegram traffic:
{
"type": "field",
"outboundTag": "proxy",
"inboundTag": ["vless"],
"network": ["tcp"],
"domain": ["domain:telegram.org", "domain:tdesktop.com"]
}
3. Enabling UDP Support
In your VLESS inbound settings, ensure UDP is enabled:
- Go to Inbounds → your VLESS inbound
- In the Stream section, ensure
sockoptincludes UDP:
{
"sockopt": {
"mark": 255,
"tcpFastOpen": true,
"udp": true
}
}
Alternative Methods to Fix the Issue
1. Using Proxy for UDP Traffic
If standard routes don’t work, try configuring a SOCKS5 proxy specifically for UDP:
- In 3X-UI, create a separate SOCKS5 inbound
- Configure it to work with UDP:
{
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true,
"ip": "127.0.0.1"
}
}
- In Telegram, configure SOCKS5 proxy for calls
2. Changing VLESS Operation Mode
Try using xtls-rprx-vision mode instead of xtls-rprx-vision-udp443, but with additional settings:
{
"flow": "xtls-rprx-vision",
"settings": {
"vnext": [
{
"address": "your-server-ip",
"port": 443,
"users": [
{
"id": "your-uuid",
"encryption": "none",
"flow": "xtls-rprx-vision"
}
]
}
]
}
}
3. Using WireGuard as an Additional Layer
Add WireGuard on top of your VLESS+REALITY connection for better UDP handling:
# WireGuard configuration example for UDP traffic
[Interface]
PrivateKey = your-private-key
Address = 10.0.0.2/24
DNS = 1.1.1.1, 8.8.8.8
[Peer]
PublicKey = server-public-key
Endpoint = your-server-ip:51820
AllowedIPs = 0.0.0.0/0
Verification and Testing
After making changes, perform the following checks:
1. UDP Connection Verification
Use ping or mtr to check UDP connectivity between devices:
# UDP availability check
nc -u -z -w2 your-server-ip 443
# Routing check
mtr --udp --tcp your-server-ip
2. Call Testing
- Restart Telegram on both devices
- Try making a call between two mobile devices
- If the problem persists, check server logs for UDP errors
3. Traffic Analysis
Use tcpdump to analyze UDP traffic:
tcpdump -i any -n udp port 443 or udp port 80 or udp port 5228
Additional Recommendations
1. Updating 3X-UI and X-Ray
Ensure you have the latest version of 3X-UI and X-Ray core:
# Update 3X-UI
bash <(curl -Ls https://github.com/MHSanaei/3x-ui/raw/main/install.sh)
2. Alternative Protocols
If the issue isn’t resolved, consider alternative protocols:
- VMESS+REALITY: may handle UDP traffic better
- Shadowsocks: works great with UDP
- Trojan+REALITY: natively supports UDP
3. Professional VPN Services
As a temporary solution, you can use PaperVPN or similar services for calls, while directing main traffic through your VLESS+REALITY VPN.
Sources
- GitHub issue #3283: Telegram voice/video calls not working – how to enable UDP for my VLESS inbound?
- FASTVPS documentation: 3X-UI configuration
- SpaceCore WIKI: Installing 3X UI
- Hostkey documentation: 3X-UI Graphics Panel
- Reddit: VLESS Reality configuration issues
Conclusion
The problem with voice calls in Telegram when using VLESS+REALITY VPN is common and is related to improper handling of UDP traffic between clients. The main solutions include:
- Configuring proper routing rules to force all Telegram traffic (including UDP) to go through the VPN server
- Enabling UDP support in VLESS inbound settings
- Using alternative protocols or proxies for UDP traffic
- Updating software to the latest versions
The most effective solution is usually configuring proper routing rules that force all Telegram traffic (including UDP) to pass through the VPN server rather than trying to establish direct connections between clients. If the issue isn’t resolved, consider using alternative VPN protocols or professional services for voice calls.