Use this guide when v2rayN is set to use the system proxy, but your browser cannot reach a site or your terminal still connects directly. First test the local proxy and node with an explicit proxy request, then check browser settings, terminal environment variables, and routing logs separately. The examples use 127.0.0.1:10808 as a local HTTP or mixed-protocol proxy. Replace it with the address and port your client actually listens on before running any commands.
1. Understand System Proxy, App Proxy, and Routing
v2rayN’s “Set system proxy” option mainly updates the proxy settings that applications can read from the operating system. It does not take over every network connection on your device. Browsers usually read these settings, but command-line tools, background services, and some apps with their own networking stack may ignore them entirely. So if the browser works but the terminal fails, first consider how each app connects—not a failed node.
The system proxy affects only the first step in this chain. Once a request reaches the Xray or V2Ray core, routing rules determine whether it goes direct, through a proxy, or gets blocked. Even if a browser connects to the local port, a site matched by a direct-connection rule will still use your local network. An unchanged public IP alone does not prove that the system proxy is broken.
| Setting | Applies to | Check first |
|---|---|---|
| Operating system proxy | Apps that read system settings | Address, port, bypass list, PAC |
| Browser-specific proxy | That browser or profile | Extensions, manual proxy, managed policies |
| Terminal environment variables | Current process and child processes that support these variables | Variable names, protocol, process inheritance |
| Core routing | Requests that have reached the core | Matching rules and selected outbound |
TUN is a separate traffic-capture method, not another name for the system proxy. To keep variables to a minimum, this guide assumes TUN is disabled. If your network depends on TUN, note the current settings first, then isolate-test only when a connection interruption is acceptable. Don’t change TUN, DNS, and routing at the same time, or it will be difficult to tell which change mattered.
2. Check the Local Port with an Explicit Proxy Request
In v2rayN, open “Settings” → “Parameter Settings” and check the local listener options. Then review the listener details in the core startup log. Option group names may vary between versions, so use the interface and logs as your source of truth. The numbers below are examples for troubleshooting, not universal defaults. If a port provides SOCKS only, it cannot be used as an HTTP proxy.
In Windows PowerShell, check the listening port first, then run a request with the proxy specified explicitly. Use curl.exe to avoid PowerShell environments where the curl alias runs a different tool. On macOS or Linux, replace curl.exe in the second command below with curl.
Get-NetTCPConnection -State Listen -LocalPort 10808
curl.exe --noproxy "" --proxy http://127.0.0.1:10808 --connect-timeout 5 --max-time 15 -v https://example.com/ -o NUL
--noproxy "" clears the bypass list for this test so an existing NO_PROXY setting won’t interfere. On macOS and Linux, change the output redirection target to /dev/null. The example domain is for checking connectivity; also retest the site that actually fails. Success with one site does not mean every route or destination port is working.
- Connection to
127.0.0.1:10808refused: check whether the core is running, the port is correct, and the listener is bound to the expected address. 200 Connection established: the HTTP CONNECT tunnel is up. Check the TLS handshake and final response next.- The destination returns HTTP 200, 301, or 403: an application-level response was received. A 403 means the destination denied access; it does not mean the local proxy failed.
- The local listener is reachable, but the request times out later: check outbound routing, DNS, and the destination connection in the core logs. Don’t keep switching browser proxy settings.
Takeaway: Check the app after an explicit proxy test succeeds
If an explicit proxy request to the same destination works but the browser or terminal’s default request fails, focus on that app’s proxy configuration. Leave the verified node and port unchanged for now.
3. Troubleshoot a Browser That Bypasses the Proxy
Keep v2rayN running with a working node selected. From the tray menu, choose “System Proxy” → “Set system proxy” to apply the settings. Then check what the operating system actually saved instead of relying only on the tray status. Other proxy apps, browser extensions, or organization policies may overwrite the settings afterward.
-
Check system settings
On Windows 11, open “Settings” → “Network & internet” → “Proxy” and check the address and port under “Use a proxy server.” On macOS, open “System Settings” → “Network” → your active connection → “Details” → “Proxies.” Desktop settings vary across Linux distributions; in GNOME, check “Settings” → “Network” → “Network Proxy.”
-
Check the browser’s proxy settings
In Chrome, open “Settings” → “System” → “Open your computer’s proxy settings.” In Firefox, open “Settings” → “General” → “Network Settings” → “Settings” and check whether “Use system proxy settings” is selected. Choosing “No proxy” or setting a manual proxy means Firefox won’t follow the system settings as expected.
-
Temporarily disable proxy extensions
In Chrome, open “Extensions” → “Manage Extensions” and temporarily turn off extensions that control the proxy. Then test with a fresh browser profile. Incognito windows may still inherit policies or run extensions that are allowed in incognito, so they are not a fully isolated test environment.
-
Check bypass rules
Check the system proxy exceptions, the “Do not use proxy” list in the browser’s manual proxy settings, and whether an automatic configuration script is enabled. PAC scripts can direct specific destinations to connect directly. Don’t assume PAC mode proxies every site without checking the rules.
-
Restart and retest
Close all browser windows, quit any background processes, and restart the browser. Visit the same full URL you used for the command-line test, and watch the v2rayN logs. In Chrome, open
chrome://policyin the address bar to check for organization-managed proxy policies. If the device is managed, contact your administrator.
If the browser request never appears in the core logs, check the browser’s proxy settings first. However, missing log entries are meaningful only if access logging is enabled at a suitable log level. If the logs show the destination going direct, the issue is the routing decision, not the system proxy toggle. If the request reaches the proxy outbound and then fails, check the node connection and destination status.
4. Test Terminal Proxy Variables and One-Off Options Separately
There is no universal convention for terminal tools to “follow the system proxy.” For tools that support proxy environment variables, set them in the current terminal session. For tools with a command-line proxy option, an explicit one-off setting is easier to troubleshoot. Variables are passed only to child processes started afterward; already-running editor terminals and background tasks won’t update automatically.
Windows PowerShell: Set variables for the current session
$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"
curl.exe --connect-timeout 5 --max-time 15 -v https://example.com/ -o NUL
Get-ChildItem Env: | Where-Object Name -Match 'proxy'
In HTTPS_PROXY, http:// describes the connection from the terminal to the local proxy—not the protocol used by the destination URL. When accessing an HTTPS site, an HTTP proxy typically creates a tunnel with CONNECT, so don’t change the variable to https://127.0.0.1:10808 just because the destination uses HTTPS. That value may work only if the local listener actually provides a TLS proxy.
macOS and Linux: Watch the variable name’s capitalization
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'
curl --connect-timeout 5 --max-time 15 -v https://example.com/ -o /dev/null
env | grep -i proxy
In case-sensitive environments, curl deliberately reads only lowercase http_proxy for HTTP proxies, while HTTPS proxy variables support the corresponding uppercase and lowercase forms. Other tools may follow different conventions, so check their documentation. If uppercase and lowercase versions of the same variable are both set to different values, remove the conflict before adding anything else.
- A destination domain listed in
NO_PROXYorno_proxybypasses the proxy. Some tools treat*as “bypass everything.” ALL_PROXYcan act as a fallback proxy for some tools, but support varies and it may be overridden by a dedicated variable or command-line option.- If you’ve confirmed a SOCKS listener is available, test it once with
curl --proxy socks5h://127.0.0.1:10808 https://example.com/.socks5hsends destination name resolution to the proxy. - In WSL, containers, and remote terminals,
127.0.0.1refers to that environment—not necessarily the host running v2rayN. Don’t expose the local proxy to your entire LAN just to make it reachable.
If an explicit --proxy works but setting variables does not, check whether the tool supports those variables, whether it has its own proxy settings, and whether the request matches a bypass rule. Windows WinHTTP settings are separate from the desktop system proxy. Don’t change the global WinHTTP configuration just to fix one terminal tool.
5. Pinpoint the Failure from the Actual Error
The error text is more useful for troubleshooting than “the page won’t open.” The examples below show common messages; wording varies by curl version, operating system, and browser language. Note whether the failure happens during the local connection, CONNECT, TLS, or destination response, then change the relevant setting.
curl: (7) Failed to connect to 127.0.0.1 port 10808
Cause and fix: The local proxy listener is not accepting connections. Make sure the v2rayN core is running, then check the actual listening port and process. If another program is using the port, resolve the conflict and update the app’s proxy settings to match.
ERR_PROXY_CONNECTION_FAILED
Cause and fix: The browser can’t connect to the configured proxy. Check the address saved in system settings and extensions, and rule out an old port, incorrect proxy host, or stopped core. First, run an explicit curl test through the same listener.
curl: (5) Could not resolve proxy
Cause and fix: The hostname in the proxy address could not be resolved, or the proxy URL is invalid. Check for extra characters in the environment variable. First try the confirmed working address http://127.0.0.1:10808 to rule out proxy hostname resolution.
curl: (60) SSL certificate problem: unable to get local issuer certificate
Cause and fix: The trust store used by curl couldn’t build the certificate chain; TLS inspection on a managed network may also be involved. Check the system clock, certificate source, and curl’s certificate store configuration. Don’t leave certificate verification disabled as a workaround.
curl: (28) Connection timed out
Cause and fix: The connection or response did not complete within the specified time. This error alone doesn’t identify where the failure occurred. Use -v to find the last successful stage, then check the core logs to distinguish a local listener issue from a node outbound or destination timeout.
If the browser works but the terminal reports a certificate error, don’t replace the node right away. Browsers and command-line tools may use different certificate trust stores. Likewise, if the terminal works but the browser reports a proxy connection failure, compare the local ports they use before concluding that a protocol is unavailable.
6. Restore Settings and Keep a Minimal Troubleshooting Record
Once you’ve found the cause, keep only the settings you need. If your workflow requires proxy environment variables, add them to the relevant shell startup file and check whether they affect local development services. After testing, use the commands below to remove the variables set in this guide. If a variable already had a value before testing, restore it instead of deleting it.
Clear variables from the current session
# Windows PowerShell
Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:NO_PROXY -ErrorAction SilentlyContinue
# macOS、Linux shell
unset http_proxy https_proxy no_proxy
This won’t clear settings saved elsewhere, such as tool-specific proxy settings, variables with different capitalization, shell startup files, or already-running child processes. Re-enable any extensions disabled for the browser test one at a time and retest. If the issue returns after restoring one, you’ve found what was overriding the proxy.
- Record your environment: Operating system, v2rayN version, core type, whether TUN is enabled, and the local listener protocol and port.
- Keep the request consistent: Use the same destination URL and record the results for an explicit proxy request, environment variables, and browser access.
- Trace outbound routing: Keep the routing and error logs for the relevant time, and confirm whether the request went direct or through a proxy.
- Protect sensitive data: Before sharing logs, remove subscription URLs, tokens, node credentials, and internal domain names that aren’t needed.
Takeaway: Use differences in the same request to narrow down the fix
If an explicit proxy request works, check the app’s proxy settings. If the request reaches the core but takes the wrong route, check the routing rules. If the proxy outbound is selected but the connection fails, check the node and network. Change one layer at a time and retest the same URL.