This checklist covers failed subscription downloads, empty node lists after updates, parsing errors, and old nodes not being replaced in v2rayN, v2rayNG, and v2flyNG. Check the link and HTTP response first, then try direct or proxy updates, inspect the response body, Base64 encoding, and share-link format, and finally clear group data and verify the core connection.
Identify the stage where the update fails
A subscription update is not a single operation. The client must read the subscription URL, resolve the domain, establish TCP and TLS connections, receive an HTTP response, identify the body format, split the share links, and only then write the nodes to the subscription group. “Update failed” only means the chain did not complete; it does not prove that the node servers themselves are unavailable.
Start by checking two outcomes: did the client receive a response body, and did that body produce nodes? No response usually points to DNS resolution, the network path, certificates, or the HTTP status. Content downloaded but zero nodes generated is more likely to indicate an encoding, format, or protocol field the current client cannot recognize.
HTTP 200 only means the server returned content; it does not guarantee that the content is a valid subscription. A login page, error message, or expiration notice may also be returned with status 200. Likewise, 301 or 302 is not automatically an error, but repeated redirects, cross-domain jumps, or authentication required after a redirect may cause the client to stop updating.
Check the subscription link and update method in a fixed order
Subscription URLs often contain long parameters used to identify an account or subscription status. Dropping one character, copying the final punctuation, or having a chat app wrap the URL onto multiple lines can make the server return the wrong content. Copy the complete address again from the original management page; do not fill it in by hand based on visual similarity.
Verify the complete URL
In the client’s subscription group settings, paste the address again. Confirm that it starts with
https://or the explicitly supportedhttp://, contains no spaces or line breaks, and does not end with a Chinese full stop or comma.Try a direct update first
In v2rayN, open “Subscription Groups” → “Update All Subscriptions (without proxy)”. If the current network can reach the subscription domain directly, a direct update rules out a dead node or incorrect system proxy causing a dependency loop.
Try a proxy update next
If the direct request times out, select an old node that has already been confirmed to connect, then run “Subscription Groups” → “Update All Subscriptions”. A proxy update depends on the current core already running; a newly downloaded node cannot be used for this step.
Check the group toggle
Open “Subscription Groups” → “Subscription Group Settings”. Confirm that the target group is enabled, and make sure the URL was not accidentally entered in the notes, alias, or auto-update interval field.
Update one group separately
When multiple subscriptions exist, update only one target group first. This distinguishes a single bad URL from a problem affecting every request and avoids making results difficult to identify when nodes have the same name.
Record node changes
After the update finishes, compare the target group’s node count and update time. A success message with zero nodes means you should check the response format; a normal count with connection failures means you should continue with node parameters and routing.
Menu labels in v2rayNG and v2flyNG may vary slightly by interface version, but the workflow is the same: open “Subscription Group Settings” to edit the URL, return to the main screen, and select “Update Subscription”. Before updating, make sure you selected the target group rather than merely refreshing the current node’s connection status.
Use the exact error to locate network and server problems
The original error is more useful than “update failed”. Check the log area on the v2rayN main screen, or read the entries around the subscription request on the v2rayNG or v2flyNG log page. The wording may vary slightly with the system language and runtime environment, but the diagnosis is usually the same.
Error: The remote name could not be resolved
Cause and fix: The subscription domain did not resolve to an address. Check the spelling first, then switch to a working system DNS and restart the client before trying again. If only one domain fails, also confirm that the subscription endpoint has not changed.
Error: The operation has timed out
Cause and fix: The request did not finish within the time limit; it may be stuck during connection setup, the TLS handshake, or response download. Test both direct and proxy updates, and confirm that the selected old node can currently establish a connection.
Error: Response status code does not indicate success: 403
Cause and fix: The server rejected the request. Copy the URL again from the subscription management page and confirm that its identifier parameters are still valid. If the URL also shows a permission or expiration notice in a browser, resolve the subscription-side issue first.
Error: Too many redirects
Cause and fix: The URL keeps moving between multiple pages, or an old endpoint redirects to a login page. Stop using the outdated bookmarked address and obtain a new endpoint that returns the subscription body directly.
Error: The SSL connection could not be established
Cause and fix: The TLS handshake did not complete. Check the system date, time zone, and certificate environment, and correct any obviously wrong local time. Negotiation failures involving TLS 1.2 or TLS 1.3 may also be caused by an intermediate network device.
Error: An existing connection was forcibly closed
Cause and fix: The remote host or an intermediate network closed the connection after it was established. Compare direct and proxy paths, and temporarily disable local network filtering that intercepts HTTPS before testing again.
If every subscription domain fails to resolve, deal with the local network or DNS first. If only one subscription returns 403, a login page, or an expiration notice, the problem is more likely with that URL or the service status. Do not repeatedly reinstall the client instead of making this distinction; reinstalling will not repair invalid access parameters.
When the download succeeds but the node list is empty, check parsing and format
After receiving the response, the client must determine whether it contains a Base64-encoded collection of share links, plain-text share links arranged one per line, or another structure. Common share links begin with vmess://, vless://, trojan://, or ss://. If the body is actually a webpage, an unsupported configuration format, or only an error message, the update may report a parsing failure or finish with zero nodes.
| Response pattern | Possible meaning | What to do |
|---|---|---|
Starts with <!doctype html> or <html |
A webpage, login page, or error page was returned | Obtain the direct subscription URL again and check redirects and authentication status |
The entire body consists of letters, numbers, +, /, and = |
It may be standard Base64-encoded content | Check the length, padding, and decoded text; do not decode it twice |
| Multiple lines begin with protocol schemes | It may be a plain-text share-link list | Confirm that every line is complete and that the protocols and fields are supported by the current client |
| Only JSON or other structured fields are present | It may be API data or a proprietary configuration format | Use the generic V2Ray subscription format provided by the service |
| The body contains an expiration, permission, or rate-limit notice | The request succeeded but the service returned an application-level error | Resolve the expiration, permission, or request-rate issue, then fetch the subscription again |
Base64 converts every 3 input bytes into 4 encoded characters. The end may contain 0, 1, or 2 = padding characters. Some services omit padding, and some decoders handle that automatically. If the body is truncated, contains spaces, or lost characters during copying, it may fail to decode even if it still looks like Base64.
Valid share-link examples:
vmess://encoded-content
vless://identifier@server-address:port?parameters
trojan://identifier@server-address:port?parameters
ss://encoded-or-user-info@server-address:port
- Decoding should produce one or more complete share links, not another long encoded string identical to the original body.
- Each link must include its scheme, server address, port, and required parameters. Without an address or port, it cannot form a connectable node.
- VMess share content usually contains JSON data. Truncated JSON, damaged quote escaping, or incorrect field types can all cause the import to fail.
- VLESS and Trojan often put key parameters in the query string. Omitting everything after the question mark during copying can change the transport, TLS, or REALITY configuration.
- A subscription body that decodes successfully in a web tool does not mean the client supports every protocol parameter it contains. Use the client log and generated nodes as the source of truth.
How update methods, the system proxy, and local ports affect one another
“Update through proxy” usually means that the subscription request follows the client’s currently available proxy path. The common local SOCKS listening port in v2rayN is 10808, but it can be changed in the parameter settings. If the port was changed, the core is not running, or the system proxy still points to an old port, a proxy update may be refused immediately or wait until it times out.
Confirm that the core is running
On the main screen, select an old node and start the core. Check the log for normal listening messages. Without a running local proxy, do not select a proxy update.
Verify the local port
Open “Settings” → “Parameter Settings” and check the local SOCKS or mixed listening port. If it is set to
10808, the browser or system setting that calls this proxy must point to the same port.Rule out a proxy loop
If routing rules send the subscription domain through a dead proxy outbound, the update can get stuck on the old node. Run an update without a proxy first, or temporarily switch to a node that has been verified to work.
Check the system time
Confirm that the date, time zone, and time synchronization are correct. A substantial time offset can affect HTTPS certificate validation and appear as a TLS connection error rather than a format error.
Restart the listening process
After changing the port, DNS, or core type, stop and restart the core so the old process releases the listening port, then run another single-group update.
Error: Connection refused 127.0.0.1:10808
Cause and fix: The request tried to connect to 10808 on the local machine, but no process is listening there. Start the core or change the subscription update method to bypass the proxy. If you changed the listening port, update the calling client or system setting as well.
Error: address already in use
Cause and fix: Another process is using the listening port, so the core could not start normally. Close duplicate client instances, or choose an unused port in “Settings” → “Parameter Settings” and restart.
Routing mode also affects the result. If the subscription domain is configured for direct access, “update through proxy” may not force it through the proxy. The exact path depends on the client’s update implementation and current routing rules. During troubleshooting, change only one variable at a time and record the results for direct updates, proxy updates, and node switches instead of changing DNS, ports, routing, and core type simultaneously.
Second-level checks when updated nodes still cannot connect
A successful subscription update only proves that node information was written to the client; it does not mean every node can establish a connection. Treat post-update connection failures separately from subscription parsing: confirm that the new node belongs to the target group, then read the core log to determine whether the failure is in DNS resolution, port connection, TLS parameters, user identification, or the routing outbound.
- Confirm the selected node: After the update, manually select a new node in the target group instead of continuing to use an old entry that was deleted or renamed.
- Restart the core: If the subscription replaced the current node’s parameters, stop and restart the core so the new configuration loads completely.
- Check the address and port: The server domain must resolve, and the port must be within the valid range from
1to65535. Make sure it was not copied as an empty value. - Verify transport parameters: WebSocket, gRPC, and TCP are not interchangeable. Fields such as the path, host name, and service name must match the server-side configuration.
- Verify security parameters: Fields related to TLS, REALITY, SNI, the fingerprint, and the public key must retain the original values supplied by the subscription. Do not copy them from another configuration merely because the node names look similar.
- Check routing rules: Custom geosite, geoip, or domain rules may send the test target to direct access, a block, or the wrong outbound. Use the log to confirm which outbound was actually selected.
- Distinguish client cores: v2rayNG uses the Xray core, while v2flyNG uses the v2fly core. Their support for some extended parameters differs, so not every node in the same subscription will necessarily work with both cores.
Final checklist
If the earlier checks did not locate the problem, run through the sequence below once more. The order first rules out easy-to-verify URL and request issues, then moves to parsing, ports, and node configuration, avoiding repeated client changes when the subscription itself has already expired.
Copy the URL again
Copy the complete link from the original subscription management page. Delete the old entry before pasting it again, then check for spaces, line breaks, and trailing punctuation.
Compare both update methods
Run an update without a proxy first, then select a verified old node and run an update through the proxy. Record whether the two errors match.
Read the status and body
Confirm whether the response was 200, a redirect, an authentication error, or a timeout, and determine whether the body is subscription content, a login page, or an application message.
Validate the encoding format
Check whether the Base64 body was truncated and whether decoding produces complete VMess, VLESS, Trojan, or Shadowsocks share links.
Verify listening settings
Check the local port under “Settings” → “Parameter Settings”. Confirm that the core is running and that the calling client is not still using the old port.
Validate one node
Select one node from the update, restart the core, and read the log to verify DNS resolution, connection, TLS, transport, and routing separately.
When contacting the subscription provider, include the time of the incident, HTTP status, client name, a comparison of direct and proxy update results, and screenshots with identifying parameters masked. Do not send the complete subscription URL or full node share links. The closer the information is to the failure stage, the easier it is to distinguish an invalid link, an abnormal server response, and client parsing incompatibility.