quickstart

V2Ray Setup Guide: Subscriptions and Connections

Import a subscription → choose a proxy mode → connect → verify traffic. Follow these steps for the initial setup; afterward, you’ll usually only need to update the subscription and switch nodes.

Before you begin, choose a client on the download page for your device and install it. Get a valid subscription URL from your service provider, check that your device’s date, time, and time zone are correct, and make sure your regular internet connection works. The client reads configuration and establishes a connection; it does not provide remote servers. If you don’t yet have a subscription or node configuration, get one before proceeding.

This short workflow is designed for first-time users. Set aside about ten minutes for the initial setup, though subscription updates and connection tests depend on network conditions. Start with the default local port. Don’t enable TUN, make bulk DNS changes, or run multiple proxy tools at the same time. Keeping changes to a minimum makes it easier to tell whether a problem comes from the subscription, node, or app settings. For the full explanation and advanced setup, see the V2Ray User Guide.

01 Import a Subscription: Create a Group First

A subscription URL usually points to an updatable collection of node configurations; it isn’t a webpage that you need to sign in to. Copy the entire URL, without any surrounding instructions, spaces, or line breaks. If you got it from a QR code or message, make sure you copied the subscription URL rather than a share link for a single node. Both can import configurations, but they’re updated differently. If you’re unsure about the difference, see Subscription and Node Terms.

v2rayN: Add the URL, Then Update the Subscription

Open v2rayN and find the Subscription Group menu at the top, then open Subscription Group Settings. Add a group, enter a recognizable label such as “Everyday use” in the remarks field, and paste the complete subscription URL into the address field. Leave other filters and automatic update options at their defaults for now. Save your changes and close the settings window. The URL is now saved; it’s normal for nodes not to appear on the main screen yet.

Return to the main screen and run the update from the Subscription menu. If you have multiple groups, update only the one you just added to avoid changing other node sources. If this is your first setup and you don’t have a working proxy yet, choose the option to update without a proxy. Use the option to update through a proxy only if you already have a working connection and need it to reach the subscription URL. Otherwise, the update may keep failing because the proxy isn’t running.

Watch the log or status message and wait for the update to finish, then switch to the relevant group. The node list should show entries with details such as name, address, port, or protocol. The number of nodes varies; use your service provider’s configuration as a guide. If the update succeeds but the list is empty, first check whether you’re viewing a different group or have a name filter enabled, then confirm that the subscription URL is still valid. At this stage, just make sure the configuration was imported; don’t change node transport, security, or authentication settings yet.

v2rayNG: Add a URL in Subscription Group Settings

In v2rayNG, open the side menu or relevant menu and go to Subscription Group Settings. Tap Add to create a group, enter a label and subscription URL, and save. Return to the main node screen, then open the top-right menu and select Update subscription. Some versions call this Update subscription without proxy or let you choose which groups to update. As on desktop, saving the URL does not download the configuration; you must run the update before nodes appear.

If you only have a share link for a single node, copy it and use an option such as Import from clipboard. For a QR code, use the scanner and grant any required permissions when prompted. A single-node import isn’t linked to automatic subscription updates, so you may need to import it again if the server configuration changes. Don’t create multiple groups for the same subscription; duplicate entries can clutter the list and make it easy to select an outdated node.

It’s easy to tell when this step is complete: the group contains nodes and the update log isn’t showing repeated errors. Next, decide which app traffic should enter the client and how it should be routed. Don’t mistake “imported” for “connected.”

02 Proxy Modes: Understand the Entry and Exit Points

On desktop, System Proxy and Routing Mode are separate settings. The system proxy tells apps that follow system settings to send requests to the local client. Routing determines whether the client forwards those requests through a remote node or connects directly to the destination. Even with global routing enabled, apps that don’t use the system proxy or have no proxy configured may not send traffic through the client. This distinction helps explain why enabling global routing may not change what happens in a particular app.

