How to Read v2rayN Logs: Common Errors and How to Troubleshoot Them

Learn how to set log levels and interpret common errors like connection refused, i/o timeout, and failed to handshake, with a step-by-step guide from local ports to remote settings.

At a glance

For v2rayN users who have imported a node but can’t load websites, are seeing connection timeouts, or can’t start the core. Capture the full error chain from a failed request, then check local listening ports, traffic routing, DNS, the remote port, and the protocol handshake—in that order. This guide covers log level settings, common error messages, and Windows commands for local tests, so you don’t mistake every problem for a dead node.

1. Open the runtime log and reproduce the failure

v2rayN is a GUI client; the core it launches handles proxy connections. A client UI issue, a core startup failure, and a failed individual connection are three different problems. Before reviewing logs, note the selected node, core type, and time of the failure. Don’t mix errors from switching between nodes.

  1. Note your current settings

    From the main window, note the client version, the selected node’s protocol and transport, then open Settings → Parameter Settings to check the local listening port. Settings groups may differ between the desktop and classic interfaces; refer to the options shown in your version.

  2. Enable diagnostic logging

    In Settings → Parameter Settings, look for the core’s “Log level” setting; in some versions, it’s under “Core: Basic Settings.” With Xray, start with info. If that doesn’t provide enough detail, temporarily switch to debug. Save your changes and restart the core to apply them.

  3. Reproduce the issue once

    Expand the runtime information or log panel at the bottom of the main window and note the time. Pause batch latency tests, select a single node, and try loading the failing website once. Copy the logs from around that time—not just the last line.

  4. Restore the log level

    When you’re done troubleshooting, restore the level to warning or its previous value. If file logging is enabled, check the file location and size as well. Diagnostic logs may include visited domains, local addresses, and outbound tags.

Common Xray log levels include debug, info, warning, error, and none. The level controls how much detail is recorded; it doesn’t change connection behavior. Setting it to error may hide useful connection details. Leaving debug on can generate a large volume of logs and expose more browsing metadata.

2. Follow the error chain: check the address, then the underlying cause

A log entry often wraps several layers of errors. The outer message may say a connection failed, the next layer may say no destination is available, and the innermost message may identify a refused connection or timeout. First identify which address appears in the error chain, then find the most specific system error. Don’t change protocols just because you see failed.

Log clueWhat it meansNext step
127.0.0.1:10808A local loopback address and port, often used by an app connecting to the local proxy.Check the listener and confirm the port configured in the app.
dial tcpA TCP connection is being attempted.Check whether the address that follows belongs to the node server or the destination website.
lookup、no such hostA problem occurred during DNS resolution.Check the domain in the error, the DNS path, and the response.
acceptedThe core accepted an inbound request.Check the corresponding outbound result; this doesn’t mean the remote connection succeeded.
direct、proxyPossibly an outbound tag in the current configuration.Compare it with the routing configuration; tag names aren’t standardized.

This simplified snippet illustrates the order in which to read a log; it isn’t from a real test. It shows a local TCP port refusing a connection. This message alone says nothing about the quality of the remote node.

dial tcp 127.0.0.1:10808: connectex: No connection could be made because the target machine actively refused it.

Key point: the address tells you what to troubleshoot

If the error points to a loopback address, check the local listener first. If it points to the node server, check the remote port. Identify both ends of the connection before deciding whether to change node settings.

3. Common errors and how to fix them

The exact wording may vary between cores and operating systems. The examples below show common error messages. Include the surrounding context when matching them, especially the address, port, transport type, and certificate name. A warning that appears once while everything works doesn’t need an immediate configuration change; it’s worth investigating when it recurs and coincides with an actual failure.

Error: connection refused

Cause: The destination refused the connection. Common reasons include no service listening on the specified port or a firewall actively rejecting the connection.

Fix: Check the address first. For a local port, confirm the core is running. For a remote port, verify the server and port in your subscription and ask the server administrator to confirm that the service is listening. Retrying won’t replace checking the port.

Error: i/o timeout

Cause: A read or write operation didn’t complete before its deadline. This can happen while establishing a TCP connection, during the TLS handshake, or while transferring data.

Fix: Use dial, read, or write in the error to identify the stage. Keep the same node and test again on a different network. A timeout alone doesn’t mean the password is wrong, and simply increasing the timeout may not help.

Error: failed to handshake

Cause: The handshake failed, but this message is only a summary. The certificate, authentication, EOF, or timeout details that follow point to the specific cause.

Fix: Check the protocol, TLS, SNI, transport, and authentication settings against the server’s requirements. For REALITY, also verify the public key, shortId, serverName, and client support.

Error: bind: Only one usage of each socket address

Cause: On Windows, another listener is already using the local address and port. A duplicate app instance is a common cause.

Fix: Find and close the process holding the port, or choose a different local port. If you change the port, update the proxy address in your browser, terminal, and any apps configured manually.

Error: no such host

Cause: DNS resolution didn’t return a usable result. The domain may be misspelled, DNS may have returned that it doesn’t exist, or the lookup path may have a problem.

Fix: First determine whether the domain belongs to the node or the destination website. Check the spelling and subscription update, then review the relevant DNS settings. Don’t replace every domain with an IP address; that can break TLS hostname matching.

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

Cause: Certificate validity checks failed. The server certificate may have expired, or your device’s date and time may be wrong.

Fix: Sync your system clock first, then ask the server administrator to check certificate renewal and the certificate chain. Don’t disable certificate verification as a permanent fix.

Error: failed to find an available destination

Cause: This is usually a summary of a failed destination connection, not necessarily a DNS problem. The underlying error may indicate a refused connection, timeout, or unreachable address.

