v2rayN / v2rayNG / v2flyNG

V2Ray Client FAQ

Troubleshoot subscriptions, system proxy, routing rules, and connections. Identify which layer is causing the issue before changing its settings.

Basics

Understand the difference between clients, cores, protocols, and subscriptions. Similar names, different roles.

v2rayN, v2rayNG, or v2flyNG: Which Should You Choose?
For desktop platforms, start with v2rayN, which supports Windows, macOS, and Linux. On Android, consider v2rayNG, which uses the Xray core, or v2flyNG as an alternative that uses the V2Fly core. The graphical interface imports and manages configurations; the core handles the actual connection. Similar client names do not mean they support identical configurations. Before choosing, check the server protocol, transport, and required core features, then verify the package matches your operating system and processor architecture. If your current setup works reliably, there is no need to switch just for a different interface. Back up custom routing rules and subscription group settings before migrating.
Are VMess, VLESS, and REALITY protocols at the same layer?
No. VMess and VLESS are proxy protocols; TCP and WebSocket are transport methods; REALITY is a connection security mechanism, often used in configurations with VLESS. When importing a configuration, check more than the protocol name: verify the transport, security options, server name, and related parameters. A client offering a protocol option does not mean its current core supports every combination. Choose a core that supports the complete server configuration. Do not treat REALITY as a drop-in replacement for a standard TLS toggle, or try to convert an existing configuration by changing only the protocol dropdown.
What’s the difference between a share link and a subscription URL?
A share link usually contains one server configuration, often as text beginning with vmess:// or vless://. A subscription URL is usually an HTTPS address that retrieves a group of configurations and can be refreshed later. Import a single share link through an option such as Import from clipboard; enter a subscription URL in a subscription group’s address field. Using the wrong import method can result in a parsing error or an empty list. Updating a subscription typically replaces the server entries in that group; it does not automatically sync all custom routing rules. Both subscription URLs and share links may contain connection credentials, so never post their full contents publicly when troubleshooting.
Android package: arm64 or universal?
Most newer Android phones can start with arm64, but choose based on the device’s supported app architecture, not its purchase date. Some devices have a 64-bit processor but run a 32-bit app environment, so an arm64 package may still fail to install. If you’re unsure of the architecture or the installer reports an incompatibility, try the universal package for the same client. It includes more architecture variants and is usually larger. If you see a signature conflict or a downgrade warning, switching architectures usually won’t help. Check the installed app’s source and version, and back up your configuration before uninstalling it.

Setup & Configuration

Import the configuration correctly, then verify how traffic is routed. Test the system proxy and TUN separately.

Subscription import fails or the list is empty. What should you check first?
First, determine whether you’re importing a single share link or a subscription URL. Check that the copied text doesn’t include extra spaces, line breaks, non-ASCII punctuation, or explanatory text. Keep all query parameters in the subscription URL, add it to a subscription group, and run an update. If the log reports a parsing error, the response may be a web login page, an error page, or a subscription format the client doesn’t support. A URL opening in a browser does not mean its response can be parsed by the client. Confirm that the provider supplies a format compatible with your client. Keep the existing group while troubleshooting instead of repeatedly clearing configurations, and don’t include a URL with access credentials in log screenshots.
Your existing nodes work, but subscription updates fail. What should you do?
A working connection to an existing server only confirms that its current parameters work; it doesn’t mean the subscription server is reachable. Check the update log first and distinguish DNS resolution failures, connection timeouts, certificate errors, and HTTP rejections. Then check whether the subscription has expired or its URL has changed. If the client can update subscriptions through a proxy, try a configuration that still works. Forcing an update through a broken proxy will fail. Also check the system clock and whether the network requires you to sign in. Change one thing at a time, then verify the group entries after a successful update. Repeatedly clicking Update isn’t a fix.
v2rayN is running, but why isn’t the system proxy working?
Starting the client doesn’t necessarily configure the system proxy. First confirm the core is running and that its local listening port matches the configured port. Then enable automatic system proxy configuration and check the actual proxy address and port in your system’s network settings. The system proxy affects only apps that honor it. Some apps use their own proxy settings; others need TUN to route their traffic. Check whether another proxy tool, browser extension, or management policy is overriding the setting. Don’t change routing rules and proxy ports at the same time. Test with a browser known to honor the system proxy, then troubleshoot any app-specific exceptions.
TUN reports insufficient permissions at startup. What should you do?
TUN uses a virtual network interface and system routes, so it usually needs more permissions than the system proxy. On Windows, grant administrator permissions as prompted by the client. On macOS and Linux, authorize the required helper service or system permissions for your installation method; the exact steps vary by version. Check the logs for a specific permissions, interface creation, or route-writing error before elevating privileges. Close other tools that are routing traffic and keep your original network settings before enabling TUN. If the network has problems afterward, disable TUN and confirm basic connectivity returns before checking DNS and routes. Don’t keep reinstalling the client.