v2rayN: Start with Everyday Routing, Then Set the System Proxy

Find the routing settings in the status bar or routing menu. For everyday web browsing, start with a Bypass mainland China preset, or a similarly named option. Traffic matched by its preset rules connects directly; other traffic follows the preset’s configured route. The outcome depends on the rules and classification data in use, not just the language of the website. Start with a built-in preset rather than adding domain rules. See the routing and split-tunneling section for rule order and DNS behavior.

Next, open System Proxy and select Automatically configure system proxy. This points the system’s proxy settings to the client’s local listening address. On Windows, the option is commonly in the tray menu or status bar. On Linux and macOS, the desktop environment, permissions, and system interfaces can affect whether automatic configuration works. If your browser doesn’t respond, check the system network proxy settings to see whether the local address was applied instead of repeatedly switching routing modes.

To configure a Linux desktop manually, open the system network settings and set the proxy method to Manual. Set the SOCKS host to 127.0.0.1 and enter the client’s actual SOCKS listening port. Don’t enter the remote node address here. If the system asks for HTTP or HTTPS proxy details, use an HTTP or mixed listening port explicitly provided by the client; don’t assume the SOCKS port will work. The command later in this guide uses 10808 as an example; check the client settings for the actual value.

v2rayNG: Routing Settings and VPN Traffic Handling

On Android, open the routing options in Settings and choose a bypass rule suitable for everyday use. In some versions, routing presets are under Predefined Rules; look for the setting that matches the description rather than the exact desktop label. For now, don’t enable per-app proxying or change the app exclusion list. Excluded apps may always connect directly, making the first test harder to interpret. When you connect, Android routes eligible traffic to the client through its VPN interface.

Global mode can be useful for a brief comparison. If a website fails with everyday routing, switch to Global, retry the request, and see whether the result changes. If it works in Global but not with everyday routing, investigate the rules or DNS resolution path. Restore your original routing mode when you’re done. Global mode won’t fix a failed node or automatically proxy desktop apps that don’t send traffic to the client.

Your subscription is ready, and you’ve chosen where traffic enters and how it’s routed. Next, select one node and connect to test the full path. Leave multi-core switching, TUN, and complex routing rules unchanged for now.

03 Connect: Select an Active Node

Return to the node list and choose an entry your service provider identifies as available, with all protocol settings imported. You don’t need to test every node in a row for your first connection, and a node’s name alone doesn’t indicate its quality. A list test only reflects the method used; it can’t replace testing access from the app you intend to use. If your subscription includes multiple protocols, start with the imported defaults. For the difference between protocols and transports, see the Protocols at a Glance guide.

v2rayN: Set the Active Server and Check the Log

Right-click the node and select Set as active server, or a similarly named option. Some versions also let you double-click a node. Check that the selected marker or status bar points to the right entry. v2rayN typically generates a running configuration and starts or restarts the core when the active server changes, so there may not be a prominent Connect button. Check the log and current server status rather than looking for the same controls as on Android.

Open the log and look for errors such as a configuration read failure, a port already in use, insufficient permissions, or a core process that has exited. Once startup errors are resolved, confirm that the system proxy is still set to automatic configuration. Switching nodes can interrupt existing connections, so reopen a webpage or send a new request to test; don’t rely on a page that was already loaded. You don’t need to enable Allow connections from the local network here; a browser on the same device can usually use the loopback address.

v2rayNG: Select a Node and Approve VPN Access

Tap the node you want to use and make sure its selection marker changes, then tap Connect on the main screen. The first time you connect, Android will show a VPN connection request. Confirm that it’s from the v2rayNG app you’re using, then approve it. A changed button state and the Android VPN indicator show that local traffic handling has started; test website access in the next step to check whether the remote node works.

