· Troubleshooting · About 10 minutes

How to Read v2rayN Logs: Common Errors and Troubleshooting Steps

Understand common v2rayN errors—from connection refused and timeouts to handshake failures—and follow a step-by-step troubleshooting path from your device to the server.

At a glance

When troubleshooting v2rayN, first check whether the core is running, then find out whether the connection is stuck at the local listener, DNS lookup, remote port, or protocol handshake. This guide is for users who have imported a subscription but still can’t open webpages. Use common error messages, Windows commands, and one-change-at-a-time tests to narrow “it doesn’t work” down to a specific, fixable issue.

Read the full error chain, not just the last line

v2rayN manages configuration, subscriptions, and proxy settings; the selected core handles the actual connection. Status messages in the main window and core output may come from different layers. A successful subscription update only means the configuration was retrieved. A core startup message doesn’t prove that the remote server is reachable.

Check the log or information area at the bottom of the main window. Note when a failure occurs, then expand that error to see its context. Menu names and wording can vary by version. This guide uses the Windows desktop app; before changing settings, check your actual configuration under Settings → Parameter settings rather than guessing from screenshots.

  1. Keep test conditions consistent

    Choose one server and one webpage, and pause other apps that are retrying continuously. Note whether System proxy and TUN are enabled, and don’t switch between them while troubleshooting.

  2. Find the first failure

    Note the current time, then reopen the target webpage once. Check only the errors around that attempt so you don’t mistake an earlier log entry for the current issue.

  3. Keep the surrounding error details

    Keep a few lines before and after the error. Look for the destination address, port, and most specific underlying cause. Before sharing logs, redact subscription URLs, user IDs, and authentication details.

  4. Change one thing at a time

    Change only one setting per test: port, DNS, server, or transport. Save, restart the core, and retry the same destination. Note whether the error changes.

Local listener failure: check the proxy port first

If the core exits as soon as it starts, don’t change the node yet. The app must first connect to the local proxy listener before it can reach a remote server. In logs, 127.0.0.1 is the local loopback address. The troubleshooting steps for “connection refused” differ completely depending on whether the error is at the local listener or the server.

10808
Example local proxy port used in this guide; check your settings
443
Common TLS port; nodes aren’t required to use it
53
Common port for traditional DNS queries

Error: address already in use

Cause: The address and port the core is trying to listen on are already in use, possibly by another instance of the client or a different listening process.

Fix: Check which process is using the port. Close any confirmed duplicate instance, or change the local listening port under Settings → Parameter settings. Update any apps where you’ve manually configured the proxy as well.

Error: Only one usage of each socket address

Cause: This common Windows socket error usually means the same address and port can’t be bound more than once.

Fix: Identify which process owns the port. Don’t terminate an unfamiliar system process. Close any duplicate app, then restart the core.

Run the read-only query below in PowerShell. This example checks 10808; replace it with your local port if it’s different. If the first command returns nothing, no matching TCP listener was found at that time. It doesn’t check UDP or confirm remote connectivity.

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

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

Connection refused vs. timed out: tell an active rejection from no response

Once the local listener is working, check the remote address and port the log is trying to reach. A refused connection usually means a rejection was received; a timeout means the operation didn’t complete within the allotted time. Neither error alone tells you whether your account is valid, and not every timeout is a DNS issue.

Error: connection refused

Cause: No service is listening on the destination port, or an intermediary is actively rejecting the connection. Windows may also show No connection could be made because the target machine actively refused it.

Fix: First check whether the destination in the error is local. Then verify the server port in your subscription. If the remote configuration is correct but connections are still refused, ask your service provider to check the listener and firewall.

Error: i/o timeout

Cause: A network read or write didn’t complete in time. This can happen while connecting to the server, during the handshake, or while forwarding data.

Fix: Use nearby messages such as dial tcp, TLS errors, or read errors to identify the stage. Retry the same node on another network; don’t just increase the timeout.

Error: context deadline exceeded

Cause: An operation exceeded its deadline. It could be a subscription fetch, DNS request, or connection test.

Fix: Identify which operation triggered the error, then check whether it uses a direct connection or the proxy. A failed subscription request doesn’t mean every node is unusable.

Observed symptomCheck firstWhat you can’t conclude yet
Connection to the local proxy port is refusedWhether the core is running and the app is using the correct portWhether the remote server is available
Connection to the remote TCP port times outAddress, port, network path, and server firewallWhether the user ID is correct
TCP connects, but TLS failsServer name, certificate, system time, and TLS settingsWhether proxy protocol authentication succeeded

Bottom line: check protocol settings after the port is reachable

If the connection is still timing out while dialing over TCP, check the network path and remote listener first. SNI, transport paths, and user IDs are more relevant once the handshake has started.

DNS lookup failure: identify which domain failed

DNS translates domain names into IP addresses. The name that failed to resolve in the log could be the node’s server, the destination website, or the hostname of a DNS service. Identify the name before troubleshooting to avoid repeatedly changing DNS just because a webpage won’t load.

