At a glance

A working browser does not mean your terminal is using a proxy. This guide uses v2rayN on Windows to check the actual listening ports, isolate the issue with an explicit proxy request, and fix browser settings and terminal environment variables separately. It’s for cases where websites load but command-line requests time out, or enabling the system proxy makes no difference. You don’t need to reinstall the client or keep switching subscriptions to troubleshoot.

1. System proxy and terminal proxy are separate paths

v2rayN’s system proxy feature writes a local proxy address to the operating system settings for apps that choose to use them. It does not take over every network connection on your device. A browser may use system settings, or have them overridden by an extension or organization policy. Command-line tools may instead read environment variables, their own configuration files, or command-line options.

App proxy settings Local listening port Core routing rules Outbound connection Destination service

In this chain, the system proxy only helps an app find the entry point. Once a request reaches the core, routing rules determine whether it goes direct, through a proxy, or gets blocked. So “the client received the request” does not mean “the request went through a remote node.” A browser may load a site because a direct-connection rule applies; that alone does not prove the node is working.

2. Check ports 10808 and 10809—don’t rely on outdated guides

Some older configurations use 10808 for SOCKS and 10809 for HTTP. Others provide a mixed-protocol listener on 10808 only. The port number does not determine the protocol, and it may change after an upgrade, migration, or manual edit. In v2rayN, check the local listener settings under Settings → Parameter Settings, then confirm the active values in the startup log. Labels may vary slightly between versions.

127.0.0.1
Loopback address used in this guide
10808
Example SOCKS or mixed-protocol listener to verify
10809
Example dedicated HTTP listener to verify

These PowerShell commands only check the two example ports; they do not change your configuration. Replace the ports if yours are different. In the output, OwningProcess is the ID of the listening process. To identify it, run Get-Process -Id process ID. The listener is usually the core process, not necessarily the GUI.

Get-NetTCPConnection -State Listen |
  Where-Object { $_.LocalPort -in 10808,10809 } |
  Select-Object LocalAddress,LocalPort,OwningProcess
ResultWhat it may meanNext step
Neither port is listeningThe core is not running, or it uses different portsCheck the startup log and active settings; don’t change terminal variables yet
Only 10808 is listeningIt may support one protocol or be a mixed-protocol listenerConfirm the inbound protocol, then test with HTTP or SOCKS as appropriate
The listening process is not the current coreAnother program or a leftover process is using the portIdentify the process before taking action; don’t terminate it blindly
Listening only on the IPv6 loopback addressThe address does not match the explicit IPv4 addressCheck the listener address or test with the matching IPv6 loopback address

3. Isolate terminal issues with an explicit proxy request

Skip environment variables for now and specify the proxy address directly in the command. In Windows PowerShell, call curl.exe explicitly to avoid environments where curl is an alias for a different command. First run curl.exe --version to confirm it’s available. The destination below illustrates the test; you can use the same public HTTPS URL you’re troubleshooting in the browser so both tests follow the same route.

# Run only after confirming that 10809 is an HTTP listener
curl.exe -v --connect-timeout 10 --max-time 30 --noproxy "" --proxy http://127.0.0.1:10809 https://example.com/ -o NUL

# Run only after confirming that 10808 supports SOCKS5
curl.exe -v --connect-timeout 10 --max-time 30 --noproxy "" --proxy socks5h://127.0.0.1:10808 https://example.com/ -o NUL

--noproxy "" clears the bypass list for this test, preventing an existing NO_PROXY value from sending the request directly. If the HTTP mixed-protocol listener is actually on 10808, change the first command to use that port instead of copying 10809. socks5h lets the SOCKS proxy resolve the destination hostname; with socks5, the local machine usually resolves it first. The two use different DNS paths.

  1. Check the local connection first. Verbose output should show a connection to the specified loopback address and port—not directly to the public destination.
  2. Then check proxy negotiation. An HTTP proxy typically negotiates a CONNECT tunnel for HTTPS. With SOCKS, look for the corresponding connection handshake.
  3. Finally, check the response. An HTTP status code means a response was received from the server. A response such as 403 is not necessarily a local port problem, nor does it mean the destination service is usable.
  4. Check the core log at the same time. Confirm the destination hostname and selected outbound route. You can only determine whether the expected node was used if the log clearly records the outbound connection.

If an explicit proxy request works but a regular command fails, first check how that tool reads proxy settings. If the explicit request also fails, check the local listener, node connection, and routing instead of piling on more environment variables. Change one thing at a time and record the command, time, and result; that’s easier to reproduce than simply noting that a website won’t load.

4. Check browser system proxy settings, extensions, and bypass rules

Check the System Proxy status in the v2rayN tray menu. “Set system proxy” generally means the client writes the current proxy settings; it does not mean a PAC file is necessarily active. “Clear system proxy” removes the corresponding settings. “Do not change system proxy” means the client won’t modify them—it does not mean an existing system proxy is disabled.

  1. In Windows, go to Settings → Network & Internet → Proxy. Check that the manual proxy address and port match the current HTTP or mixed-protocol listener, and see whether a setup script is also enabled.
  2. Temporarily disable browser extensions that manage proxy settings. If an extension still points to an old port, the browser may ignore the correct system settings entirely.
  3. Check whether the browser has its own manual proxy configured. In Firefox, go to Settings → General → Network Settings → Settings and check whether it uses the system proxy. For organization-managed browsers, also check for policy restrictions.
  4. Close and reopen the browser, then retry the same destination while watching the core log for a new request. An existing connection or cached page does not prove that the new settings are in effect.

