At a glance

When getting started, first understand the difference between a client, a core, and a server. Then import a subscription, choose a node, and route traffic through it. This guide answers 10 questions in that order, covering desktop and Android workflows, common port numbers, and how to verify a connection using a webpage and logs—not just the client’s status indicator.

1. What are V2Ray, a client, and a subscription?

V2Ray is part of the Project V proxy ecosystem. The core handles protocols, routing, and network connections, while the client provides a graphical interface and manages configuration. Downloading a client doesn’t give you access to a working server. You also need a valid server configuration, usually provided by a subscription URL or an individual share link.

Subscription URLs may contain account tokens, so treat them like credentials. Don’t share a full subscription URL in public screenshots, online decoding tools, or support requests.

2. Should you use v2rayN, v2rayNG, or v2flyNG?

Start by choosing a client for your operating system, then check that it supports your server configuration. Use v2rayN on desktop. On Android, if your configuration specifically requires Xray, VLESS, or REALITY, check v2rayNG’s support first. If you have a V2Fly configuration, consider v2flyNG, but confirm that your version supports the transport in use.

v2rayN

Recommended

A good starting point for desktop users, with support for Windows, macOS, and Linux. Choose an installer for your operating system and processor architecture. For specific protocols, check which core you’re using as well.

Best for: managing desktop subscriptions, system proxy settings, and routing.

v2rayNG

An Android client that uses the Xray core. After importing a configuration, check that all node parameters are present. A visible node name doesn’t guarantee protocol compatibility.

Best for: Android configurations that use Xray and its supported protocol features.

v2flyNG

An Android client that uses the V2Fly core. Use it with configurations whose server settings are supported by this core; don’t assume Xray-specific fields will work.

Best for: using compatible V2Fly configurations on Android.

This recommendation is for desktop beginners; it doesn’t mean you should use a desktop app on Android. For a closer look at platform and architecture differences, see Choosing a Client.

3. How do you add a subscription URL in v2rayN?

Add the subscription URL to a subscription group; don’t paste it into the server address field. The menu names below are based on the Chinese interface. Button locations may vary between versions, so look for the options named “Subscription Group Settings” and “Update Subscription.”

  1. Create a group

    In the main window, open “Subscription Group” → “Subscription Group Settings.” Use the add option to create a group, then enter a name you’ll recognize, such as “Daily servers.”

  2. Enter the URL

    Paste the complete subscription URL into the address field. Check that the URL’s scheme and ending parameters are intact. Don’t copy accompanying instructions, spaces, or line breaks.

  3. Update the list

    Save, return to “Subscription Group,” and choose “Update All Subscriptions.” If you don’t have a working proxy yet, try updating without one first. If a direct connection fails but you already have a working node, try updating through the proxy.

  4. Choose a node

    Check that servers appear in the list, select one, and set it as the active server. Then configure the system proxy and follow question 9 to verify that requests are actually routed through it.

If the update returns an empty list, check the subscription update log first. A login page, expiration notice, or regular webpage isn’t a node list the client can parse. Repeatedly clicking Update won’t change the format of the response.

4. How do you import a subscription on Android, and what does VPN permission do?

In v2rayNG, subscription management is usually under “Subscription Group Settings” in the main menu. After saving a subscription, you still need to update it; adding a group alone won’t fetch any nodes. In v2flyNG, use the subscription management option in that app’s interface—don’t assume the two clients have identical menus.

  1. In v2rayNG, open “Subscription Group Settings” → “+”, enter a name and subscription URL, save, and return to the main screen.
  2. Open the main menu and choose “Update Subscription.” Check that servers appear in the list, then select one.
  3. Tap the connect button. The first time you connect, Android will display a VPN connection request. Check which app initiated it, then grant permission.
  4. If another VPN connection is already active, check whether you need to disconnect it first. In typical personal-use scenarios, a user can’t keep two connections based on the system VPN service active at the same time.

VPN permission lets the client route traffic through the system interface. It doesn’t provide a server or guarantee that every destination will use the remote proxy. The client’s app selection and routing settings determine which traffic goes direct, through the proxy, or is blocked.

5. What’s the difference between a subscription URL, a share link, and Base64?

The purpose of the content matters more than the length of the string. A link starting with https:// could be a subscription or an ordinary webpage; vmess:// and vless:// usually indicate individual share links. Choosing the wrong import option can produce an “unsupported format” error or import just one entry.

If the provider says only that a subscription is available, check whether its output format is supported by your client. Don’t submit credentials to an unknown online conversion service just to try importing them.

6. Do you need to enter VMess, VLESS, or REALITY settings manually?

