Oct 19, 2026 · Troubleshooting · About 10 min

How to Fix the v2rayN System Proxy Not Working: Check Browser Extensions and Terminal Environment Variables

Troubleshoot browser proxy extensions and stale PAC settings, then check http_proxy, https_proxy, and local listening ports to find why the system proxy isn’t working.

At a glance

Use this guide if v2rayN is running but your browser can’t open a site, terminal requests still connect directly, or only some apps can connect. First verify the local proxy endpoint with an explicit proxy request, then check browser proxy controls, system PAC settings, and terminal environment variables. The examples focus on Windows, with Bash and Zsh commands included. Replace the sample port with the one your client is actually listening on.

1. Distinguish System Proxy, App Proxy Settings, and Routing

v2rayN’s “Set system proxy” option does not force all network traffic from your computer through the proxy. It changes the system proxy settings, and only apps that use those settings will connect through the local proxy endpoint. Browsers usually do, but extensions, browser policies, and separate proxy settings can override them. Whether command-line tools use the system proxy depends on how each tool is implemented.

App proxy settings Local listening endpoint Core routing rules Destination connection

Routing comes after the app connects to the proxy. Even in Global mode, requests that never reach the local listening port won’t be intercepted. Conversely, requests that do reach the core may still be routed directly by the active rules. First check whether the request reached the core, then identify its outbound route. Don’t confuse these two layers.

2. Verify the Local Proxy Endpoint on a Specific Port

Check the status bar at the bottom of the v2rayN main window for the local port, then go to “Settings” → “Parameters” to confirm the listening port and protocol. Depending on the version, the endpoint may be SOCKS, HTTP, or mixed. Don’t assume a port number from another guide matches your setup. The examples below assume 127.0.0.1:10808 is configured to accept HTTP proxy connections. If the port only supports SOCKS, use the SOCKS command below.

10808
Sample local port used in this guide; not a default
5 sec
Connection test timeout
20 sec
Maximum time per request

In Windows PowerShell, check that the port is reachable, then use curl.exe to specify the proxy explicitly. Using curl.exe avoids issues in some PowerShell environments where curl is an alias for a different command. The test URL is https://example.com/; it checks the request path and doesn’t guarantee access to any particular site.

Test-NetConnection 127.0.0.1 -Port 10808

curl.exe --noproxy "" --proxy http://127.0.0.1:10808 --connect-timeout 5 --max-time 20 -I -v https://example.com/

--noproxy "" clears the bypass list for this command so an existing NO_PROXY value won’t interfere with the test. If the endpoint only supports SOCKS5, use this command instead. socks5h sends the destination hostname to the proxy for resolution rather than having curl resolve it locally.

curl.exe --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 20 -I -v https://example.com/

Takeaway: Verify the endpoint before checking automatic proxy settings

Once an explicit proxy request gets an HTTP response from the destination, check the browser and terminal’s automatic proxy settings. Seeing only 200 Connection established isn’t enough: it confirms the tunnel was established, but you should also check the TLS handshake and the destination’s response. A 403 response from the destination doesn’t mean the local port is broken.

3. Check Browser Extensions and Stale PAC Settings

The steps below use Chrome, Edge, and Firefox on Windows 11. Note your current proxy settings first, especially any script URL used on a work network. On managed devices, follow your administrator’s instructions rather than deleting existing settings. Incognito mode isn’t a reliable way to isolate extensions: some extensions can run in incognito, and system settings still apply.

  1. Disable proxy extensions

    In Chrome, open “Extensions” → “Manage extensions”; in Edge, open “Extensions” → “Manage extensions.” Temporarily disable extensions that control proxies, automatic switching rules, or network requests. Close all browser windows, restart the browser, then test the same URL.

  2. Check the system proxy

    In Windows, open “Settings” → “Network & internet” → “Proxy.” Under “Manual proxy setup,” check that the address and port match the local HTTP or mixed listening endpoint. For an address-only field, enter 127.0.0.1, not a full proxy URL.

  3. Check script settings

    On the same page, check “Use setup script.” On a personal device, if an old PAC URL is still enabled, note it and temporarily turn it off, leaving only the proxy method you’re testing. Don’t change the script, manual port, and routing preset at the same time, or you won’t know which change fixed the problem.

  4. Check separate proxy settings

    In Firefox, open “Settings” → “General” → “Network Settings” → “Settings.” To use the system settings configured by v2rayN, select “Use system proxy settings.” If you keep a manual proxy, verify each port. Don’t enter a SOCKS-only port in the HTTP proxy field.

  5. Reapply the settings

    After confirming that the explicit local proxy test works, open “System proxy” from the v2rayN tray menu, select “Clear system proxy,” then select “Set system proxy.” Reopen the Windows proxy page and check that the address and port changed as expected.

PAC scripts choose a proxy based on conditions such as the URL or domain, and may send some requests directly. So the presence of a script URL doesn’t prove that every request uses v2rayN. If the browser says its settings are managed by your organization, or they revert after you turn them off, check management policies and other running proxy tools instead of repeatedly toggling the system proxy.

4. Check Terminal Variables, Protocols, and Process Inheritance