Fix: Expand the full error chain and find the most specific lookup, dial tcp, or system error. Follow the guidance for that error rather than changing DNS as soon as you see this message.

EOF and connection reset by peer don’t prove an authentication failure on their own. They mean the remote end closed or reset the connection, possibly because of mismatched transport settings, server policy, connection reuse, or an intermediate network device. If this happens occasionally only when closing a page and new requests work, monitor it. If it occurs at every handshake, compare the server logs.

4. Narrow down the cause, from local ports to remote settings

The examples below use Windows PowerShell and assume the local proxy is listening on 127.0.0.1:10808. This is an example port, not a value used by every version. First check the local listening port and inbound type under Settings → Parameter Settings. Don’t assume the system proxy, a dedicated HTTP port, and a mixed port are interchangeable.

10808
Example local proxy port used in this section
443
Example HTTPS destination port
15 seconds
Maximum time allowed for the example request

Layer 1: Is a process listening locally?

Get-NetTCPConnection -LocalPort 10808 -State Listen
Test-NetConnection -ComputerName 127.0.0.1 -Port 10808

The first command displays the listener and its OwningProcess. If there’s no match, it reports that no matching object was found. The second command’s TcpTestSucceeded : True means only that the local TCP port is reachable; it doesn’t confirm SOCKS negotiation or a working remote proxy. To identify the process, run Get-Process -Id followed by its process ID, so you don’t accidentally stop another service.

Layer 2: Send a request explicitly through the proxy

curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 15 -I https://example.com/

This command requires the port to support SOCKS5. socks5h sends the destination domain to the proxy to resolve, instead of having curl resolve it locally first. The core’s actual DNS behavior still depends on its DNS and routing settings. example.com is a test destination, not the node server. Receiving HTTP response headers means this request completed the relevant connection path; it doesn’t mean every website is working.

Layer 3: Distinguish routing from remote connectivity

The system proxy controls how apps that honor it connect; routing rules control which outbound route the core uses for traffic it receives. To isolate the problem, temporarily switch to a routing mode that sends the test destination through the proxy outbound, then restore your original settings. To test the node’s port, set the computer name and port in Test-NetConnection to the actual values shown in the node details. A successful TCP test confirms only that the port is reachable; it doesn’t verify VLESS, VMess, or Trojan authentication or handshakes.

Key point: verify explicit proxy access before checking system proxy settings

If curl’s explicit proxy request succeeds but your browser still fails, leave the node settings unchanged and check the system proxy and browser settings first. This avoids introducing new variables when the remote connection is already working.

5. If the handshake fails, check the protocol and transport settings

Successfully importing a subscription only means the client read the configuration. It doesn’t mean the server is still reachable or that the current core supports every field. After updating, confirm that you’ve selected the updated entry. Don’t troubleshoot against a new subscription while still using an old node.

ConfigurationCheck firstCommon mistake
VMessUser ID, server-side authentication settings, local system time, and transport settings.Changing authentication fields without confirming the server’s requirements.
VLESS + REALITYUser ID, public key, shortId, serverName, flow, and core support.Copying the public key or flow setting from another node.
Trojan + TLSPassword, server address, port, SNI, and certificate chain.Disabling certificate verification to hide a hostname or certificate problem.
WebSocket transportPath, Host, TLS settings, and reverse proxy configuration.Treating path capitalization or a trailing slash as irrelevant.
gRPC transportserviceName, TLS settings, and HTTP/2 support in the reverse proxy.Changing the node port without checking the reverse proxy.

The transport and proxy protocol are separate layers: VLESS doesn’t automatically mean REALITY, and TLS isn’t the same as WebSocket. Use the full server configuration as your reference. Don’t switch a node to a different combination just because an option appears in the client’s menu. Change one field at a time, reproduce the same request, and record the result.

6. Common questions and what to check before sharing logs

Why can I run a latency test but still not load websites?

TCP latency reflects the connection to a particular port; it may not include protocol authentication or access to a website. Rerun the explicit proxy request above and compare it with the core logs from that time. A single latency result doesn’t verify the entire connection path.

Does a subscription update timeout mean the node is definitely broken?

Downloading a subscription and connecting to a node are separate requests. First check whether the subscription URL has expired under Subscription Groups, then confirm whether updates use a direct connection or the proxy. If updates use the proxy, you need a working node first. Don’t share the full subscription URL when posting logs.

Why does the browser work while command-line tools and games can’t connect?

Some apps don’t use the system proxy. For command-line tools, specify the proxy explicitly to test it; for other apps, check whether they support proxies. Before trying TUN, check permissions, routing, and DNS. Avoid changing both the connection method and node settings at once, or you won’t be able to compare results.

Why can’t I find the problem even with debug logging enabled?

Reduce background requests, keep one node and one destination, and reproduce the issue once. Save the full error chain and note the client, core, and operating system versions, as well as the time of the failure. If needed, ask the server administrator to check the server logs for the same time window.

When asking for help, keep the structure needed for troubleshooting but remove sensitive values. Don’t share usernames, subscription tokens, node credentials, or unnecessary browsing records. A screenshot showing only “timeout” usually doesn’t reveal which layer failed; a short, redacted error chain is more useful than a screenful of scrolling logs.

Finally, retest in the original order: the core starts successfully, the local port is reachable, the explicit proxy request gets a response, and your everyday apps connect as expected. Once all four checks pass, restore your usual routing and log level. This sequence makes it easier to verify results than changing DNS, ports, and protocols all at once.

v2rayN / v2rayNG downloads