At a glance

For your first setup, choose a client for your platform, import an existing subscription, select a server, and enable the right proxy entry point. This guide covers clients, cores, protocols, and routing separately, with desktop subscription steps, Android setup directions, and port-check examples. By the end, you’ll have a basic working setup and a troubleshooting sequence—subscription → core → entry point → routing—instead of changing everything at once.

1. What are V2Ray, a client, and a server node?

The client provides the configuration interface, the core handles traffic, and a node contains the settings for a remote connection. They are different things: installing v2rayN does not give you a server, and importing a node does not mean your browser is already using the proxy.

TermWhat it doesWhat to check
v2rayN / v2rayNG / v2flyNGImport configurations, choose a node, and set the proxy entry pointWhether it matches your operating system and processor architecture
Xray / V2FlyProtocol connections, DNS, routing, and outbound trafficWhether it supports the protocols and settings required by the node
NodeSpecifies the remote server address, port, and authentication settingsWhether the address, expiration date, and data allowance are valid
SubscriptionFetches and updates multiple nodes from a single URLWhether the link is complete and returns a valid configuration

“V2Ray” can refer to the project itself, but it is also commonly used as a general term for this type of proxy tool. When troubleshooting, avoid saying only “V2Ray isn’t working.” Note the client name, core, proxy mode, and error message so you can pinpoint the relevant settings.

2. Which client should you install on Windows, macOS, Linux, or Android?

Start with v2rayN on desktop, and choose v2rayNG or v2flyNG on Android based on the core your nodes require. Check your operating system and architecture first, then your node requirements. There’s no need to install several clients and try them one by one.

v2rayN desktop client

Recommended

For desktop use on Windows, macOS, and Linux. The Desktop edition has a cross-platform interface, while the WPF edition is for Windows. Don’t assume an installer is right for your system just because its filename includes v2rayN.

Best for: first-time desktop setup, subscription management, and routing

v2rayNG for Android

An Android client that uses the Xray core. If your nodes require VLESS, REALITY, or similar features, check that the bundled core supports them.

Best for: Android devices and subscriptions that require Xray protocol support

v2flyNG for Android

An Android client that uses the V2Fly core. Choose it when your existing configuration requires V2Fly compatibility; a similar name does not mean the clients are interchangeable.

Best for: Android devices and existing configurations compatible with V2Fly

Match the package to your architecture, too: Windows commonly uses x64; macOS packages are available for arm64 and x64; Linux packages may be in deb or rpm format. For Android, arm64 is usually the right place to start. If you’re unsure about your device’s architecture, check the download page for universal package details. Installers and portable archives launch differently, so follow the instructions for the package you chose.

3. Where do subscriptions come from, and how are they different from individual share links?

A subscription URL comes from a server operator or the management panel for a self-hosted service. The client does not automatically create usable remote nodes. A subscription is an endpoint for updating a set of configurations; an individual share link usually represents just one connection.

Getting zero nodes after the first update doesn’t necessarily mean the client is broken. Check the subscription’s expiration and data allowance, then see whether the server returned node data, a login page, an error, or a redirect. A page opening in your browser doesn’t mean the client can parse it as a node.

4. How do you import a subscription into v2rayN or v2rayNG?

On desktop, create a group, update it, then select a node as the active server. The steps below use common v2rayN menu labels. Button locations may vary by release, but look for “Subscription Group Settings,” “Update Subscription,” and “Set as Active Server.”

  1. Create a group

    Open “Subscription Group” → “Subscription Group Settings” from the main window. Select “Add” or “+” to create a group, then enter a descriptive name.

  2. Paste the URL

    Paste the full subscription URL into the group’s URL field. Check that the beginning, end, and token are intact, then save. Don’t paste an entire chat message with quotation marks.

  3. Update the subscription

    Open the “Subscription Group” menu and select “Update All Subscriptions (Direct).” If no nodes are available yet, start with a direct update. If you need a proxy and already have a working node, try updating through the proxy.

  4. Choose a server

    Right-click a node in the list and select “Set as Active Server.” Check the logs to confirm the core starts successfully, then configure the system proxy. A node appearing in the list alone isn’t enough.

In v2rayNG, the usual path is “Subscription Group Settings” in the sidebar → “+” in the top-right corner. Enter a name and subscription URL, then save. Return to the main list and select “Update Subscription” from the top-right menu. Choose a node and tap the connect button; the first time you connect, approve Android’s VPN connection request. Menu labels may vary slightly, so use the subscription management option in your installed version.

5. How do you choose between the Xray and V2Fly cores?

Choose a core based on your node’s requirements, not assumptions about speed. VMess and VLESS are protocol names; WebSocket is a transport; TLS and REALITY are security-related settings. These layers can be combined, but not every core supports every combination.

Xray configuration

What to check
Whether the subscription requires Xray features
Common protocols
VLESS、VMess
Special requirements
REALITY、xtls-rprx-vision
Android client
v2rayNG

For REALITY or Vision settings, use an Xray version that supports the combination and match the fields to the server configuration.

V2Fly configuration

What to check
The server provides a V2Fly-compatible configuration
Common combinations
VMess + WebSocket + TLS
Compatibility checks
Transport, authentication, and configuration syntax
Android client
v2flyNG

Don’t copy Xray-specific fields directly into a V2Fly configuration. If your existing setup works, keep its core and settings.

In v2rayN, look for core type settings under “Settings” → “Parameter Settings.” Some versions let you choose a core separately for each protocol. Restart the core after making changes. If the logs report an unknown field or transport type, check the node configuration and core capabilities instead of repeatedly changing the server port. Starting successfully is only the first step; authentication settings and the remote handshake must also be correct.