A browser that can connect doesn’t mean the terminal will use the proxy automatically. For tools such as curl, first test with the --proxy option from the previous section, then set environment variables for the current terminal session. https_proxy means “use this proxy for HTTPS destinations”; its value can still be http://127.0.0.1:10808. The client uses the HTTP proxy’s CONNECT method to establish a TLS tunnel to the destination, so the proxy URL itself doesn’t need to use HTTPS.

PowerShell: Check First, Then Set Variables for the Current Session

Get-ChildItem Env: | Where-Object Name -Match '^(http_proxy|https_proxy|all_proxy|no_proxy)$'

$env:http_proxy = 'http://127.0.0.1:10808'
$env:https_proxy = 'http://127.0.0.1:10808'
$env:no_proxy = 'localhost,127.0.0.1,::1'
Remove-Item Env:all_proxy -ErrorAction SilentlyContinue

curl.exe --connect-timeout 5 --max-time 20 -I -v https://example.com/

These assignments affect only the current PowerShell process and any child processes started afterward. They won’t update terminals, editors, or background tasks that are already running. Windows environment variable names are case-insensitive; on other systems, check both uppercase and lowercase versions. Don’t post proxy variable output containing credentials in a public forum.

Bash / Zsh: Clear Conflicts and Use Lowercase Variables

env | grep -iE '^(http|https|all|no)_proxy='

unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY all_proxy
export http_proxy='http://127.0.0.1:10808'
export https_proxy='http://127.0.0.1:10808'
export no_proxy='localhost,127.0.0.1,::1'

curl --connect-timeout 5 --max-time 20 -I -v https://example.com/

curl handles the case of http_proxy specially, so lowercase variables are preferable for cross-platform troubleshooting. Some tools support ALL_PROXY as a general proxy variable, but don’t assume every tool reads it. NO_PROXY bypasses the proxy. If it includes the destination domain—or is set to *—requests may go direct even when the proxy variables are set. Matching syntax varies between tools.

When testing is complete, remove the variables set in this session with Remove-Item Env:http_proxy,Env:https_proxy,Env:no_proxy -ErrorAction SilentlyContinue in PowerShell, or unset http_proxy https_proxy no_proxy in Bash / Zsh. If the variables had values before testing, restore those values instead of deleting them.

5. Identify the Failure by Its Exact Error

Keep the full command-line error and the time it occurred, then compare it with the corresponding request in the v2rayN logs. The examples below show common curl error messages; ports, destination addresses, and timeout values vary by setup. Error codes can narrow down the cause, but you’ll still need to compare them with an explicit proxy test. Don’t rely on a generic “connection failed” message alone.

Error: curl: (7) Failed to connect to 127.0.0.1 port 10808

Cause: curl couldn’t connect to the local endpoint. The core may not be running, the listening port may be wrong, or a local policy may be blocking the connection.

Fix: Check the actual listening port and core logs, then run Test-NetConnection. Verify which process is listening; don’t disable the entire firewall.

Error: curl: (5) Could not resolve proxy

Cause: The proxy server name couldn’t be resolved. Common causes include a typo in the proxy address or a malformed hostname in an environment variable.

Fix: For a local test, specify the confirmed loopback address and port explicitly. Check the variable values, then retry the same command.

Error: curl: (28) Connection timed out

Cause: The connection or transfer exceeded its time limit. A timeout alone can’t tell you whether the problem is the local endpoint, the remote outbound connection, or the destination site.

Fix: Use the -v output to see whether curl connected to the local port, then check the core logs from the same time for outbound connections and the destination’s response.

Error: curl: (60) SSL certificate problem

Cause: Certificate verification failed. Possible causes include the system clock, the certificate chain, or HTTPS inspection on the network. This doesn’t mean the request failed to enter the proxy.

Fix: Check the system date, certificate issuer, and system trust settings. Don’t make disabling certificate verification a permanent fix.

If the logs show that a direct routing rule matched the request, check the routing rules instead of reinstalling the browser. Protocols such as VMess and VLESS describe the proxy’s outbound connection; local apps usually connect through an HTTP or SOCKS endpoint. Putting a node protocol name in http_proxy won’t create a working local proxy connection.

6. Compare Test Results and Change One Layer at a Time

Change only one setting at a time and retest the same destination. Save three results: curl with an explicit proxy, curl using only environment variables, and browser access with proxy extensions disabled. This makes it easier to locate the issue and repeat the checks after updating the client, changing ports, or switching networks.

Takeaway: Verify the Same Request at Each Connection Layer

The system proxy button only indicates that a settings change was made; it doesn’t prove that a destination request used the proxy. Compare client logs, curl’s verbose output, and the app’s proxy settings to identify the failing layer instead of repeatedly switching Global mode.

If you need further help, note your operating system and v2rayN versions, listening protocol and port, failed command, and error time. Before sharing logs, remove subscription URLs, access tokens, node credentials, and personal destination addresses. Updating a subscription changes connection settings; it won’t add environment variables to the terminal or disable a browser extension’s control over proxy settings.

v2rayN / v2rayNG Downloads