V2Ray System Proxy Not Working: Troubleshoot Browsers and Terminals

System proxy is enabled, but web pages still won’t load? Check browser extensions, system settings, and terminal proxy variables to find where the connection breaks.

At a glance

First, use curl with an explicitly specified proxy to verify the local entry point and outbound connection. Then check whether your browser uses system settings and whether your terminal inherits proxy variables. The examples focus on v2rayN on Windows, with additional macOS and Linux terminal commands. Useful if your browser works but the terminal doesn’t, traffic bypasses the proxy despite system proxy being enabled, or pages stop loading after you quit the client.

1. Understand the system proxy, local listener, and proxy route

When v2rayN shows “Set system proxy automatically,” it means the client is set to write system proxy settings. It doesn’t prove that every app uses those settings or that the node is connected. v2rayN manages configuration; the active V2Ray or Xray core handles the actual connection. Check separately whether an app reaches the local port and whether the core successfully connects outbound. This avoids repeatedly updating subscriptions without addressing the actual problem.

App request Proxy selection Local listener Routing rules Destination connection

The system proxy setting doesn’t route all traffic from your computer. A browser may use system settings, or its own settings or an extension may override them. Command-line tools often have their own options and environment variables. Even after a request reaches the core, routing rules may send it through a direct outbound route. A connection appearing in local logs doesn’t necessarily mean it went out through the proxy.

2. Check the 10808 listener, then test with an explicit proxy

This example uses 127.0.0.1:10808 as a local mixed-protocol listener. It isn’t a fixed value for every installation. In v2rayN, go to “Settings” → “Parameter settings” and look for “Local mixed port.” In some versions, it’s under the “Core: Basic settings” tab. If the interface lists separate HTTP and SOCKS ports, use the actual HTTP port for the HTTP test below; don’t assume the mixed-port example applies.

10808
Example mixed port used in this guide
10 seconds
Connection timeout limit
30 seconds
Maximum duration for one request

Run these two commands in Windows PowerShell. The first checks the listening process. The second bypasses system proxy discovery and tells curl to connect directly to the local HTTP proxy. Use curl.exe to avoid older versions of Windows PowerShell interpreting curl as an alias for another command. Put -q first to skip curl’s default configuration file.

Get-NetTCPConnection -State Listen -LocalPort 10808 |
  Select-Object LocalAddress, LocalPort, OwningProcess

curl.exe -q --proxy http://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 30 --head https://example.com/

example.com is a generic HTTPS connectivity target, not necessarily the site you’re troubleshooting. When retesting, use the full URL that’s failing and keep the target the same across tests. If the target doesn’t support HEAD requests, remove --head; on Windows, add --output NUL to discard the response body. Don’t judge whether the proxy works solely by whether a particular site is directly reachable on your current network.

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

Cause and fix: curl couldn’t connect to the specified local endpoint. Check that the core is running, the port matches, and the listener includes the IPv4 loopback address. Then retry using the actual port.

curl: (28) Operation timed out

Cause and fix: The request timed out. This message alone doesn’t tell you whether the delay was local or remote. Temporarily add --verbose to inspect the connection steps and compare the timed-out destination with the core logs.

curl: (60) SSL peer certificate or SSH remote key was not OK

Cause and fix: Certificate verification failed. Check the system clock, the destination certificate, and any HTTPS inspection policies on the network. Don’t disable certificate verification as a substitute for fixing the problem.

What a successful explicit proxy test tells you

Receiving the destination site’s final HTTP response means this request made it through the specified endpoint. Seeing only 200 Connection established isn’t enough; it means only that the HTTP CONNECT tunnel was allowed. If you receive a 403 or 429, check the site’s access policies rather than immediately assuming the port has failed.

3. Browser won’t connect: rule out extensions, system settings, and PAC

If the explicit proxy test succeeds but the browser still reports ERR_PROXY_CONNECTION_FAILED, first check which endpoint the browser is actually using. Don’t treat an incognito window as a reliable extension-free test: some extensions can run in incognito mode, and proxy settings may be controlled by organizational policies. Explicitly disable proxy extensions, then fully quit and reopen the browser.

  1. Pause proxy extensions

    In Chrome, open “Extensions” → “Manage extensions”; in Edge, open “Extensions” → “Manage extensions.” Pause any extension that changes proxy settings. If you need to keep an extension, note its current mode and port so you can test it separately later.

  2. Rewrite the system proxy settings

    Right-click the v2rayN tray icon. Under “System proxy,” select “Clear system proxy,” then “Set system proxy automatically.” Keep the client running, then check the values actually written to the system instead of relying only on the tray menu’s selected state.

  3. Check the address and port

    In Windows 11, open “Settings” → “Network & internet” → “Proxy.” Under “Manual proxy setup,” check “Use a proxy server.” The local endpoint for automatic system proxy configuration should match the client’s actual listening address and port, for example 127.0.0.1 and 10808.

  4. Check for script conflicts

    On the same page, check “Use setup script.” If an old PAC URL is configured, note where it came from. On a personal device that isn’t managed by an organization, temporarily turn off the script and use only one proxy selection method. On a work device, confirm the management requirements first so you don’t override organizational settings.

  5. Check browser-specific settings

    In Firefox, open “Settings” → “General” → “Network Settings” → “Settings,” select “Use system proxy settings,” and test again. If you choose manual configuration, check the HTTP proxy, port, and proxy option for HTTPS requests. Don’t assume these settings update automatically with the system proxy.

