V2Ray FAQ
Subscriptions, proxy modes, and connection issues
Identify which layer is failing before changing settings. The FAQs below are grouped into client basics, installation and setup, everyday use, and troubleshooting. Select a question to expand the full set of checks. Menu names may vary by version, so follow the current client interface and logs.
Getting Started
Distinguish the client, core, and traffic entry point before changing settings at the wrong layer.
What do V2Ray, proxy cores, and GUI clients each do?
Start by separating the configuration interface from the connection engine. V2Ray usually refers to proxy tools and related technology in the Project V ecosystem. V2Fly and Xray are separate core projects, and their features should be checked individually. v2rayN, v2rayNG, and v2flyNG are GUI clients that manage subscriptions, let you select nodes, and generate configurations; the core handles protocol processing. So being able to import a node in the interface does not mean the selected core can run it. When troubleshooting, note the client and core names along with the error in the logs. Pay particular attention to whether the protocol, transport, and configuration fields match. Don’t judge compatibility by the protocol label shown in the interface alone.
Which should you choose: v2rayN, v2rayNG, or v2flyNG?
For desktop devices, start with v2rayN, which supports Windows, macOS, and Linux. For Android, consider v2rayNG, which uses the Xray core; choose v2flyNG if you need a V2Fly core configuration. Base your choice on the operating system, processor architecture, and the protocols and transports your nodes require—not on how similar the names look. For configurations using VLESS or REALITY, in particular, check that the core bundled with your chosen client supports them. Before switching clients, record your current settings and import a known-working node for comparison. Avoid running multiple clients that take over the system proxy or virtual network interface at the same time, or your test results may be misleading.
Do I need a subscription or node configuration after installing the client?
Yes. A client manages configurations and connections; installing it does not give you access to a remote server. A subscription URL retrieves a list of nodes, while a single-node link typically contains the protocol, server, port, and authentication parameters. Use a service you’re authorized to access or your own configuration; the client does not provide a server account or traffic allowance. After importing, select a node, start the connection, and set up the system proxy or another traffic-routing method for your needs. If the subscription list is empty, check the subscription contents and account status first—it doesn’t necessarily mean the installation failed. Subscription URLs and node parameters may contain credentials, so redact them before sharing screenshots or logs.
What’s the difference between system proxy, routing rules, and TUN mode?
The system proxy tells apps that honor system proxy settings to send requests to the client. Routing rules decide whether traffic is sent direct, proxied, or blocked after it reaches the core. TUN mode captures more traffic through a virtual network interface. These work at different stages and are not interchangeable. If an app ignores the system proxy, changing routing rules may not help because its requests might never reach the client. TUN covers more traffic, but also involves permissions and compatibility with DNS, gateways, and other networking software. For a first setup, use the system proxy to test a single node, then consider TUN for specific apps instead of changing several settings at once.
Platform Setup
Check the package architecture, subscription entry point, and permissions, then run a minimal configuration test.
Where do I import a subscription URL, and why are no nodes shown after I paste it?
First check whether you copied a subscription URL or a single-node share link. In v2rayN, you typically add the URL in the subscription group settings, save it, and then run a subscription update. On Android, add and refresh it from the subscription section rather than importing a webpage URL as a single node. Check for spaces, line breaks, missing query parameters, or a URL that actually points to a page requiring sign-in. If no nodes appear, check the update log to tell a failed request from unrecognized content or an empty list after filtering. Don’t paste a URL containing credentials into a public conversion tool. If you need to convert its format, verify that the source is trusted and the target format is compatible, and keep the original subscription for comparison.
Which Android package should I choose: arm64 or universal?
For most newer Android phones, arm64 is a reasonable first choice, but check the app architectures supported by your device rather than relying on its age. Some devices have a 64-bit processor but a 32-bit-only app environment, so an arm64 package may not install. Check the supported ABIs in your device information, or choose universal if you’re unsure. A universal package usually includes multiple architectures and takes up more space. If installation fails, also check the existing app’s signature, Android version, and available storage instead of assuming the architecture is the problem. Uninstalling an older client may delete its configuration, so back it up first and confirm where the backup is saved.
How can I check whether I chose the wrong desktop package format or architecture?
Check your system information to confirm the architecture, then choose the right package format. For Windows, make sure your system meets the x64 package requirements. On macOS, use About This Mac to identify Apple Silicon or Intel. On Linux, check whether you need x64 or arm64, and choose the package format used by your distribution, such as deb or rpm. The same file extension doesn’t guarantee the same architecture, and a package that opens may still require a different runtime environment. If the app won’t start, check the system message and client startup logs, then verify runtime dependencies. Don’t copy an application folder from another device. When moving between platforms, transfer only the subscription and essential settings; recheck paths, network interfaces, and permissions on the new device.
What should I do if TUN reports insufficient permissions the first time I enable it?
Make sure a standard connection works before troubleshooting TUN permissions. On Windows, you may need to run the client as administrator or configure a related service, as prompted by the client. Creating network interfaces or changing routes on macOS and Linux may also require authorization; the exact steps depend on the client version. The first time an Android client takes over traffic, it requests system VPN permission, which you must approve in the system dialog. If authorization fails, close other apps using virtual network interfaces and check the logs for interface creation or routing errors. Don’t leave system protections disabled just to bypass one error. After testing, confirm that disabling TUN restores your normal network before deciding whether to use it regularly.
Usage Tips
Understand test targets, update behavior, and routing order, and keep configuration notes you can use to reproduce results.
Why do latency, real connection tests, and download speed tests differ for the same node?
These tests measure different things. Tcping mainly measures the time to establish a TCP connection to the server port; it doesn’t confirm authentication, proxy routing, or access to the destination website. A real connection test usually sends a request to a specified address through the proxy, involving more protocol and network steps. A download speed test measures sustained throughput, which is also affected by the test file, concurrency, and server-side limits. So a fast handshake doesn’t guarantee fast downloads, and a failed real connection test may mean its target is unreachable. Compare nodes using the same target and test time. First confirm that a real connection works, then choose based on how the node performs in your apps. Downloads use traffic, so limit testing on nodes with metered or multiplier-based usage.
How should I organize multiple subscriptions, and why did the selected node change after an update?
Create a separate group for each subscription and use clear labels to distinguish its source and purpose. Update one group first and check that the node count and fields look right before scheduling automatic updates. Add filters one at a time so you don’t accidentally hide every node. Updates may replace node records, and the server may change names, addresses, or ordering, so the client may not keep the previously selected node. After an update, check the selected node and routing mode, and confirm whether you need to reconnect; a refreshed list alone isn’t enough. Keep manually added nodes in a separate group so they don’t get mixed in with automatically updated entries. Back up any settings you need before deleting old groups, and store subscription credentials in backups securely.
Routing rule changes aren’t taking effect. What should I check first?
First confirm that traffic is reaching the client, then check that the updated routing configuration is selected. Rules are generally evaluated from top to bottom; a broad rule near the top may prevent a more specific rule below it from matching. Check domain rules, IP rules, and outbound tags, and make sure any referenced geo resources exist. Also distinguish requests made with a domain name from those already resolved to an IP address. After saving, restart the core or reconnect as required by the client so existing connections don’t continue using the old route. Test one specific destination and check its address and selected outbound in the logs. Don’t assume every issue is caused by rule order: an app’s own proxy settings and DNS behavior can affect the result too.
Which DNS setting should I change first? Can I just copy a public DNS address?
First determine whether the failure is in domain resolution or the proxy connection; don’t replace every DNS setting right away. Direct and proxied DNS queries may use different network paths. If a remote DNS server must be reached through the proxy, make sure the client routes that request correctly; otherwise, you can create a loop where the proxy depends on the DNS result needed to establish itself. Record your current settings, change one at a time, and test a known domain. Then check whether the app has its own encrypted DNS enabled. Browser, system, and client caches can also cause results to differ temporarily. A public DNS address is just an endpoint, not a guarantee that it will be reachable on every network. Changing DNS won’t fix incorrect node credentials or a wrong server port.
Troubleshooting
Troubleshoot each layer, from subscription requests to destination access. A running client, successful handshake, and working webpage are different outcomes.
What order should I follow when troubleshooting a failed subscription update?
First check that the URL is complete and the account is active, then review the request result in the update log. For a connection timeout, check subscription domain resolution and network access first. HTTP 401 or 403 responses usually call for checking authorization or server policy. If the request succeeds but the content can’t be parsed, make sure it’s a node subscription rather than a login or error page. If the current node is unavailable, updating through the proxy may fail too; if the client offers both options, compare direct updates with updates through the proxy. Don’t keep hitting refresh, as this may trigger rate limits. Contact the subscription provider if needed and describe the error, but remove credentials from the URL before sharing logs. Deleting and recreating the group isn’t usually the first step and may lose its filters and update settings.
A node keeps timing out. How can I tell whether the problem is the node or my device?
Test a known-working node on the same network for comparison, then run a real connection test with the current node. If only one node fails, check its server address, port, authentication parameters, transport settings, and server status. If several nodes fail at once, check your local network, system clock, firewall, and other proxy software. A successful handshake only suggests the port may be reachable; it doesn’t rule out authentication or protocol errors. If the logs show the core never started, fix port conflicts or configuration errors before trying other nodes. Temporarily disable overlapping traffic-capture methods, change one setting at a time, and record the results. Don’t delete the entire subscription based on one timeout or assume every website is down because a test site failed.
The client says it’s connected, but webpages won’t load. What should I check first?
First distinguish between the client starting successfully and a request to the destination actually succeeding. Check whether browser traffic reaches the client: verify the system proxy status, the browser’s own proxy settings, and the selected node. Then check domain resolution, the routing outbound, and connection errors in the logs. If only certain sites fail, check their specific rules and service status rather than resetting the whole configuration. With TUN, also check DNS capture, interface routes, and conflicts with other virtual networking software. Try exiting TUN and using the system proxy to test an ordinary webpage and narrow down the cause. If the network still behaves unexpectedly after closing the client, check for a leftover system proxy and make sure your original DNS and gateway settings are restored before testing again.
The system proxy isn’t working, or my network stops working after I exit the client. What should I do?
Check the proxy address and port currently set in your operating system and make sure they point to a listening port on the running client. A changed client port, another app overriding the settings, or an unexpected client shutdown can leave the system proxy pointing to the wrong place. If it still points to a closed local port after a normal exit, clear the proxy in the client or system settings and test your direct connection. Some apps don’t use the system proxy; you may need to configure a proxy in the app or consider TUN. Don’t swap HTTP and SOCKS ports. Keep only one client running while troubleshooting to prevent settings from being overwritten. Don’t expose a local listener to your LAN without a reason; allowing other devices to connect requires separate consideration of authentication and access scope.