Happ, v2rayN or NekoBox: Choosing a Client and Fixing Connection Errors
A VLESS Reality configuration is identical across platforms, but the client applications are not. Every operating system has a few options, and picking the wrong one produces confusing errors that users usually blame on the service.
This article does not repeat the installation steps — those are in the setup guide. It covers two things: choosing the right client for your device, and reading failure symptoms to locate the actual cause.
Choosing a client by platform
iPhone and iPad
Happ Proxy Utility is the default choice. Compact interface, subscription link import, and crucially still present on the international App Store. Shadowrocket and Streisand are also good but paid, and periodically pulled from some regions.
Android
Happ has an Android build and is the simplest option if you already know the iOS version. v2rayNG and NekoBox are more capable, exposing every parameter, which helps when you need custom routing.
On Chinese handsets such as Xiaomi, Huawei or Oppo, open battery management and remove restrictions for the VPN app. These ROMs aggressively kill background applications, which drops the connection a few minutes after the screen locks.
Windows
v2rayN is the de facto standard. It runs on the Xray core, supports VLESS Reality fully, and offers a TUN mode that routes the whole system.
Note that Windows Defender and some antivirus products flag v2rayN. The reason is that it creates a virtual network adapter and changes the system proxy, which superficially resembles malware behaviour. Download from the official GitHub repository and add an exclusion.
macOS
V2RayXS or the macOS build of Happ for basic use. FlClash and Clash Verge when you need complex routing rules, for example sending work traffic through the tunnel and everything else direct.
Reading failure symptoms
This is the most useful part. Each failure mode has a fairly distinctive cause, and telling them apart saves hours of trial and error.
| Symptom | Usual cause | Fix |
|---|---|---|
| Import fails, server list stays empty | Link truncated when copied, or expired | Paste the full link again, check the final characters |
| Reports connected but no page loads | Routing mode wrong, or DNS still using a domestic resolver | Switch to TUN or Global mode, set DNS to 1.1.1.1 |
| Connects for a few minutes, then drops repeatedly | Concurrent IP limit exceeded, or the OS killed the background app | Disconnect other devices, remove battery restrictions |
| Slow in the evening, normal next morning | International gateway congestion at peak hour | Nothing to fix client-side; this is an infrastructure characteristic |
| No handshake at all, on any network | Server IP blocked, or wrong port in the config | Contact your provider; the server needs changing |
| Works on Wi-Fi but not on mobile data | MTU differs between the two networks | Lower MTU in the client settings, try 1400 |
The three most common failures
Failure 1 — "Connected" but nothing loads
The most frequent problem, and almost always routing rather than the server. The client built the tunnel, but your browser traffic is not entering it.
- Switch the client to Global or TUN mode instead of Rule mode. Rule mode only routes domains on a list, and the default list is rarely complete.
- Set the DNS inside the client to 1.1.1.1 or 8.8.8.8. If DNS still resolves through a domestic Chinese server, you keep receiving poisoned addresses.
- On Windows, verify the client actually set the system proxy: Settings, Network and Internet, Proxy.
Failure 2 — Dropping every few minutes
If the connection is stable and then cuts out at regular intervals, the first suspect is the concurrent IP limit. Providers cap devices, and Chinese mobile networks rotate public IP addresses frequently, so one device gets counted as several.
Disconnect every other device, keep one, and watch for 30 minutes. If it becomes stable, you have your answer.
The second cause is the operating system suspending the app. On Android, set the app to unrestricted in battery settings. On iOS, enable Background App Refresh.
Failure 3 — Works at home, fails on office or campus Wi-Fi
Corporate and dormitory networks often add their own filtering, independent of the national firewall. Some block every port except 80 and 443; others filter by SNI.
If your configuration uses a non-standard port, ask your provider whether a server is available on port 443. Reality on 443 looks exactly like HTTPS and passes most internal filters.
Verifying the connection really works
Do not rely on the VPN icon in the status bar. It only tells you a tunnel exists, not that traffic is going through it.
- Open ipinfo.io and check the address and location shown. A Chinese location means traffic is not using the tunnel.
- Open a site that is definitely blocked, such as google.com. If it loads, you are through.
- Check for DNS leaks at dnsleaktest.com. Chinese resolvers in the result mean the DNS settings in your client need fixing.
Common questions
More answers on the FAQ page.
Frequently asked questions
Does the subscription link need periodic updating?
No. The link stays the same for the life of your subscription, including across renewals. The client reloads the latest configuration from that same link. You only re-enter it after reinstalling the app or changing device.
Should I use Global, Rule or TUN mode?
TUN routes all system traffic and is the most reliable; use it where supported. Global routes everything through the proxy but only applies to applications that honour the system proxy. Rule routes only listed domains, which is faster but misses things.
Can I use the same link on several devices?
Yes, as long as you stay within the simultaneous device limit of your plan. The link belongs to the account, not to a specific machine.
Windows Defender flags v2rayN. Is it safe?
This is a well-known false positive. v2rayN creates a virtual network adapter and modifies the system proxy, which superficially resembles malware. Download it from the project's official GitHub repository and add a Defender exclusion.