For v2rayN users whose node is selected but pages won’t load, or whose logs keep filling with errors. Enable useful logging, then make one consistent request to check the local inbound, route selection, and remote outbound. Use the destination address, port, and timestamp in each error to distinguish port conflicts, DNS failures, timeouts, and handshake mismatches. Change one setting at a time.
First, distinguish UI messages from core logs
v2rayN is a client management interface; the selected core handles local connections, routing, and server connections. A failed subscription update, failed latency test, and failed core startup are outcomes of different operations. A red message alone doesn’t mean the node is unavailable. This guide focuses on configurations using the Xray core; other cores may use different error wording and log fields.
The main window’s information or log area is useful for checking startup activity and immediate errors. To trace which inbound handled a request and which outbound it used, temporarily set the log level to info; use debug only when you need more context. A warning in the log is a warning—it doesn’t mean the core has exited.
-
Record the current setup
Note the v2rayN and core versions, selected node, local listening port, and routing mode. Find version details under Help → About or in the startup messages. Keep the current configuration, and don’t update subscriptions or change multiple nodes yet.
-
Enable logging
In common desktop versions, open Settings → Parameters, find the logging options, enable logging, and set the log level to
info. Save and restart the core. Tab names and labels vary by version; use the actual logging toggle and level setting as a guide. -
Reproduce the issue once
Clear the current log view or note the start time, then visit one fixed URL. After one success or failure, stop refreshing and keep about 20 lines from before and after the error—not just the last line.
-
Restore the log level
When you’ve finished troubleshooting, restore
warningor the original log level. Before sharing logs, redact subscription URLs, node credentials, UUIDs, public IP addresses, and browsing history. Don’t publish the full configuration file.
If you maintain a custom Xray configuration, the snippet below shows the logging section. It contains only the log object, not a complete config.json; don’t use it to replace the whole configuration. For ordinary nodes, v2rayN may regenerate its runtime configuration when you switch nodes, so use the client’s settings where possible.
{
"log": {
"loglevel": "info"
}
}
Trace a log entry through inbound, routing, and outbound
Start by asking: “How far did the request get?” The browser’s connection to the local proxy is the inbound. The core’s decision to connect directly, use a proxy, or block the request is routing. Connecting to the node and negotiating the protocol is the outbound. Seeing a node selected only confirms the UI has selected a configuration; it doesn’t mean all three stages succeeded.
| Stage | Log or system clue | What to check next |
|---|---|---|
| Local inbound | Listener fails to start, or no new access entry appears after a test request | Check the process, local port, system proxy, and whether the app is configured to use a proxy |
| Route selection | The outbound tag in the access log doesn’t match expectations | Check rule order and the outboundTag target |
| Node connection | Connection to the node address is refused or times out | Check the server address, port, network path, and service status |
| Protocol handshake | Certificate, authentication, or protocol error after TCP connects | Check TLS, transport settings, and server parameters |
The examples below show simplified log formats; wording varies between versions. The labels in square brackets come from the configuration, so don’t assume the outbound is always named proxy. An accepted entry means the local request was accepted or processing began—it doesn’t guarantee the remote page loaded successfully.
from tcp:127.0.0.1:53124 accepted tcp:example.com:443 [socks-in -> proxy-out]
Read the destination first, such as example.com:443, then check the routing tag. Finally, look for a later error with a similar timestamp or the same connection ID. If the error names the node server address, focus on the outbound connection. If it comes from a direct outbound and names the website, changing the node password shouldn’t be your first step.
Common errors and what to check first
Full errors often include several layers of context: an outer message such as “failed to process connection,” followed by the specific cause, such as connection refused. Read from the end of the error chain to find the cause, then work back up to see whether the failure occurred locally, at the node, or at the destination. The snippets below are common examples; prefixes vary by system and core version.
Error: connection refused
Cause: The destination port actively refused the connection. Common reasons include a service that isn’t listening, an incorrect port, or an active firewall rejection.
What to do: First check whether the destination is 127.0.0.1. For a local address, check the core and listening port. For a remote address, verify the node port and server status. Don’t assume it’s a DNS problem.
Error: i/o timeout
Cause: A network operation didn’t finish before its deadline. It may have stalled during connection, reading, or the handshake; this error alone doesn’t mean the node is down.
What to do: Use the destination address in the earlier log entries to identify the stage. Retry the same request on a different network or with a known-working node, changing only one condition at a time.
Error: address already in use
Cause: Another process is using the local address and port the core needs to listen on. A second client instance may also still be running.
What to do: Identify the process using the port and, once you’ve confirmed what it is, close any duplicate instance. If you switch to a different port, update the app’s proxy address too.
Error: no such host
Cause: The current DNS lookup didn’t return a usable address. Possible causes include a misspelled domain, a resolver issue, or network connectivity problems.
What to do: Check whether the failed lookup is for the node domain or the destination domain, then inspect the relevant DNS path. A successful system lookup doesn’t guarantee that the core’s built-in DNS will work.
Error: tls: failed to verify certificate
Cause: Certificate verification failed, possibly because of an expired or not-yet-valid certificate, an untrusted chain, or a server name mismatch.
What to do: Check the system clock and TLS server name, and ask the server administrator to verify the full certificate chain. Don’t treat disabling certificate verification as a routine fix.
Error: EOF / connection reset by peer
Cause: The other end closed or reset the connection. This may be caused by the server, mismatched transport settings, or interference from a network device along the way.
What to do: Compare the transport type, path, and handshake settings with the server configuration, then test on another network. This line alone doesn’t prove the credentials are wrong.
Use the local port to check whether requests reach the core
Here’s a Windows troubleshooting example. Assume the SOCKS listener is on port 10808 and the node server uses port 443. These values are for illustration only—not universal defaults. Before running the commands, replace them with the ports actually enabled in the UI or runtime configuration.
In PowerShell, check the listener first, then make a request with the proxy specified explicitly. The second command lets the SOCKS proxy resolve the domain and removes browser system-proxy settings as a variable. The test URL is for reproducing the issue, not for determining whether every site is reachable.
Get-NetTCPConnection -State Listen -LocalPort 10808
curl.exe --noproxy "" --proxy socks5h://127.0.0.1:10808 --connect-timeout 5 --max-time 15 -I https://example.com/
- No listener shown: Check the core startup errors. If the port is already in use, run
netstat -ano | findstr :10808to find the PID, then identify the process in Task Manager. Don’t terminate an unfamiliar system process. - Connection to the local proxy is refused: Check the listening address and port. If the listener is bound to the loopback address only, test from the same device; a connection attempt from another device says nothing about the node’s status.
- The command works, but the browser doesn’t: Check the system proxy, browser-specific settings, and extensions first. In common v2rayN interfaces, use the tray menu’s System Proxy → Automatically configure system proxy option. An explicitly proxied command doesn’t depend on this setting.
- The command fails too: Match the command’s start time to the core log, then trace routing and the outbound connection. The 15-second timeout is a limit for this test only, not a fixed timeout for the core or server.
Takeaway: rule out app proxy settings first
If an explicit SOCKS request succeeds, keep the node configuration and fix the connection between the app and local proxy first. If it fails too, use the logs to trace routing and the remote connection. This avoids repeatedly changing a node that may already be working.
Check routing, DNS, and handshake settings one by one
Once the local port accepts requests, check whether routing behaves as expected. Xray routing rules are usually evaluated in order, so a broad rule earlier in the list may take precedence over a more specific one. Inspect the actual tags in the generated configuration; don’t infer the outbound from the node name shown in the UI.
- Check the outbound tag: The rule’s
outboundTagmust match the target outbound’stag. If the log shows the request going to a blocked outbound, check the rules before changing TLS settings. - Distinguish the two types of DNS lookup: If the node domain can’t be resolved, the client can’t connect to the server. If the destination domain can’t be resolved, direct connections or rules that match IP addresses may be affected.
Resolve-DnsName example.comtests only the system resolver; it doesn’t test the core’s DNS resolution. - Check the system clock: In Windows, open Settings → Time & language → Date & time, turn on automatic time setting, and sync. An incorrect clock can affect certificate validity checks and time-sensitive authentication.
- Check the transport settings: The WebSocket path and Host, TLS server name, node port, and encryption settings should all match the server. Connecting to the same IP doesn’t mean you’re connecting to the same virtual host.
- Check core support: v2rayN manages the client; protocol support depends on the core actually in use. In particular, importing a share link successfully doesn’t prove that the core supports the REALITY and XTLS Vision settings it contains.
You can temporarily switch to the client’s global proxy routing mode for comparison, but note the original mode and restore it as soon as the test is done. If global mode works but the original split-routing mode doesn’t, focus on the rules and DNS policy. This doesn’t prove routing is the cause: the two requests may also use different DNS resolution paths.
Common questions about log troubleshooting
There are warnings but no access entries. Did the request reach the core?
Not necessarily. Temporarily set the log level to info, restart the core, and make one explicitly proxied request. Access and error logs may be recorded separately. Also confirm you’re checking output from the current core, not just subscription update messages.
Latency tests show a value. Why won’t pages load?
First, distinguish TCP latency from an actual proxy request. A successful TCP connection only proves that the port was reachable at that moment; it doesn’t confirm that authentication, TLS, and routing are working. Retry the fixed-URL request above and check whether it fails during the handshake or while reading.
A subscription update timed out. Should I change the node settings?
First identify whether the failed request was for the subscription URL or the node’s outbound connection. Check whether the subscription has expired and whether the current update method can reach its domain. If the UI offers an option to update through the proxy, first confirm that an existing node works. A failed subscription fetch doesn’t mean saved nodes are unusable.
The same node works in v2rayNG but fails on desktop. Why?
First compare both clients on the same network with the same settings. If v2rayNG uses the Xray core, also compare core versions, TLS and REALITY fields, DNS, and split-routing rules. v2flyNG uses the v2fly core; don’t assume the two Android clients support the same protocols.
What should I include when asking for help?
Include your operating system, v2rayN and core versions, protocol and transport type, time of reproduction, actual listening port, and about 20 redacted log lines from before and after the error. Saying whether the explicit proxy test succeeded is more useful than posting only a screenshot of a connection timeout.
The goal isn’t to eliminate every warning from the logs. It’s to make the same request succeed consistently and identify which stage originally failed. After confirming the fix, restore the normal log level and routing mode, then test one destination that should connect directly and one that should use the proxy. This helps ensure temporary test settings aren’t left in the configuration.
v2rayN Downloads and Setup Guides
If you need to choose a client again, start with the download page for your operating system. For a first-time setup, follow the guide to check node import, the local port, and the system proxy before troubleshooting logs.