For v2rayN users seeing test timeouts, websites failing after enabling the proxy, or no connection even after switching nodes. First, compare direct and explicit-proxy requests to isolate your network from the client. Then check node settings, transport, and server listeners. Change one thing at a time and keep the relevant logs to distinguish port conflicts, DNS failures, and unreachable servers.
First, tell apart a test timeout from a failed request
“Node timeout” isn’t a diagnosis. A TCP connection test only tells you whether a connection to the remote port can be established. A real connection-latency test also depends on the proxy protocol, test URL, and request timeout. A timeout in the node list doesn’t necessarily mean every website is inaccessible; a latency value doesn’t prove that certificates, routing, and every app are working correctly.
Select one node as the active configuration, then open a fixed HTTPS URL. Don’t change nodes, routing mode, and DNS at the same time. Note the time the problem occurs to the nearest minute and check the core log for that same time. A screenshot of the node list alone usually won’t show where the connection is getting stuck.
- All nodes time out: Check your network, core startup, local ports, and shared settings first. Nodes from the same provider may also be affected by a server outage.
- Only one node fails: Compare its server address, port, transport, and remote status first. Don’t reset the entire client as your first step.
- Browser fails, explicit proxy request succeeds: Check the system proxy, browser proxy extensions, and routing instead of changing node credentials again.
- Only one test URL fails: Try a known-accessible target to determine whether the test site or the node is at fault.
Step 1: Disable the proxy and check your network and DNS
In the v2rayN tray menu, go to “System Proxy” and select “Clear System Proxy.” Turn off TUN mode as well. Temporarily quit other tools that manage network traffic so it can’t keep routing through a virtual adapter. Then visit a site that normally works without a proxy. If it still won’t load, check your Wi-Fi sign-in, gateway, or ISP connection first.
-
Restore direct access
Clear the system proxy and turn off TUN, then reopen your browser. If the browser has its own proxy configured, switch it back to using system settings too. Closing the client’s main window alone isn’t enough.
-
Check your IP configuration
Run
ipconfigin Windows Terminal and check the current adapter’s IPv4 address and default gateway. If the address is169.254.x.xand there’s no usable gateway, reconnect to the network or troubleshoot DHCP first. -
Check DNS resolution
Run the DNS commands below. First confirm that a regular domain resolves, then run the same check for the domain used by the node. If the node uses an IP address, this won’t test resolution of the node address.
-
Try another network
Connect to a mobile hotspot and test the same node once. If it fails only on your usual network, investigate that network’s DNS, outbound policies, and routing before reinstalling the client.
ipconfig
nslookup example.com
example.com is only an example for demonstrating command syntax; it isn’t a node server. Successful resolution means only that an address was returned, not that a service at that address is reachable. And don’t assume a node is offline just because ping gets no reply: the remote host may block ICMP while its TCP service is still working.
Step 2: Check the core, local ports, and system proxy
Once basic network access is restored, start the client and select a node. In v2rayN, open “Settings” → “Parameter Settings” and check the local listener and the core in use. Subpage names may vary between desktop versions, so go by the actual field labels. First make sure the logs show no configuration load errors, then check the system proxy. Don’t use TUN to mask a problem with ordinary proxy mode.
The examples below use the local SOCKS endpoint 127.0.0.1:10808; use the port shown in your current settings. Some configurations use a mixed inbound, while others have a separate HTTP endpoint. Older configurations may also use 10809. The port number alone doesn’t identify the protocol, and a SOCKS port must not be entered as an HTTP proxy.
netstat -ano | findstr :10808
curl.exe --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
- Check the listener first: In
netstatoutput,LISTENINGmeans a process is listening, and the last column is its PID. If there’s no output, check whether the core has started and whether the port was changed. - Then identify the process: In Task Manager, open “Details” and match the PID to a process. If another program is using the port, confirm what it’s for, then close that program or change the local listener port. Don’t terminate system processes at random.
- Specify the proxy explicitly: In the example,
socks5hresolves the target domain through the SOCKS proxy. The node server’s own domain may still need to be resolved locally.--noproxy ""clears direct-connect exceptions for this request. - Interpret the response: An HTTP response means the proxy request chain returned a response for this target, even if the status is 403 or 405. Check the target site’s policies too. The 20-second timeout is just a limit for this diagnostic request, not a software default.
Next: If the explicit proxy works, check how traffic is routed
If this command returns a response but the browser still fails, leave the node settings alone. Enable “System Proxy” → “Automatically configure system proxy,” then check browser extensions and system proxy exceptions. If the explicit request also fails, continue with the logs and remote connection instead of repeatedly toggling the system proxy.
Step 3: Verify node settings—don’t guess at missing fields
Open the failing node’s edit window and compare each field with the original configuration from the server. VMess and VLESS are different protocols; changing one protocol name won’t convert one into the other. A subscription is just a way to distribute configurations. A successful subscription update doesn’t mean the node is available, the account is valid, or the remote service is working.
| Setting | What to check | Common mistake |
|---|---|---|
| Server and port | Verify the domain or IP and remote listening port exactly | Using local port 10808 as the server port, or changing every remote port to 443 |
| Protocol and identity | Check VMess / VLESS, the user ID, and any other fields required by the server | Losing characters when copying, or mixing the identity and address from different nodes |
| Transport | Check the actual configuration, such as TCP, WebSocket, or gRPC | Assuming transport is just a display label that can be changed arbitrarily |
| Security settings | Check TLS or REALITY, the corresponding server name, and any protocol-specific fields | Treating REALITY like ordinary TLS and saving after entering only a domain |
| Routing and outbound | Make sure the test target uses the intended outbound, not a direct or blocked rule | Assuming every request will use the active node just because it’s selected |
If you’ve just updated the subscription, first confirm that you’re using the updated entry. Duplicate names can make it easy to select an old configuration; add a recognizable note to the test entry while keeping the original. Don’t post full share links, user IDs, or subscription URLs in public forums. When reporting a problem, include only the protocol, transport, error text, and a redacted address.
Step 4: Use the logs to locate TLS and transport errors
Find the timestamp for the request in the client log, then identify whether the error occurred during DNS resolution, TCP connection, the TLS handshake, or transport setup. The snippets below are common errors; surrounding log text varies by core. Seeing context deadline exceeded on its own only tells you a timeout occurred. Check what operation was in progress immediately before it.
Error: dial tcp: lookup
Cause: Often means the node’s domain couldn’t be resolved. The full log usually includes the domain and a DNS error.
Fix: Run nslookup for the same domain, then check the client’s DNS settings and your current network. After fixing the issue, retry once and check the new log.
Error: connect: connection refused
Cause: The connection was explicitly refused. The target port may have no listener, a firewall may be actively rejecting the connection, or the local proxy endpoint may not have started.
Fix: Check whether the address in the error is 127.0.0.1 or a remote address. For a local address, check the listener; for a remote one, ask the administrator to check the service and firewall.
Error: i/o timeout
Cause: A network read or write operation exceeded its deadline. Possible causes include packet loss, silent packet drops, or a delayed remote response.
Fix: Use the preceding log lines to identify which stage timed out, then compare results on another network. Don’t conclude that the password is wrong or the server is offline based on this line alone.
Error: x509: certificate has expired or is not yet valid
Cause: The local clock may be inaccurate, or the server certificate may actually be outside its validity period.
Fix: First sync your clock in Windows “Settings” → “Time & language” → “Date & time,” then ask the administrator to check the certificate’s validity period.
Error: websocket: bad handshake
Cause: The WebSocket upgrade response wasn’t as expected. Common causes include a mismatched path or Host, incorrect reverse-proxy forwarding, or the wrong target service.
Fix: Verify the WebSocket path and Host against the server configuration, and check that the reverse proxy forwards that path to the correct backend.
TLS SNI is the server name used during the handshake; WebSocket Host is an HTTP request header. They serve different purposes. The server address, SNI, and Host may be the same or may need separate values, depending on the deployment. Don’t replace them all with the address shown in the address bar. For gRPC, also check serviceName and HTTP/2 support in any intermediate proxy. Preserve capitalization in paths and names.
Step 5: Check the server listener and inbound firewall
Once the local and configuration checks above pass, have an authorized administrator check the server. Subscription users don’t need to look for server login credentials; send the provider the time of the failure, network used, node label, and redacted logs. The commands below are for a Linux server and must be run with the appropriate permissions.
sudo ss -lntp
sudo systemctl status xray --no-pager
sudo journalctl -u xray --since "20 minutes ago" --no-pager
This example assumes the service unit is named xray. Run it as written only if that’s the actual name used by the deployment. For V2Ray or a custom service unit, substitute the real unit name. A service showing as running doesn’t guarantee that the target port is open. In the ss output, verify the listening address and port, along with the owning process.
- Check the inbound port: If the client uses TCP 443, check TCP 443 on the public-facing entry point. Allowing UDP 443 alone won’t work. Check other ports against the actual configuration.
- Distinguish the front end from the backend: With a reverse proxy, the proxy may listen on public port 443 while the core listens on a backend port bound to a loopback address. That’s a normal setup; don’t expose all backend ports to the public internet.
- Check both firewall layers: The cloud security group and the server firewall must both allow the actual inbound port. Changing only one can still leave connections timing out.
- Check DNS records: If the domain has both A and AAAA records, verify IPv4 and IPv6 listeners and reachability separately. Otherwise, one address family may work while the other fails.
- Check service logs: Look for port binding failures, configuration parse errors, authentication failures, and certificate loading errors. If there are no requests in the logs, check whether they’re getting stuck at an upstream reverse proxy.
Next: Compare the same node across networks
If the same node works on a hotspot but fails on your usual network, leave the server configuration alone and investigate the original network path. If it fails across multiple networks and the server has no inbound listener, prioritize restoring the remote service. If the port is reachable but proxy requests fail, revisit the protocol, authentication, and transport logs.
Node timeout FAQ and retest checklist
All nodes are timing out. Should I reinstall v2rayN first?
Not yet. Check direct network access, core logs, the local listener, and an explicit proxy request in that order. If every node from the same provider fails while another known-good configuration works, ask the provider to check its service. Reinstalling won’t fix a remote outage or incorrect subscription settings.
Why won’t websites load if the TCP test shows a latency?
A successful TCP connection doesn’t test subsequent authentication, TLS, or application requests. Use the curl.exe command above to test a complete request and check the log at the same time. If the full request succeeds, fix the system proxy, browser settings, or routing—not the remote port.
My connection drops only after enabling TUN. How do I recover?
Turn off TUN and clear the system proxy first, then confirm that direct access works again. Next, test the node with the regular system proxy. Only after it works should you enable TUN on its own and check permissions, the virtual adapter, DNS, and route handling. Don’t run multiple tools that manage network traffic at the same time.
Why does the same node work on Android but time out on desktop?
Connect both devices to the same network first, then confirm that the server, port, and transport fields match. v2rayNG uses the Xray core, while v2flyNG uses the v2fly core; support for specific settings can vary between cores. On desktop, also check the selected core, local port, and system clock.
After fixing the issue, send three consecutive requests to the same target and record whether each one gets a response. Then restore your usual routing and app settings. One successful request doesn’t rule out intermittent failures, and repeated failures won’t be fixed simply by increasing the timeout. Record the network type, active node, core, failure stage, and changes made—never credentials.
- Basic network: Can you connect directly with traffic interception disabled? Does the node domain resolve?
- Local endpoint: Do the actual listening address, port, and process match?
- Complete request: Does an explicit proxy request get a response, and does the browser behave the same way?
- Remote evidence: Is the service listening, and do the logs match the test time?