First-time setup · Four steps

V2Ray Setup Guide

Import a subscription → Choose a proxy mode → Connect → Verify traffic. Already have a working subscription? Follow this roughly 10-minute guide to set up your client for the first time.

Before you begin, choose a client on the downloads page and install it. On desktop, move the program to a permanent, writable location rather than launching it from an archive preview. On Android, open the app once after installation and make sure you can reach the main screen. An empty server list is normal at this point; installing a client does not automatically provide a remote service.

Get a complete subscription URL from your provider and make sure your service is still active. A subscription URL is different from an account sign-in page; look for an option such as “Copy subscription” in your account. The URL may contain access credentials, so don't share it in public chats, screenshots, or online conversion tools. If a step doesn't work as expected, stop and troubleshoot that step first. There's no need to change protocols, DNS, and routing settings all at once.

Step 01 · Subscription and server list

Import a Subscription

The goal is to populate the server list with actual entries, not just save a URL. A subscription is a provider-maintained collection of servers. The client reads the URL and turns its contents into selectable entries. If you only have a single share link, use a feature such as “Import from clipboard” rather than pasting it into the subscription URL field.

v2rayN: Add a Group, Then Update It

Open the subscription menu in the main window and choose “Subscription Group Settings” or a similarly named option. Add a group, enter a recognizable provider name as the remark, and paste the complete subscription URL into the address field. Check for stray spaces, line breaks, or text added by your messaging app, then save. For your first import, leave other options at their defaults and skip filter keywords so you don't accidentally hide every entry.

Return to the main window and update the group you just added from the subscription menu. Some versions offer both a regular update and an update through the proxy. If you don't have a working connection yet, try a regular update first. If the URL is only reachable through an existing proxy, update it using a connection you've already verified; don't repeatedly try to update it through a connection that hasn't been established. Wait for the operation to finish, check the notification or logs, then open the group and confirm that server names, addresses, or other entries appear.

v2rayNG: Save the URL, Then Update from the Main Screen

Open the main-screen menu and find “Subscription Group Settings.” Tap Add to create a group, enter a remark and subscription URL, then save. Return to the main screen and choose “Update subscription” from the menu. If you can select a group, update only the one you just added. Saving a group and fetching its subscription are separate actions: an empty list after saving doesn't necessarily mean the import failed. First check whether you have run the update.

If the list is still empty after updating, identify where the error occurred. A timeout usually calls for checking URL reachability and your current network. If the response can't be recognized, ask your provider whether you copied a subscription format supported by this client. If you see an authorization error or an empty response, check the service status and whether the URL has been reset. Never paste a complete URL containing credentials into a search engine or third-party testing tool.

Before moving on: Confirm that the selected group contains at least one entry, and that filters or the wrong group aren't making the list appear empty. If the update failed, keep any existing working entries; don't start troubleshooting by choosing “Delete all servers.” A server name is only a label and doesn't prove that the server can connect. Proxy mode and real-world testing come next.

Step 02 · Traffic capture and routing

Choose a Proxy Mode

After importing servers, separate two questions: how an app's requests reach the client, and which outbound route the client uses afterward. System proxy, VPN, and TUN address the first question; rule-based routing, global proxy, and direct routing address the second. Confusing the two can lead to a situation where global proxy is selected but an app still bypasses the proxy.

v2rayN: Start with System Proxy for Your First Test

Find “System Proxy” in the status area at the bottom of the main window or in the system tray menu. Choose “Set system proxy” or a similarly named option for automatic configuration. This tells apps that follow system proxy settings to send requests to the client's local listening port; it does not automatically capture traffic from every program. For your first test, use a regular browser. Don't also enable TUN, set a manual browser proxy, or turn on several proxy extensions, or it will be hard to tell which setting is taking effect.

Next, check the routing preset and choose the client's rule-based option. Depending on the version, it may be labeled “Bypass LAN and mainland China” or something similar; the exact rules depend on the preset. For everyday use, keep a standard preset rather than rewriting routing rules just to get your first connection working. If the destination you want to test is routed directly by the preset, you can temporarily switch to global proxy, run the test, then restore your original setting and note the change.

“Global proxy” usually means that traffic which has already reached the client is sent through the proxy outbound. It doesn't mean every app is automatically captured by the system proxy. Some programs manage their own network connections and may need a separate app proxy setting or another traffic-capture method. Get one browser that follows system settings working first, then expand coverage if needed. This keeps troubleshooting focused.

v2rayNG: Check VPN Mode and Per-App Settings

On the settings screen, confirm that the client is using VPN mode. Android creates a local VPN interface, then passes eligible app traffic to the client. A system permission prompt on first connection is expected; you don't need a separate remote VPN account. Start with the rule-based routing preset and avoid changing DNS, sniffing, and custom rules at the same time.

If you've enabled per-app proxying before, open the app list and check that your test browser is included. Depending on the interface, the option may mean “proxy only selected apps” or “bypass selected apps”—the checkboxes have opposite effects, so don't judge by the checkmark alone. For an initial test, turn off per-app restrictions and narrow the scope after the basic connection works. Other apps using Android's VPN interface may also replace the current connection, so make sure only one traffic-capture method is active.

Before moving on: Confirm that you've chosen a traffic-capture method and a routing preset. The page doesn't need to load yet; the active server and connection service haven't been verified. For a deeper look at inbounds, outbounds, and rule priority, see the Configuration Reference. For now, stick with the client's built-in preset.