Tips & Usage

Know what your rules match, which apps are selected, and what each test measures to avoid unnecessary changes.

Global proxy or routing rules: which should you use?
Use routing rules to choose an outbound based on a domain or address. To check whether a rule is affecting access, briefly switch to global proxy mode for comparison. Global proxy mode generally sends connections that have already reached the core through the proxy outbound; it does not automatically capture traffic from every app on the device. Rules are evaluated in order, so a broad rule near the top can override more specific rules below it. The default outbound also affects the result. When editing, check rule order, match conditions, and outbound tags. Restore the original mode after testing so a successful global proxy connection isn’t mistaken for a fix to the subscription or DNS.
How do you check v2rayNG’s per-app proxy selection mode?
First, check that per-app proxy is enabled, then read the selected mode carefully: one mode proxies selected apps, while the other bypasses the proxy for selected apps. Save the app list and restart the connection as prompted. If needed, close and reopen the app you’re testing so new connections use the updated policy. Traffic from apps excluded from the VPN never reaches the core’s routing rules, so changing domain rules won’t fix an incorrect app list. Keep one known app as a test case and avoid changing multiple lists at once. Option names can vary by version; follow the current interface’s description rather than relying on the number of checked boxes.
How do local DNS, remote DNS, and domain strategies work together?
First distinguish how the app resolves domain names, which DNS servers the core uses, and whether routing needs to resolve a domain to an IP address. AsIs generally matches the original domain first. IPIfNonMatch attempts resolution for IP-rule matching when no domain rule matches. IPOnDemand triggers resolution when a matching rule requires an IP address. These strategies do not, by themselves, replace system-wide DNS. An app’s built-in encrypted DNS can also change the traffic path. If only some domains fail, check resolution logs and the DNS outbound before changing rules. Changing every DNS setting and domain strategy at once makes the issue harder to reproduce.
For node speed tests, should you check ping or real connection latency?
For everyday connections, real connection latency is usually a better reflection of the proxy path than ping alone, but it is not download speed. Ping typically measures ICMP round-trip time; a TCP test focuses on the port handshake; a real connection test usually also includes the proxy handshake and response from the test target. Results from different methods or targets aren’t directly comparable. Keep the network, target, and test method consistent, and compare repeated results rather than a single best reading. Download speed also depends on server load, packet loss, and the destination site. If latency is low but throughput is poor, run a sustained transfer test instead of ranking nodes by the list’s latency numbers alone.

Troubleshooting

Change one thing at a time. Recording the error type is more useful than repeatedly toggling settings.

Node timeouts or connection failures: what should you check, and in what order?
Check local connectivity, system time, subscription status, connection parameters, and core logs—in that order. Pause the proxy first to confirm the underlying network works, then check the time and time zone. Update the subscription and verify the address, port, protocol, transport, security options, and server name. A reachable TCP port only means the transport endpoint can be reached; it doesn’t confirm that authentication will succeed. If the logs show a timeout, compare using another network and a known-working configuration. For handshake or authentication errors, recheck the parameters. Record each error type and change one setting at a time; changing nodes and DNS together makes the results inconclusive.
It says connected, but websites still won’t load. What should you do?
Connected may only mean the local service or Android VPN interface has started; it doesn’t guarantee the server or destination site is reachable. First confirm the app you’re testing is actually routed through the proxy, then check whether the core logs a connection attempt. If there’s no log entry, check the system proxy, per-app list, or TUN routing. For DNS errors, check the resolution path; for authentication or handshake errors, verify the server parameters. If only a few sites fail, check routing matches, the destination site, and the app cache. Compare direct and proxied access to the same destination. Don’t generalize from one webpage or assume the connection icon means traffic is working.
v2rayNG disconnects when the screen turns off or loses its background connection. What should you do?
First check whether disconnections happen only when the screen is off, and whether the service is still running when you reopen the app. Android battery policies can restrict background activity. Allow the client to run in the background in system settings, and adjust battery optimization and auto-start permissions if your device provides those options. Disabling its persistent notification or clearing the app from the background can also make its status harder to monitor. Android typically allows only one active VPN, so starting another VPN app may replace the current connection. Don’t assume every disconnection is caused by battery settings. If it also fails with the screen on, check network changes, node availability, and core logs, and record the conditions that trigger the issue.
TLS or REALITY handshake fails. Should you disable certificate verification?
Disabling verification should not be a routine fix. First check that the system time, server address, port, server name, and security type match the server configuration. For standard TLS, also check the certificate’s validity period and trust chain. For REALITY, verify the public key, short ID, fingerprint, and core support; standard TLS certificate checks don’t apply in the same way. These parameters may be managed by the subscription, so update it and check the provider’s instructions before making changes. If the same configuration works on another device, check the local core version and network environment. Remove addresses, identifiers, and access credentials before sharing diagnostic logs.