If the browser only works with a particular extension enabled, note the protocol and port the extension actually uses, then compare them with the system settings. This usually means the two paths are different—not that the system proxy button is broken. If the browser and terminal tests use different hostnames, test the same destination in both before comparing outbound routes.

5. Match terminal environment variables to the tool

Many terminal tools read HTTP_PROXY, HTTPS_PROXY, or ALL_PROXY, but support, precedence, and configuration-file behavior vary by tool. First check which values are visible to the current process; don’t change system-wide variables yet. The PowerShell command below only reads them. If the output includes usernames, passwords, or internal addresses, remove them before sharing.

Get-ChildItem Env: |
  Where-Object { $_.Name -match '^(HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY)$' }

This example sets variables for the current PowerShell session, assuming you’ve confirmed that 10809 supports HTTP proxy connections. If these variables already have values, save them first and restore them after testing. Windows environment variable names are usually case-insensitive; other shells may treat case differently. For example, curl uses the lowercase http_proxy variable for HTTP proxies.

$env:http_proxy = 'http://127.0.0.1:10809'
$env:https_proxy = 'http://127.0.0.1:10809'

curl.exe -v --connect-timeout 10 --max-time 30 https://example.com/ -o NUL

The value of https_proxy can still start with http://: the scheme describes how the tool connects to the proxy, not the protocol used by the destination website. To reach an HTTPS site, the tool can create a CONNECT tunnel through a regular HTTP proxy and establish TLS with the destination inside that tunnel. Changing it mechanically to https://127.0.0.1:10809 may make the tool attempt a TLS handshake with a local proxy that does not support TLS.

If the variables were unset before testing, use the command below to clear them from the current session. If they already had values, restore those values instead of deleting them. Closing the PowerShell window also ends session-level changes. Only consider persistent settings once the test succeeds, and check the proxy options for each command-line tool to avoid affecting unrelated tasks.

Remove-Item Env:http_proxy -ErrorAction SilentlyContinue
Remove-Item Env:https_proxy -ErrorAction SilentlyContinue

6. Diagnose by the stage of failure—not every timeout is a node issue

The examples below show common curl error snippets; addresses, timings, and TLS backend details vary by environment. First identify whether the failure occurred while connecting to the local listener, negotiating with the proxy, or reaching the destination. Then change the relevant setting.

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

Cause: The local TCP connection could not be established, often because nothing is listening on that port or the address is wrong. Fix: Check the listening process and active port, then retry an explicit proxy request. Don’t switch remote nodes yet.

Error: curl: (5) Could not resolve proxy

Cause: The proxy hostname could not be resolved. The variable may contain a misspelled hostname or extra characters. Fix: Check the full environment variable value, then run an explicit test with the verified loopback address to distinguish proxy-address resolution from destination DNS resolution.

Error: curl: (28) Connection timed out

Cause: A connection stage exceeded its time limit. This error alone cannot tell you whether the issue is the node, DNS, or destination service. Fix: Check the last completed step in -v output alongside the core log from the same time. Confirm whether the local connection was established, then investigate the outbound connection.

Error: curl: (35) SSL connect error

Cause: The TLS handshake failed, possibly because of a protocol mismatch, an intermediary, or destination-side negotiation. Fix: First check the scheme in the local proxy URL, then verify the system clock and review the full TLS error details. Don’t disable certificate verification as a routine fix.

Temporarily increasing log verbosity can help distinguish routing problems from connection failures, but logs may contain destination hostnames and node addresses. Restore the original log level after troubleshooting. When sharing logs, include only the necessary lines and redact subscription URLs, credentials, and personal browsing history.

7. Common questions and final checks

The browser works, and curl succeeds with an explicit proxy. Why do regular commands still fail?

You’ve verified the listener and basic connection. Next, check whether the tool reads environment variables, has its own proxy settings, or is bypassing the destination through NO_PROXY. Test from the same terminal, then launch the tool from that terminal to avoid differences in inherited environment variables.

Why does the browser work after I change the port, while the terminal still uses the old one?

System proxy settings and terminal variables are configured separately. Check the current terminal’s proxy variables and update them to the active port. If the tool uses a configuration file, update the relevant setting there too. Long-running processes may need to be restarted.

If 10808 is available, do I also need to open 10809?

Not necessarily. If 10808 is a mixed-protocol listener, HTTP and SOCKS clients can connect to the same port using their respective protocols. Verify the listener’s capabilities and test them; don’t add another listener just to match an outdated guide.

What should I do if websites stop loading after I exit the client?

In Windows, go to Settings → Network & Internet → Proxy and check whether a setting still points to a local port that is no longer running. Clear any proxy settings you no longer use. Also restore the terminal variables you had before testing and re-enable browser extensions as needed.

Finish by confirming three things: an explicit request connects to the correct local listener; the browser and terminal each use the intended proxy settings; and the core log shows the expected outbound route. This distinguishes a successful system proxy setup from an app actually using the proxy and a request taking the intended route—so the next issue won’t send you straight to reinstalling.