Error: no such host

Cause: The current DNS resolution path didn’t return a valid result for this hostname. Possible causes include a typo, missing DNS records, or the resolver in use.

Fix: Check the full domain in the error. Make sure the subscription doesn’t contain extra spaces or an outdated address, then check both system DNS and the core’s DNS settings.

Error: failed to lookup ip

Cause: The DNS query didn’t return the required IP address. Check the following timeout or lookup error for more detail.

Fix: Check the DNS address used by the core and how traffic to it is routed. In particular, see whether DNS requests depend on a proxy outbound that isn’t connected yet.

If only one destination website fails while the node server remains reachable, focus on that site’s DNS results, the route it matches, and the destination service. Routing rules decide which outbound connection handles traffic; they don’t automatically make every domain resolvable.

TLS handshake failures: check the time, server name, and transport settings

TLS can still fail after a TCP connection is established. TLS sets up a protected connection; proxy protocols such as VMess and VLESS have their own configuration requirements. A reachable port doesn’t mean the TLS handshake, transport, and proxy authentication have all succeeded.

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

Cause: The certificate’s validity period doesn’t match the time used for verification. The server certificate may have expired, or your device’s date and time may be wrong.

Fix: In Windows, go to Settings → Time & language → Date & time, check the clock, and sync it. If the time is correct but the error persists, contact your service provider about the certificate.

Error: x509: certificate signed by unknown authority

Cause: The current trust store can’t verify the certificate chain. The server may be missing part of its certificate chain, or a certificate may have been substituted somewhere on the network.

Fix: Check whether you’re on a network that requires a dedicated certificate, and ask your service provider to verify the full certificate chain. Don’t disable certificate verification as a routine fix.

Error: tls: handshake failure

Cause: The other end didn’t complete TLS negotiation. Possible causes include the server name, protocol settings, or connecting to the wrong server port.

Fix: Compare the TLS setting, SNI, and port with a valid subscription. For REALITY, also verify the matching parameters, including the public key, shortId, and server name.

EOF and connection reset by peer describe a connection that was closed; they aren’t specific authentication errors. A transport mismatch, incorrect WebSocket path, reverse proxy misconfiguration, or the destination service closing the connection can all cause similar messages. Check which stage failed instead of reinstalling the client just because you see EOF.

No request in the logs: check the system proxy and routing entry point

If no matching request appears in the core when you open a webpage, the app may not be sending traffic to the client, or the current log level may simply omit access details. No log entry proves neither that the node is working nor that traffic is bypassing the proxy.

  1. Check the proxy entry point

    In the v2rayN main window or tray menu, check the current status under System proxy. If you need the system proxy, select Set system proxy, then confirm that the address and port recorded in Windows match the local listener.

  2. Check app settings

    See whether the browser or target app has its own direct connection setting, a different proxy port, or a proxy extension. An app’s own settings may not follow the system proxy.

  3. Check the route

    Once a request reaches the core, check its outbound tag and the active routing rules. Traffic routed directly won’t automatically use a selected server.

  4. Temporarily enable detailed logs

    Under Settings → Parameter settings, look for the log-level options. If needed, temporarily switch to debug, reproduce the issue once, then restore the previous level. Avoid keeping sensitive destination addresses in logs longer than necessary.

Common questions and what to include in a bug report

The latency test shows a number. Why won’t webpages load?

First check whether the test was a TCP test or a real connection test. A TCP test mainly confirms that the port is reachable; it doesn’t verify all proxy authentication or website access. Retry one specific webpage and compare the handshake and routing logs from the same time.

A subscription update timed out. Should I switch nodes first?

First confirm that the subscription fetch failed. In Subscription groups, check whether the update uses a direct connection or the proxy. If it’s set to update through the proxy, you’ll need a working proxy connection first. Don’t post your full subscription URL when asking for help publicly.

It works on another network. Do I still need to change the protocol?

Keep the original settings and record how the same node and port behave on both networks. The difference points toward the network path, DNS resolution, or access restrictions, but check the error stage too. Don’t immediately rewrite the protocol or transport settings.

Should I share my entire configuration and all logs?

No. Share the client version, core name and version, operating system, proxy mode, reproduction time, and redacted error context. Remove subscription tokens, user IDs, passwords, and private keys. Include only the field names and error details needed to diagnose the issue.

Before reporting the issue, make one final pass in order: confirm the local port is listening, the app is actually using the proxy, the server hostname resolves as expected, and the remote port is reachable. Then check TLS and proxy protocol settings. If you manage the server, check its listener, firewall, certificate, and error logs at the same time. If you use a subscription service, share the steps you’ve already confirmed with the provider; that’s more useful than simply saying “it timed out.”

Bottom line: let the failure stage guide your next step

After each test, note what changed, where the error occurred, and whether the result was different. If the error changes from a dialing timeout to a certificate error, you’ve moved on to the next layer. There’s no need to reset every setting and start guessing again.

Download v2rayNChoose a client for your platform