A node showing a timeout does not necessarily mean the protocol itself is broken. The same red latency result can come from an outdated address in the subscription, clock drift, failed DNS resolution, a local listening-port conflict, or transport settings that do not match the server. Repeatedly switching nodes mixes these causes together, while repeated requests can overwrite the useful log entries.
A more reliable approach is to follow a fixed order, change only one variable per round, and record the client version, test time, network type, and core logs. This guide covers desktop v2rayN, plus v2rayNG with the Xray core and v2flyNG with the v2fly core on Android. Menu names may vary between minor releases, but the five checks—subscription, time, ports, network, and protocol—remain the same.
First verify that the node is still valid by checking the subscription update time and testing from another network, then keep clock drift within 30 seconds. Next inspect local SOCKS port 10808, HTTP port 10809, and the firewall. Finally compare the address, port, UUID, transport, TLS, SNI, and path one by one. This sequence shows whether the failure is local, at the network entry point, or during the remote handshake.
First identify where the timeout occurs
A proxy connection typically passes through the application, local proxy listener, routing rules, remote network connection, and protocol handshake. A browser only reports “connection timed out,” not which stage failed. Open the client log first, then make one repeatable request. For example, stop other downloads, visit one fixed webpage, and keep the 30 seconds of logs before and after the request.
Latency tests also come in different types. A TCP probe only shows whether the remote address and port accept a connection; it does not confirm a successful VLESS or VMess handshake. Real latency passes through the complete proxy chain and better reflects actual access. If TCP latency is 86 ms but real latency consistently times out, check the protocol, security layer, and transport settings before changing local DNS.
Error: context deadline exceeded
Cause and fix: The request did not finish within the allotted time. This line alone cannot identify the cause. Look around the same timestamp for DNS, dial, TLS, or transport logs, then narrow the scope using the order in this guide.
Error: connection refused
Cause and fix: The target host actively refused the current port, commonly because the server port changed, the process is not listening, or the entry rules changed. Refresh the subscription first; do not guess and replace the port manually.
Conclusion: the log stage matters more than the word “timeout”
A local listening failure usually appears immediately when the core starts. Remote dialing and handshake errors appear only after traffic reaches that node. Identify the failing stage first, then decide whether to inspect the port or the protocol settings.
Step 1: Refresh the subscription and confirm the node is still valid
The subscription is the source of the node settings. After the server changes its domain, entry port, UUID, transport path, or security layer, an old local node may remain in the list while every connection times out. During troubleshooting, do not rely only on the node name. Check the subscription’s last update time and confirm whether the refreshed node count, address, and port changed.
In v2rayN, open “Subscription Groups” → “Subscription Group Settings” and confirm that the subscription URL is complete and the group is enabled. Return to the main window and choose “Subscription Groups” → “Update All Subscriptions (Without Proxy)”. If the current network cannot fetch the subscription directly, connect to a confirmed working node and use “Update All Subscriptions (Through Proxy)” instead. Use only one method for each test so repeated actions do not overwrite the evidence.
-
Record the old state
Note the node count, subscription update time, and currently selected node. For example: 24 nodes, last updated 2026-05-27 21:10. This makes it easier to confirm that the update actually occurred.
-
Refresh the subscription
Open “Subscription Groups” → “Update All Subscriptions (Without Proxy)”. Wait for the completion message; do not close the client or switch networks during the update.
-
Check what changed
Compare the addresses, ports, and total node count before and after the update. If the count drops from 24 to 21, use the new list first instead of restoring removed nodes from an old backup.
-
Retest one node
Select one new node, restart the core, and test it three times. Wait 5 seconds between attempts. If all three time out, continue with the time and network checks instead of changing protocols in bulk.
Error: failed to find an available destination
Cause and fix: The outbound address did not resolve to a usable destination. Check the domain spelling in the subscription, switch to a reliable DNS service, restart the core, and run another single-node test.
Error: unexpected EOF
Cause and fix: The remote end closed the connection before completing its response. Confirm that the subscription has been refreshed first. If the issue occurs only with this node across multiple networks, keep the logs and ask the node provider to check the entry status.
Step 2: Correct the system clock and check DNS resolution
VMess authentication depends on a time window, and TLS certificate validation depends on the system date. If the device clock is off by several minutes, ordinary webpages may still load while the proxy handshake fails. Enable automatic date, time, and time-zone settings, then trigger an immediate sync. Keep clock drift within 30 seconds; if it exceeds 90 seconds, correct the time before changing node settings.
Once the time is accurate, check DNS. If the node address is a domain, the local system must resolve it to a reachable IP first. Run the operating system’s built-in lookup command in a terminal and note whether it returns an address and how long the response takes. If three consecutive lookups take over 2000 ms or alternate between success and failure, the problem occurs before the protocol handshake.
- Confirm that the system date, time zone, and daylight-saving rules match your location. Do not check only the hour and minute in the taskbar.
- A computer resuming from sleep should sync its clock again; after a long sleep, the time service may not have finished calibration.
- After switching networks, resolve the node domain again instead of continuing to use an invalid local cache entry.
- If the subscription URL opens but the node domain does not resolve, record the lookup results for both domains separately. Do not treat them as the same failure.
nslookup node.example.net
Expected output:
Address: 203.0.113.20
First response: 42 ms
Repeated lookups: the same set of valid addresses returned each time
Error: certificate has expired or is not yet valid
Cause and fix: The system time is incorrect, or the remote certificate is currently outside its validity period. Sync the system clock first. If the same error remains after the time is accurate, ask the node provider to check the certificate.
Error: no such host
Cause and fix: The node domain could not be resolved. Check for spaces or invalid characters in the address, clear the local DNS cache, and test again on another network.
Step 3: Check local ports, core status, and the firewall
Even with correct node settings, the local core must first listen successfully on the proxy ports. A common v2rayN setup uses SOCKS port 10808 and HTTP port 10809; use the values shown under “Settings” → “Parameter Settings” as the source of truth. If the browser is set to 10809 while the client has been changed to 20809, the request will not reach the current core.
Port conflicts commonly occur when an old core has not exited, another client is still running, or a leftover process remains after the system resumes from sleep. Closing the v2rayN window does not necessarily end its background process; exit from the system tray, then restart it. During troubleshooting, keep only one client and one core instance active so multiple programs do not change the system proxy at the same time.
-
Confirm that the core is running
Check the status and logs at the bottom of the main window. A successful listening message should appear after startup. If the log exits within one second, fix the core startup error first.
-
Verify the listening ports
Open “Settings” → “Parameter Settings” and record SOCKS port 10808 and HTTP port 10809. The browser or other application must use the port for its configured proxy type.
-
Free the conflicting port
Fully exit other proxy clients and leftover cores, then restart v2rayN. If 10808 is still occupied, change it to 20808 and update the HTTP port and application settings accordingly.
-
Check the firewall
Confirm that the current core is allowed to communicate on the network type in use. Restore the established security policy after testing; do not permanently loosen inbound access for unrelated programs.
Normal listening example:
SOCKS listening on 127.0.0.1:10808
HTTP listening on 127.0.0.1:10809
Conflict example:
failed to listen TCP on 127.0.0.1:10808
bind: address already in use
Error: bind: address already in use
Cause and fix: The local port is already occupied by another process. Exit the leftover core, or change the local port under “Settings” → “Parameter Settings”, then update the system proxy and browser settings as well.
Error: connection refused 127.0.0.1:10809
Cause and fix: The application tried to access a local port with no listener. Confirm that the core is running and that the application is using the HTTP port rather than the SOCKS port.
Conclusion: verify the local listener before judging the remote node
If access to the proxy port at 127.0.0.1 is refused, the request never reached the node. Changing VLESS, VMess, or the transport will not produce a useful result at this stage.
Step 4: Use another network to separate line and node failures
Once the subscription, time, and local ports are confirmed, switch networks without changing the node settings. Use home broadband and a mobile hotspot as two controls: run three real-latency tests with the same node, client, and test address. Change only the network entry point so you can determine whether the issue is concentrated on the current route.
For example, if all three tests on the home network time out while the mobile hotspot returns 118 ms, 126 ms, and 121 ms, the node configuration can at least complete a handshake. Focus next on the home network’s DNS, routing, or firewall. If both networks time out after about 10 seconds, the remote port is more likely unreachable or the protocol settings do not match.
| Test pattern | Most likely location | Next step |
|---|---|---|
| Both networks are refused immediately | Remote port or entry status | Refresh the subscription and verify the port |
| One network works, the other times out | Local route, DNS, or routing | Keep the node settings and inspect the current network |
| TCP is reachable, but real latency times out | Protocol handshake or security layer | Check UUID, TLS, SNI, and transport |
| All nodes fail at the same time | Subscription, local core, or network entry | Recheck the update time and core logs |
Step 5: Check protocol and transport settings one by one
Only after the first four layers pass should you open the node editor. Confirm whether the protocol is VLESS or VMess, then compare each setting with the server-provided values. The UUID is an authentication identifier and should not be rewritten from memory. The port must match the entry listener, and TCP, WebSocket, and gRPC transports are not interchangeable. Security layers such as TLS and REALITY must also correspond to the server configuration.
For WebSocket, check Host and the path; a slash or capitalization difference in the path can affect routing. For gRPC, verify the service name. In TLS setups, also check the server name, or SNI. The connection address may be an IP, but the name used for certificate validation must still match the server’s requirement. For REALITY, verify the server name, public key, and short ID; do not apply ordinary TLS fields directly.
| Parameter | What to check | Typical symptom |
|---|---|---|
address and port |
The domain resolves, and the port matches the subscription | Dial timeout or connection refused |
UUID |
The value is complete and contains no spaces | Authentication failure or immediate remote disconnect |
network |
TCP, WebSocket, or gRPC matches the server | TCP is reachable, but the transport handshake fails |
security |
TLS, REALITY, or the specified security layer matches | Certificate or handshake error |
SNI and Host |
Use the domain specified by the server | Certificate name mismatch or entry rejection |
| Path or service name | Capitalization, leading slash, and content match exactly | Abnormal remote response or premature close |
Error: tls: failed to verify certificate
Cause and fix: Certificate name, validity period, or trust-chain validation failed. Confirm the system time first, then compare the server name in the node settings with the server’s requirements. Do not use certificate verification bypass as a permanent fix.
Error: invalid user
Cause and fix: The remote side rejected the authentication information. Refresh the subscription and verify the UUID. Do not manually combine an address, port, and authentication fields from different nodes.
Error: websocket: bad handshake
Cause and fix: The WebSocket handshake did not receive the expected response. Check the transport type, Host, path, and TLS settings, and confirm that the request reaches the correct entry point.
Retesting on different clients
Desktop v2rayN is useful for viewing core startup, listening, and outbound logs directly. Before troubleshooting, record the client version under “Help” → “About”, and note the core version at the start of the log, such as client 7.x with Xray-core 25.x. Version numbers do not prove the cause, but they help determine whether the same configuration reproduces under different core environments.
On Android, v2rayNG uses the Xray core, while v2flyNG uses the v2fly core. Importing the same subscription into two clients with different cores can help check configuration compatibility, but do not change transport settings in the same test round. After switching between mobile and Wi-Fi networks, run the connection test again because the assigned DNS and exit route may have changed.
What if subscription updates always time out?
Copy the subscription URL and confirm that every character is intact. Then try “Update All Subscriptions (Without Proxy)” and “Update All Subscriptions (Through Proxy)” separately. The second method requires a confirmed working node first.
Why is there a latency value but webpages still will not open?
Confirm that the system proxy is enabled and that the browser uses the correct HTTP port. A successful latency test only means that its test request passed; it does not mean browser traffic entered 10809.
Is it normal for all nodes to time out suddenly?
When multiple independent entry points fail at once, check the local core, system time, subscription update time, and current network first. Editing dozens of nodes individually usually cannot fix a shared failure.
What else must be changed after changing the local port?
If you change the HTTP port from 10809 to 20809, update the system proxy, browser extensions, and other manually configured applications as well. SOCKS applications should use the corresponding 20808 port.
Why does a successful TCP test still report a handshake failure?
A TCP test only confirms that the address and port are reachable. Continue by checking the protocol type, UUID, transport, TLS, SNI, WebSocket path, or gRPC service name.
Verification order after the fix
Do not stop after a single successful test. Restart the core and confirm that the local ports are listening successfully. Then run three real-latency tests, open an ordinary webpage and the target address that requires the proxy, and test once more after 10 minutes. A brief success may only reflect an unstable DNS cache or route switch.
Record the final result as “client and core versions, network type, node protocol, fix applied, three latency results.” For example: v2rayN 7.x, Xray-core 25.x, home broadband, VLESS over WebSocket with TLS, corrected SNI, with results of 92 ms, 95 ms, and 91 ms. This record is more useful for future reuse than “it worked after reinstalling.”
-
Restart the core
Confirm from the logs that both 10808 and 10809 are listening successfully, with no port conflict or configuration parsing error after startup.
-
Run three tests
Wait 5 seconds between tests. If the difference between the three real-latency results is under 50 ms, the current connection is relatively stable.
-
Verify application traffic
Check the browser, system proxy, and individually configured applications to confirm that their proxy type and port match the client.
-
Keep useful records
Save the error time, key logs, and applied fix. Do not retain expired subscription settings as a long-term configuration.
Conclusion: a fixed order prevents false diagnoses
Subscription, time, ports, network, and protocol settings form an outside-in troubleshooting chain. If one layer has not passed, do not bulk-edit the next layer. Change one variable at a time to reach a repeatable conclusion.