6. What’s the difference between system proxy and TUN mode?

Start with the system proxy to test browser access. Consider TUN only if an application doesn’t follow the system proxy settings. The system proxy adds the proxy address to your system settings. TUN creates a virtual network interface that can route traffic from more applications, but it also requires attention to permissions, DNS, and local network access.

Entry pointWhen to use itWhat to watch for
System proxyBrowsers and applications that follow system proxy settingsSome applications have their own proxy settings or ignore the system settings
Manual proxy in an appIndividual applications that accept an HTTP / SOCKS addressUse the address and port the client is actually listening on
TUNDesktop setups that need to route traffic from more applicationsCheck permissions, DNS, routing, and local network exclusions
Android VPN entry pointClients such as v2rayNG create a system VPN connectionCheck for app-specific restrictions and make sure another VPN isn’t already using the connection

In v2rayN’s system proxy menu, start with “Set system proxy automatically.” When you’re done, select “Clear system proxy.” Enabling TUN won’t fix an invalid subscription or incorrect password. It changes how traffic reaches the client; it doesn’t replace the node connection itself.

7. When should you use global routing or split tunneling?

For everyday use, start with a suitable routing rule set. For troubleshooting, briefly switch to an explicit proxy route as a comparison. The proxy entry point and routing policy are separate settings: an app first sends traffic to the client, then the core decides whether to send it direct, through the proxy, or block it.

Split-tunneling logic (example only; not an importable configuration):
Local network addresses → direct
Domains that need the proxy → proxy
All other connections → use the current route’s default outbound

“Auto-configure” in the system proxy menu doesn’t mean “automatic split tunneling.” Check the active routing preset and the final default outbound, too. If your rules use geosite:cn or geoip:cn, the corresponding rule data must be available. A rule name alone doesn’t provide a complete domain classification.

8. Why won’t a website load even though the node has latency?

A latency result only confirms that one test succeeded; it doesn’t mean the full connection path is working. A successful TCP probe may only mean the remote port is reachable. Loading a website also involves the proxy handshake, authentication, DNS, TLS, and routing. Check what the test measures, not just the number of milliseconds.

Subscription updates keep timing out. What should you do?

First try updating directly from the subscription menu. If your network requires a proxy to reach the subscription URL, confirm an existing node works, then try updating through the proxy. Don’t rely on a broken node as your only way to update the subscription.

The node shows latency, but the browser can’t load pages?

Confirm the node is set as the active server and the system proxy is enabled, then check the core logs. If you’ve only run a TCP latency test, test an actual connection as well to distinguish an open port from a successful protocol handshake.

Seeing a certificate or TLS handshake error?

First enable automatic time synchronization, then check the server name and TLS settings in the node against the server’s requirements. Don’t treat skipping certificate verification as a standard fix.

Can’t reach local devices after enabling TUN?

Turn off TUN temporarily to compare, and confirm the local network is reachable on its own. Then check whether your routes include the local network range. Exclude local addresses based on your actual network setup; don’t simply clear all routing rules.

Change one setting at a time and record the errors before and after. Subscription update errors occur while fetching configuration, core startup errors occur locally, and remote authentication errors occur during connection. Treating them all the same can break settings that were already working.

9. Which local port should you use, and how do you check for conflicts?

Applications connect to the client’s local listening port, not the remote server’s port. In v2rayN, check the actual listener settings under “Settings” → “Parameter Settings,” then enter them in your app’s proxy settings. The example below uses 127.0.0.1:10808 to demonstrate how to check; this isn’t guaranteed to be the default in every version.

# Windows PowerShell: Check whether the example port is listening for TCP connections
Get-NetTCPConnection -LocalPort 10808 -State Listen

# Linux: List TCP listeners and look for 10808 in the output
ss -lntp

# macOS: Check which process is listening on the example port
lsof -nP -iTCP:10808 -sTCP:LISTEN

If nothing is listening on the port, first check whether the core has started. If the logs show address already in use, find the process occupying the port, close any duplicate client instances, or change the listening port. After changing it, update the app’s manual proxy address too; it won’t update automatically.

10. How do you verify the setup and keep a recoverable configuration?

Use real connection tests, logs, and the results of switching modes to verify your setup—not the “connected” icon alone. After your first successful configuration, note the client, core, listening port, and routing preset. That gives you a baseline for upgrades and node changes.

  1. Check startup: After selecting an active server, confirm the core starts normally and the logs don’t repeatedly report a port conflict or configuration parsing error.
  2. Check access: Test one destination expected to connect directly and one expected to use the proxy. Check the logs to see which outbound each connection actually uses.
  3. Check DNS: If domain names fail but other connections work, check your DNS settings. Don’t judge an HTTPS service solely by connecting directly to its IP address.
  4. Check shutdown: If you’re using the system proxy, clear it before closing the client and confirm normal network access returns.
  5. Back up your configuration: Use the client’s backup or export feature and store files containing subscriptions or authentication details securely. Remove sensitive information before sharing troubleshooting details.

Keep a recoverable configuration before upgrading. After the upgrade, test with the original node and routing first; don’t change the core, DNS, and TUN settings all at once. If you can’t identify an error, gather six details: operating system, client version, core, protocol combination, reproduction steps, and redacted logs. Then work through the FAQ or complete guide one issue at a time. This narrows the problem down to a specific part of the setup instead of leading to repeated reinstalls.

Download a client for your platform

Choose an installer for Windows, macOS, Android, or Linux, then follow the guide to import a subscription and configure the proxy.