V2Ray Connection Timeout: Check System Time, Ports, and TLS

Troubleshoot V2Ray connection timeouts by checking system time, local ports, transport settings, and TLS parameters in order—from your device to the server.

At a glance

Use this guide when v2rayN node tests time out, your browser cannot load pages, or v2rayNG shows a connection but apps cannot access the internet. First confirm the request is going through the client, then check the clock, local listener, server port, and handshake settings. Change one thing at a time and retest the same destination to avoid mistaking a system proxy issue for a node failure.

1. Identify Where the Timeout Occurs

A “timeout” message tells you what happened, not why. A request may pass through app proxy settings, a local inbound listener, DNS resolution, a remote connection, and a protocol handshake. If an earlier step fails, correct TLS settings later in the chain won't help. Note the failure time, the node's protocol and server port, and whether system proxy or TUN mode was enabled.

App proxy settings Local inbound listener Remote address resolution Server connection Protocol handshake

v2rayN is a desktop client; the selected core handles the connection. v2rayNG uses the Xray core, while v2flyNG uses the v2fly core. Protocols, clients, and cores are different things. When troubleshooting, note the core and version actually in use instead of saying only “V2Ray isn't working.”

2. Sync the System Clock, Then Retry

An incorrect date, time, or time zone can affect certificate validity checks and VMess time-based authentication. VLESS does not use the same time-based authentication as VMess, but TLS connections still require server certificate validation. Switching a node to VLESS is no reason to skip the clock check.

  1. Check the Date and Time

    In Windows 11, open Settings → Time & language → Date & time. Check the date and current time, then turn on Set time automatically. Make sure the time zone matches your location; the hour shown in the taskbar alone isn't enough to confirm the system clock is correct.

  2. Sync the Clock

    Select Sync now on the same page. If syncing fails, check whether your current network allows access to time servers. Recheck the clock after waking from sleep, restoring a virtual machine snapshot, or replacing a failing motherboard battery.

  3. Check Sync Status

    Open PowerShell and run the query command below to check the time source and the last successful sync. To sync again, run the second command as an administrator. If the service isn't running or no time data is available, address the message shown first.

  4. Retry the Connection

    After correcting the clock, stop and restart the client connection, then retest the same node and destination. On Android, search Settings for “Date & time” and enable automatic time; menu names vary by device.

w32tm /query /status
w32tm /resync

3. Check That the Local Port Is Listening

Enabling the system proxy doesn't mean the core started successfully. If the proxy points to a port with no listener, the browser will usually fail immediately. If another process has claimed the port, the client may also fail to create its inbound listener. In v2rayN, check the local listening port and inbound type under Settings → Parameter settings. Menu names may vary by version, so use the setting labels shown in your client.

127.0.0.1
A loopback address on this device—not the remote node
10808
Local port shown as an example; check your settings
443
A common TLS server port, not a requirement

The examples below use local port 10808. The first command shows the listening process ID; the second identifies that process. If your client uses a different port, change the number in both commands. No output usually means no TCP listener was found on that port.

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

Get-NetTCPConnection -State Listen -LocalPort 10808 -ErrorAction SilentlyContinue |
  ForEach-Object { Get-Process -Id $_.OwningProcess }

Error: Only one usage of each socket address (protocol/network address/port) is normally permitted.

Cause: On Windows, this usually means another process or a duplicate client instance is already using the local port.

Fix: Check the bind address and port in the log, then close any duplicate processes you don't need or change the local listening port. Update the app's proxy settings to match.

Next: Confirm the Listener Before Changing the System Proxy

If nothing is listening on the local port, start by checking the core startup log. If the correct process is listening, confirm whether the app expects an HTTP, SOCKS, or mixed inbound. Don't point an HTTP proxy at a SOCKS-only port.

4. Test DNS and the Server Port Separately

Once the local listener is working, check the node's server address. The server address is used to establish the connection; TLS SNI supplies the server name during the handshake. They can differ. Read the server address from the node editor—don't test the subscription URL or a WebSocket path instead.

Run these commands in Windows PowerShell. When prompted, enter your server hostname or IP address and the remote port from the node configuration. The input is used locally for diagnosis; don't post full output containing personal node details publicly.

$server = Read-Host "Enter the node's server hostname or IP"
$port = [int](Read-Host "Enter the node's remote port")

Resolve-DnsName -Name $server
Test-NetConnection -ComputerName $server -Port $port -InformationLevel Detailed