“Set system proxy automatically” and “Use setup script” aren’t the same thing. The first usually has the client set a local proxy endpoint; the second tells the browser to read a PAC script that determines whether each destination uses the proxy or connects directly. If the PAC rules omit a domain, only that domain may fail. Check the script’s result and cache rather than changing subscription URLs and local ports at the same time.

4. Terminal won’t connect: check environment variables and tool-specific options

There’s no contradiction if your browser loads pages but PowerShell or another terminal times out. The terminal is just the shell that launches a program; whether that program uses system proxy settings depends on its implementation. Environment variables are usually inherited when a process starts. Setting a variable in one terminal window won’t update another window that’s already open or change the browser’s system proxy settings.

First, list the proxy variables in PowerShell, then set an HTTP proxy for the current session. HTTPS_PROXY specifies which proxy to use for HTTPS destinations; it doesn’t mean the local proxy address must start with https://. For a typical local HTTP CONNECT endpoint, continue to use http://127.0.0.1:10808.

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"

curl.exe -q --connect-timeout 10 --max-time 30 --head https://example.com/

Windows environment variable names are case-insensitive; on macOS and Linux, case can matter. For security reasons, curl doesn’t use uppercase HTTP_PROXY as an HTTP proxy variable, so these cross-platform examples use lowercase names. Other command-line tools may handle variables differently, so don’t assume curl’s behavior applies to every program.

# macOS / Linux: affects only the current shell and processes started from it
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 -q --connect-timeout 10 --max-time 30 --head https://example.com/
Configuration sourceCommon symptomsWhat to check
Command-line optionsOnly one command uses the wrong portCheck the startup script for --proxy or tool-specific proxy options.
Proxy environment variablesNew and existing terminals behave differentlyRead the variables in the affected window and confirm it didn’t inherit an old value.
Bypass listSome domains always connect directlyCheck no_proxy; in curl, an asterisk * bypasses the proxy for everything.
Tool configuration filecurl works, but another tool failsCheck the tool’s own settings and precedence; don’t assume it supports the same variables.
Isolated environmentHost works, but container or subsystem failsCheck what the loopback address refers to inside the environment, whether the host is reachable, and how the firewall is configured.

If a command runs in a container, virtual machine, or WSL with a different network mode, 127.0.0.1 may point to that environment instead of the desktop host. First check whether the host endpoint is reachable, then decide whether the listening address needs to change. Don’t expose the proxy on every network interface just to save time. If cross-environment access is necessary, restrict source addresses and check the firewall rules.

5. Distinguish HTTP, SOCKS, and DNS failures

A local mixed-protocol endpoint can usually accept both HTTP and SOCKS requests, but older configurations may use two separate ports. Sending HTTP CONNECT to a SOCKS-only port may result in a handshake failure or empty response. This is a local inbound protocol mismatch, not an issue with the VMess or VLESS node protocol. Check the local inbound protocol before investigating the remote node configuration.

# Test on the actual SOCKS port; resolve the destination domain through the proxy
curl -q --proxy socks5h://127.0.0.1:10808 --noproxy "localhost,127.0.0.1" --connect-timeout 10 --max-time 30 --head https://example.com/

When running the command above in Windows, replace curl with curl.exe. For curl, socks5:// usually resolves the destination domain locally, while socks5h:// sends the domain to the SOCKS proxy for resolution. Different results can point to a difference in where DNS resolution happens, but don’t prove which DNS server should be changed.

curl: (5) Could not resolve proxy

Cause and fix: The proxy server’s own address couldn’t be resolved. Check the proxy URL for typos and look for an outdated hostname in the variables. For local testing, use 127.0.0.1 to avoid relying on proxy address resolution.

curl: (6) Could not resolve host

Cause and fix: The destination hostname couldn’t be resolved on the current request path. Check the destination spelling, bypass list, and whether resolution happens locally. Compare the SOCKS DNS modes and check the core logs to narrow it down.

6. Restore settings and keep reproducible troubleshooting results

Once you’ve identified the problem, undo temporary changes so test settings don’t cause the next issue. If you set variables temporarily in PowerShell, you can remove them from the current window. If you set persistent variables through system settings, remove them there too, then restart affected apps. The command below clears four proxy variables from the current PowerShell session only; it doesn’t change persistent user or system settings.

Remove-Item Env:http_proxy, Env:https_proxy, Env:all_proxy, Env:no_proxy -ErrorAction SilentlyContinue

In the current macOS or Linux shell, run unset http_proxy https_proxy all_proxy no_proxy. If you set uppercase variables too, check and remove those as well. If the variables are defined in a shell startup file, running unset in the current window won’t prevent them from being loaded again next time.

  1. Before quitting v2rayN, select “Clear system proxy” under “System proxy” if needed, then check whether the browser can connect directly as expected.
  2. Restore any extensions or TUN you need, one at a time. Retest the same destination after each change.
  3. Record the test time, actual listening port, full error code, browser result, and explicit curl result. Don’t reduce every symptom to “no internet.”
  4. If you need help troubleshooting, share only the relevant log excerpts. Hide subscription URLs, node credentials, and request links containing tokens.

Use the same destination to pinpoint the failure

If the explicit proxy test fails, check the listener and outbound route. If it works but the browser fails, check proxy selection. If the browser works but the terminal fails, check variables and tool configuration. These three comparisons narrow down the problem more effectively than repeatedly reinstalling the client.

Download v2rayNChoose your system and installer