Step 03 · Active server and service status

Start the Connection

Return to the server list and choose an entry to test. Having servers in the list is not the same as actively using one; make sure the correct entry is selected as the active server. For your first test, choose one entry with complete details. Don't switch between several servers or enable automatic selection at the same time. A fixed test server makes it easier to match logs with browsing results.

v2rayN: Set the Active Server and Check Core Startup

Right-click a server row and choose “Set as active server” or a similarly named option. Some versions also let you switch servers by double-clicking. Use the active-server indicator in the interface rather than relying on the row's selected color. After switching, check the main-window logs. The client usually reloads the current configuration and starts the relevant core; if your version has a separate Start button, use it to start the service.

Once the logs show no startup errors, check that system proxy is still set to automatic configuration in the system tray. The tray icon and window status describe the local service; on their own, they don't prove that the remote server is reachable. If a local listening port is already in use, close any other program that may be using it or change the port in the client. If you manually configured a browser proxy, update its port too.

If you see a missing core file, configuration load failure, or a warning that the system blocked the program, first check that the archive was fully extracted, the program folder is writable, and what the system's security alert actually says. A basic system-proxy test usually doesn't require elevated permissions. Don't use repeated administrator launches as a substitute for diagnosing the error, and don't assemble runtime files from unknown sources.

v2rayNG: Select an Entry and Approve the System VPN Prompt

Tap the server entry you want to use and make sure it appears selected, then tap Connect on the main screen. On first launch, Android displays a system prompt to establish a VPN connection. Confirm only after checking that the requesting app is the v2rayNG you just installed. If you cancel, the app won't have permission to capture network traffic; tap Connect again and approve the request.

After the connection starts, the button usually changes to Stop, and Android's status bar or notification area shows a VPN indicator. Open the client logs and check that the service hasn't immediately stopped or started reporting errors. If it stops as soon as you tap Connect, check the startup error before switching servers. If the service stays running but requests time out, investigate the remote connection, routing, and DNS separately.

During testing, keep the client open or let it run normally in the background; don't immediately enable strict battery restrictions. If it disconnects when the screen locks or stops when you switch apps, check the system's background activity and battery optimization settings. There's no need to disable every battery-saving option when the client is working normally.

Before moving on: Make sure the active server is clear, the local service is still running, and system proxy or VPN capture is working as expected. Test in a browser only after all three are in place. A running status is just the starting point; next, confirm that the request reaches the client and identify which outbound it uses.

Step 04 · Request and outbound verification

Verify That It's Working

Don't rely on a “connected” icon alone. A real test should provide a clear chain of evidence: the browser sends a request, the client receives it, routing selects the expected outbound, and the page loads. Test one site that should use the proxy under your current rules and one everyday site that should connect directly. Don't draw conclusions from a single page.

Compare Browser Activity with the Logs

Open a new browser tab and visit a destination expected to use the proxy. Don't just refresh a page that's been open for a long time; existing connections, cached content, and background requests can skew the results. Temporarily disable extensions that change browser proxy settings and make sure the browser uses the system settings. On Android, check again that per-app rules aren't excluding the browser.

Open the client's logs or connection details and find the destination domain and outbound used for this request. Some versions log only warnings and errors by default, not each request. If so, temporarily switch to the info log level and make another request, then restore your usual level. With the default tags, proxy traffic may show proxy and direct traffic may show direct. Custom configurations can use different tags, so check against your current setup.

The route is working as expected when the page loads and the logs show the expected outbound. To check your exit IP, use a trusted IP lookup site and compare the results before and after connecting. Don't treat a site's displayed location as definitive: rule-based routing may send the lookup site directly, and browser caching, geolocation methods, and different network exits can affect what it reports.

Troubleshoot in Order: Traffic Capture, Routing, Remote Connection

If the browser sends a request but there's no corresponding entry in the logs, check how traffic enters the client: is system proxy enabled on desktop, is a browser proxy extension overriding it, is the Android VPN still running, and do per-app settings exclude the browser? Don't start by changing the server protocol; the request may not have reached the client at all.

If the request appears in the logs but uses an unexpected direct or blocked outbound, check the current routing preset. Temporarily switch to global proxy and retry the same destination to see whether routing is the issue. If global proxy works but rule-based routing doesn't, review the routing rules in the advanced documentation instead of masking the problem by switching modes indefinitely. Restore your usual setup after testing.

If the request is sent through the proxy outbound but keeps timing out, try another known-working entry from the same subscription, then check your service's expiration date, device clock, and current network. For DNS errors, determine whether the server address or the destination site failed to resolve; don't replace every DNS setting at once. A single site may also be having issues, so test another destination before drawing conclusions.

Keep a Working Setup and Disconnect Cleanly

Once testing succeeds, note the current group, active server, and routing preset so you can restore the same setup. When updating a subscription or changing settings, change one thing at a time and run a quick test again. When you're done, clear the system proxy before quitting v2rayN so your browser doesn't keep sending requests to a stopped local port. In v2rayNG, tap Stop and confirm that the Android VPN indicator disappears.

Your subscription, traffic-capture method, service status, and real browser requests now work together. Refer to the Configuration Reference if you later need app-specific traffic capture, complex domain routing, or custom configuration. To repeat the setup, return to the subscription import steps; there's no need to reinstall the client each time.