If another app is using the system VPN, disconnect it before starting v2rayNG. Standard VPN services usually can’t take over the same Android user’s traffic at the same time. Switching back and forth can cause repeated disconnects. If the connection stops shortly after you return to your browser, check Android’s battery and background activity restrictions and allow the client to keep running. Don’t change every battery setting up front; address only restrictions that are actually interrupting the connection.

When a connection fails, first note where the error occurs. If the core won’t start, check local ports or permissions. If it starts but requests time out, check the current network and node availability. If the log says a configuration field isn’t supported, check compatibility between the selected core and the node protocol. Don’t change ports, routing, DNS, and protocol settings all at once; even if that fixes the issue, you won’t know why. For specific errors, see Troubleshooting.

Once the active node is correct, the core runs without repeated errors, and the system proxy or VPN entry point is enabled, the connection is ready to test. Next, use a real app to verify the request path.

04 Verify the Connection: Compare App Results and Logs

In the browser you plan to use, open a target website and then a regular accessible site for comparison. Don’t just refresh an existing tab: caching, reused connections, or background preloading can skew the result. Open a new window to make fresh requests while checking the client log. If the page loads and the log shows the corresponding request, that request entered the client. To confirm whether it used a remote node, check the matched route and exit information.

Desktop: Test the Local SOCKS Entry Separately

If your browser can’t open the site, use a command to check the client connection separately from the browser’s system proxy. Find the SOCKS listening port in the client settings. The example below uses 127.0.0.1:10808; replace the port if yours is different. The socks5h option sends the destination hostname to the proxy for resolution, which is useful for testing this specific request path. curl must be installed in your terminal; the command doesn’t depend on whether your browser follows the system proxy.

curl -x socks5h://127.0.0.1:10808 -I https://www.example.com

An HTTP response header means the explicit SOCKS request received a response from that destination. It doesn’t prove that every app or website works, or that the current route uses a remote exit. If you can’t connect to the local address, first check that the client is still running and that the port matches. On Linux, you can also check which ports are listening, then review the client log for startup errors.

ss -tlnp

Look for the port the client is actually using in the output. Process details may be restricted by permissions, so a missing process name doesn’t mean the port isn’t listening. If the command works but your browser doesn’t, check that the system proxy was applied and that the browser isn’t using a separate proxy extension or network configuration. Some terminal apps don’t follow the desktop system proxy and need to be configured separately, so their failure alone doesn’t prove the client is broken.

Android: Check Whether the Target App Uses the VPN

Keep v2rayNG connected, switch to your browser, and revisit the target website. Then return to the client and check the log. If one app fails while the browser works, check whether per-app proxying is enabled and whether the target app is on the exclusion list. The app may also have its own network restrictions. If all apps fail, try another known-working node. If that makes no difference, check the device’s date and time and your basic network connection, then follow the Troubleshooting steps one at a time instead of reinstalling repeatedly.

Common symptoms point to different parts of the connection path: a failed local port connection usually calls for checking the client status and port; if explicit SOCKS requests work but the browser fails, check the system proxy; if Global works but everyday routing doesn’t, check the rules and DNS resolution; if only some apps fail, check their settings. For more on DNS, see the DNS settings section. Change one setting at a time, send a new request, and note the result before making another change.

When You’re Done: Clear the Proxy, Then Disconnect

Before finishing on desktop, select Clear system proxy, then exit v2rayN. If you manually changed Linux network proxy settings, restore the original method in system settings as well. Closing the main window may only minimize the app to the tray, without stopping it. Conversely, if the core has stopped but the system proxy still points to the local port, apps that follow that setting may lose internet access. On Android, tap Disconnect and confirm that the VPN indicator disappears.

Open a regular website one last time to confirm that internet access works as expected. After the initial setup, keep the verified group, node, and routing combination. For everyday use, start by updating the subscription and selecting the active node. When a new issue comes up, check the relevant step in this four-step process. For rule writing, TUN, or routine maintenance, see the complete user guide; you don’t need to configure every feature before your first connection.