Keep the parameters provided by the subscription whenever possible. VMess and VLESS are protocols; WebSocket is a transport; TLS and REALITY concern the connection’s security layer. These fields aren’t interchangeable. The cards below list settings to check—they aren’t ready-to-use nodes or universal default values.

VLESS + REALITY

Protocol
VLESS
Security layer
REALITY
Server name
Must match the SNI provided by the server
Identity parameters
Check the UUID, public key, and shortId

Use an Xray configuration that supports this combination. Whether to set flow, and what value to use, depends on the server requirements.

VMess + WebSocket + TLS

Protocol
VMess
Transport
WebSocket
Security layer
TLS
Request parameters
Check the Host, path, and SNI

Don’t change a WebSocket path to the root path arbitrarily. The server address, Host, and SNI may also differ.

A protocol name in the node label doesn’t mean every configuration field is correct. Change parameters manually only when the provider explicitly gives you updated settings. Change one thing at a time and keep the original configuration so you can revert.

7. Should you use system proxy settings or TUN mode?

On desktop, start with the system proxy for basic testing. It tells apps that follow system settings to send requests to the local proxy port, but some apps ignore it. TUN routes traffic through a virtual network interface and generally covers more apps, but it can involve permissions, routing, and DNS issues.

Enabling TUN doesn’t mean every request goes through the proxy. Routing rules can still send specific domains or addresses direct. Likewise, using a system proxy doesn’t guarantee that every browser connection follows the same route.

8. What are ports 10808, 10809, and 443 used for?

Local listening ports and remote server ports are used at different ends of the connection. The numbers below are common examples, not defaults for every version. Newer versions may use a mixed-protocol listening port. To check your actual settings, open “Settings” → “Parameter Settings” in v2rayN and review the local listener options, or check the runtime log.

10808
Example local SOCKS port
10809
Example local HTTP port
443
Example remote TLS server port

For example, if the local HTTP listener is set to 10809, apps that support manual proxy settings can use address 127.0.0.1 and port 10809. Don’t enter the remote server address as the local loopback address, or change the remote port in your subscription to match these examples.

9. How can you confirm that your connection is actually using the proxy?

“Running” only confirms that the local service started. A successful latency test shows only that a specific test path received a response. To verify a connection, check that the app is routing traffic, the routing rules are being applied, and the remote destination is reachable. Test an HTTPS page you’re permitted to access and expect to use the proxy.

  1. Check that the client is running

    Check the client logs for startup failures, configuration parsing errors, or port conflict messages. On Android, also make sure the system VPN connection is still active.

  2. Make a new request

    On desktop, confirm that the system proxy is active, then open a new browser window and visit the test page. Don’t rely on a cached tab that was already open.

  3. Check the route

    If the logs record connections, check the destination domain and outbound tag to distinguish direct traffic from proxied traffic. If your log level doesn’t record requests, don’t assume a connection failed just because there’s no entry.

  4. Cross-check

    Test a second destination that you expect to use the proxy. If needed, compare your public IP address before and after connecting. With split routing, a direct-connection site showing the same IP is expected.

A test is behaving as expected only when the page loads, the expected route is used, and the public IP matches your settings. If just one webpage fails, the destination itself may be down; reinstalling the client shouldn’t be your first move.

10. Your subscription is imported, but you can’t connect. What should you check first?

Troubleshoot in this order: subscription response → local service → app traffic routing → remote connection. Keep the error message, change one setting at a time, and repeat the same test. This helps pinpoint whether the issue is with fetching the configuration or forwarding traffic.

A subscription update keeps timing out. Should I enable the proxy first?

Not necessarily. Try updating without a proxy first. If the subscription URL is unreachable directly but you already have a working node, try updating through the proxy. If you have no working nodes, switching update methods can’t create a proxy connection. Ask the provider whether the URL is reachable.

There are nodes in the list, but webpages won’t load. What should I check?

First, make sure the node is selected as the active server, then check the system proxy or Android VPN connection. Next, look in the logs for a connection timeout, connection refused, or name resolution failure. Check the routing rules too, to make sure the request isn’t taking the wrong outbound route.

I’m getting a certificate or handshake error. Can I disable verification?

First, sync your system date and time. Then check the TLS server name, transport, and subscription settings. Don’t treat skipping certificate verification as a routine fix. If your settings don’t match the server, update the configuration or contact the provider.

Should I change DNS if just one app isn’t working?

First check whether the app follows the system proxy, is excluded by Android app routing, or has its own proxy settings. Check DNS only if the logs point to a name resolution failure. Changing the node, DNS, and routing all at once makes it harder to find the cause.

When asking for help, include your operating system, client version, current core, connection mode, when the error occurred, and a redacted log excerpt. Remove subscription tokens, UUIDs, and server credentials. For more on routing and DNS configuration, see Advanced Configuration. For basic terminology, see Quick Glossary.