5. Check TLS, Transport, and Authentication in Order

If the remote TCP port is reachable but the proxy still doesn't work, check the handshake settings. Don't assume configurations match just because both use port 443: one port can host different services, and a reverse proxy may route traffic by name, path, or service name.

LayerSettingsCommon mistakes and what to check
TLSSecurity type, SNI, certificate nameSet SNI as configured on the server. The name covered by the certificate may differ from the server IP; don't substitute one for the other.
TransportTCP、WebSocket、gRPCThe client and server settings must match. Changing transport isn't a general-purpose fix for timeouts.
WebSocketHost and pathThe leading slash, capitalization, and suffix in the path can all affect reverse-proxy routing. Host isn't necessarily the same as SNI.
gRPCserviceName、ALPNThe service name must match the server configuration. For HTTP/2 over TLS, the server must correctly negotiate h2.
Protocol authenticationUUID, password, flowCheck the identity fields for the protocol in use. For VLESS, flow must match on the client and server.
REALITYPublic key, shortId, serverNameREALITY has its own handshake settings; don't troubleshoot it as a standard TLS certificate issue.

If the node comes from a subscription, save its current settings, update the subscription, and compare the changes. The next update may overwrite manual edits, so note what you changed. Don't change SNI, transport, and server address all at once; even if the connection comes back, you won't know which change fixed it.

Error: x509: certificate has expired or is not yet valid

Cause: The device clock is wrong, or the server certificate is outside its validity period.

Fix: Correct the device clock first, then ask the server administrator to check the certificate validity period and deployment.

Error: remote error: tls: handshake failure

Cause: The remote side rejected the TLS handshake. Possible causes include SNI, protocol negotiation, or server configuration; this log message alone doesn't identify the cause.

Fix: Check the TLS fields one by one and compare them with server logs from the same time to find out why the handshake was rejected.

Error: websocket: bad handshake

Cause: The expected WebSocket upgrade response wasn't received. A mismatched path, Host, or reverse-proxy forwarding configuration is a common cause.

Fix: Check the node's WebSocket settings, then confirm the server forwards upgrade requests to the correct inbound.

6. Verify the Proxy Path with a Consistent Request

After checking the settings, send a request to the same destination each time. The command below is for a local inbound confirmed to accept SOCKS on 10808; replace the port if your configuration differs. socks5-hostname sends the destination hostname to the proxy for resolution, keeping local DNS issues for the destination site out of this test.

curl.exe --proxy socks5-hostname://127.0.0.1:10808 --connect-timeout 10 --max-time 20 --head https://example.com/

The 10- and 20-second limits are set by the diagnostic command; they aren't performance benchmarks for the node. A normal HTTP response header means the request reached its destination through the local SOCKS inbound. A non-success status code doesn't necessarily mean the proxy failed—check the response content. If the request fails, check the core log for the same timestamp.

If TUN or complex routing is enabled, confirm which outbound the test request actually uses. Specifying the local proxy explicitly rules out differences in whether an app reads the system proxy, but it doesn't bypass the client's routing rules. For rule priority, see the routing guide.

7. Cross-Check Before Blaming the Remote Server

If the local listener, system clock, remote address, and handshake settings all check out, run a few controlled comparisons. Keep the same device and node but switch to another network you can use. Then stay on the same network and test another known-working node. Change one condition at a time so the results are meaningful.

Error: i/o timeout

Cause: A read or write didn't complete in time. This could happen during connection, handshake, or data transfer; use the surrounding log entries to pinpoint the stage.

Fix: First check whether the target address in the log belongs to the remote node or the destination website. Then test the port or cross-check the relevant layer.

Error: connection refused

Cause: Nothing is listening on the target port, or the connection was actively rejected. This differs from a timeout, where no response arrives for an extended period.

Fix: Determine whether the rejected connection was to the local inbound or the remote port. Check core startup status for the former, and the server listener and firewall rules for the latter.

Narrow It Down to a Reproducible Layer

If the same node works on another network, focus on the original network path. If only one node fails on the same network, check that node's settings and remote status first. These results are clues, not proof; confirm with logs rather than assuming throttling or blocking.

If you still can't identify the issue, follow the troubleshooting steps. Start by finding out which layer failed, what error appeared, and how to reproduce it. That's more useful than repeatedly updating subscriptions, switching cores, or reinstalling the client.

v2rayN Download Center