Technical Reference · Protocols and Cores
V2Ray Protocol and Core Technical Reference
VMess / VLESS / Trojan / Shadowsocks / REALITY
Use this page as a technical reference: start by distinguishing protocols, transport and security layers, then check core compatibility, subscription formats and performance limits. For your first install, importing a subscription and testing the connection, follow the user guide. Return to the relevant section when you run into configuration or compatibility issues. For desktop clients, start with v2rayN; find the installer in the Download Center.
Connection Settings: Protocol, Transport and Security Layers
A connection entry in a client is more than a protocol name. It describes the remote address, authentication, proxy protocol, transport used to carry data and security layer protecting the connection. Seeing “VLESS” in a list tells you about only one layer; whether the connection works depends on the other settings matching the server. So start by understanding the full configuration, not by comparing protocol names.
The Proxy Protocol Defines the Connection
The proxy protocol determines how the client specifies a destination, authenticates and encapsulates subsequent data. VMess, VLESS, Trojan and Shadowsocks all belong to this layer, but they handle authentication and encryption differently. Two entries that look like they use a username may rely on different credentials, such as a UUID and a password. They are not interchangeable just because both appear in a “user” field.
The remote server address is not the website you ultimately visit. The client first connects to the proxy server, then tells it which destination to reach. Keep these two stages separate when troubleshooting: if the client cannot connect to the server, check the address, port and handshake first. If only a particular destination fails, check routing, name resolution and the destination itself. Conflating the two can make it look as if the entire protocol is unavailable.
Transport Determines How Data Is Carried
Transports such as TCP, WebSocket and gRPC determine how proxy data travels over the underlying connection. TCP carries it directly; WebSocket adds an upgrade handshake and message frames; gRPC relies on the relevant HTTP/2 mechanisms. WebSocket and gRPC are often used with existing reverse-proxy infrastructure, but that adds more requirements, including paths, service names and forwarding rules. They are not inherently faster than a direct connection.
Fields such as “path,” “Host” and “service name” in a client are usually transport settings, not node labels. A WebSocket path must match the server and any forwarding rules in between; a gRPC service name is not arbitrary. Some fields can be left blank because a particular combination has a default, not because every server accepts an empty value. If in doubt, keep the imported settings and ask the configuration provider what each field means.
Multiplexing is another separate setting. It lets multiple streams share an underlying connection to reduce the cost of opening connections, but it can also amplify congestion or duplicate capabilities already provided by a transport. Do not treat “multiplexing enabled” as a universal optimization. First establish a stable baseline using the server's recommended settings. Then compare page load times, long-lived connections and concurrent requests with multiplexing on and off.
Keep the Security Layer Separate from Application Encryption
TLS encrypts the connection between the client and proxy server and verifies the server's identity. REALITY is a different security-layer mechanism that must be configured at both ends. Neither is a proxy protocol that can be swapped with VLESS. A website's HTTPS connection runs inside the proxy connection: the outer layer protects traffic between the client and proxy server, while the inner layer protects application data between the browser and website. They serve different purposes.
| Layer | Typical settings | What to check |
|---|---|---|
| Proxy protocol | VMess、VLESS、Trojan、Shadowsocks | Protocol, credentials, encryption method |
| Transport | TCP、WebSocket、gRPC | Path, Host, service name |
| Security layer | TLS、REALITY | Server name, trust material, related settings |
| Local traffic handling | System proxy, TUN mode | Whether app traffic reaches the client |
System proxy settings, TUN mode and routing rules handle local traffic entry and routing decisions. Enabling the system proxy does not mean every app will use it. TUN mode covers more traffic, but still depends on routing and permissions. A correct protocol with a browser that is not using the proxy is a different problem from an incorrect handshake. The comparisons below assume traffic reaches the client and the server configuration is known; local routing differences are not counted as protocol performance.
VMess and VLESS: Authentication and Encryption
VMess emerged during Project V's early development, handling authentication, request details and data protection. VLESS uses a lighter protocol design and relies more on a companion security layer. Both commonly identify users by UUID and appear in graphical clients' add-server menus, but similar fields do not mean the configurations are compatible. If the server accepts VMess, changing the client's protocol dropdown to VLESS will not make it work.
VMess: Integrity and Compatibility
Modern VMess configurations generally use AEAD authentication. Older configurations may include legacy authentication settings such as alterId. If you encounter an older share link, check which authentication method the server actually uses; do not assume legacy settings are universal. With common AEAD configurations, clients typically do not need an extra user ID added manually. Use the imported values and server instructions as your guide.
VMess security options control the protocol's own data encryption. They are separate from the TLS toggle in transport settings. An “auto” option usually means the core selects a suitable method based on its capabilities; it does not mean the traffic is unencrypted. Follow the server's settings if it restricts available methods. To troubleshoot compatibility, restore the values supplied by the provider rather than cycling randomly through encryption options.
Check the system clock, too. VMess authentication involves time information, so a significantly incorrect device clock can cause authentication to fail while looking like a network timeout. Enable automatic time synchronization and try again before changing the UUID. If the same configuration works on another device, compare the clocks, selected cores and transport settings to isolate the difference instead of recreating every entry.
VLESS Is Lightweight, Not Self-Securing
VLESS does not provide the same built-in payload encryption as VMess, so common deployments pair it with TLS or REALITY. A typical value in the client's encryption field is none; that describes this protocol field, not the security of the entire connection. Check whether a security layer is enabled and how the server's identity is verified. Judging connection security from a single field leaves out the most important context.
The flow setting in a VLESS configuration is not a speed tier. For example, xtls-rprx-vision specifies a particular flow-control mechanism that must be supported by the server, core and connection combination. Entering it when the server is not configured for it can prevent communication entirely. Conversely, if the server requires it and the field was lost during import, toggling ordinary TLS will not fix the problem.
A practical reason to choose VLESS is that the existing server uses a compatible TLS or REALITY setup and the client core can represent it fully—not that a newer protocol name guarantees better speed. Simpler protocol processing may reduce some overhead, but the route, transport, device encryption capabilities and concurrent load still matter. Migrate a stable VMess setup only when you have a clear compatibility or maintenance goal.
Verify Both Configurations in Your Client
After importing an entry into v2rayN, open its settings and check the protocol, server, port and UUID first, then review the transport, security layer and advanced fields. You can rename a node, but do not rewrite its authentication ID. Check v2rayNG in the same order, paying particular attention to the server name and flow settings hidden under advanced options. Test after saving to ensure the active entry is not still using an older configuration.
If a connection fails immediately after import, check the logs to identify the stage. If the server connection was never established, check the network and port. If the handshake was rejected, review authentication, the security layer and flow. If the connection comes up but some destinations fail, check routing and name resolution. For more context, see how four protocols compare in real-world use. There is no need to change every setting at once when troubleshooting.
Trojan and Shadowsocks: Two Approaches to Security
Trojan and Shadowsocks often appear in the same node list, but they handle authentication and encryption differently. A typical native Trojan setup uses TLS to establish a secure channel, then handles proxy requests and password authentication inside it. Shadowsocks protects proxy traffic using a shared secret and a selected cipher suite. Compare the complete deployment, not just the fact that both clients show a “password” field.
Trojan Depends on TLS
The Trojan password is an access credential; the server name and certificate verification establish the server's identity. Both matter. A correct password with a mismatched certificate name should still fail, and a trusted certificate with the wrong password cannot establish a valid proxy session. If the provider gives you a domain name, check that it is also used in the security-layer settings. Replacing the server address with an IP address while leaving the other fields unchecked is not enough.
A native Trojan setup commonly uses TCP and TLS, but a particular core or server implementation may add other transport options. The same Trojan label does not guarantee the same transport. If a configuration includes a WebSocket path or other extension fields, confirm that the selected core supports that implementation. Recognizing the trojan:// prefix alone does not prove the importer preserved every extension.
If the TLS handshake fails, first check the system clock, server name and certificate chain, then confirm that any forwarding layer actually passes the connection to the intended service. Do not leave certificate verification disabled just to make a test pass. Disabling it weakens the mechanism that distinguishes a trusted server from other endpoints, so a successful test still does not prove the configuration is correct. Fixing the match between the name and certificate is the reliable solution.
Shadowsocks Method Names Must Match Exactly
Shadowsocks has evolved through several encryption schemes. Modern deployments commonly use AEAD methods, and newer suites may require credentials in a different format. The client must support both the method used by the server and its corresponding credential format. Method names, key encoding and password strings are connection settings; do not substitute them just because the names look similar. The same server address can also use entirely different authentication settings.
With traditional password-derived configurations, the password string is used to generate the actual key. Some newer suites instead require an encoded key of a specific length. Both may appear in a password field, but they do not mean the same thing. When copying, watch for leading or trailing spaces, line breaks and encoding characters. If validation fails, check the input requirements for that method instead of deleting characters until the client accepts the value.
Shadowsocks UDP support also depends on the entire path. The server must enable it, the connection must allow it, and the client's local traffic handling must forward UDP. A working webpage usually proves only that some TCP traffic is working; it does not guarantee real-time communication or other UDP services will work. If only a particular app is affected, identify its traffic type and check the relevant path before changing the encryption method.
Compare Configuration Simplicity and Maintenance
Shadowsocks often has fewer configuration fields, making it easier to deploy in a known environment. Plugins and extensions, however, change what is compatible. If a share link contains extension parameters, check whether the specific cores and interfaces in your three clients support them; do not dismiss plugin fields as ordinary comments. Trojan usually requires additional certificate and domain maintenance, while relying on the established TLS trust model for server authentication.
Ranking Shadowsocks as “fastest” and Trojan as “slower” leaves out the conditions needed for a fair comparison. Hardware-accelerated algorithms, connection reuse, server load and the network path can all change the results. For everyday desktop use, prefer a complete configuration with a well-maintained server and ongoing support. On mobile devices, compare background stability and battery use under the same workload.
If an existing Trojan or Shadowsocks entry works reliably, there is no need to change it just to make the protocol names in your list consistent. Migration makes sense when an older method is no longer supported, the server configuration has changed, or your workload needs a capability the current setup lacks. Keep the old entry for comparison, test the new configuration, then disable the old one. Avoid changing credentials and client settings at the same time.
TLS and REALITY: Server Identity and Handshake Settings
TLS and REALITY often appear under a “Security” menu or similar in clients. They do not determine which destination website to visit; they protect the connection between the client and proxy server. A common VLESS setup may use either one, and standard Trojan deployments rely on TLS. The security layer must match the server configuration. It is not an add-on that the client can enable unilaterally.
TLS Names, Certificates and Addresses
TLS connections involve several names that are easy to mix up: the address the client dials, the server name used in the handshake and the name listed in the certificate. The dial address determines where traffic goes; the server name is typically sent as SNI and used to verify identity. These values can legitimately differ, but only when the server is designed that way. Changing the address to another server while keeping the old name will not automatically produce a working connection.
Certificate verification checks trust, validity dates and name matching, among other things. An incorrect system clock can cause validity checks to fail; an incomplete certificate chain may surface only on some devices; and a name mismatch often follows copied settings or a manually changed address. Do not hide these issues by disabling verification. First check the provider's domain and your device clock, then confirm which server name the client is actually using.
ALPN negotiates the application-layer protocol. Whether you need to set it, and what value to use, depends on the transport and server design. Combinations such as gRPC specifically require HTTP/2, while a standard connection may not need a manually specified value. Copying an ALPN list from another node can make a working handshake fail. A field being editable does not mean it should be set manually.
REALITY Requires a Matching Set of Parameters
REALITY uses a verification mechanism different from a conventional certificate deployment and commonly appears in Xray-based connection setups. The client typically needs the server name, verification material supplied by the server and a short ID. Field names can vary between clients and cores. The server's private key must stay on the server; the client imports verification material, not every key in the server configuration.
A short ID is not a node number or a label you can make up. It must match a value allowed by the server, and the configuration provider should confirm its format. The server name must also match the server settings; any familiar domain will not do. The fingerprint setting describes how handshake characteristics are emulated, not the identity of the destination website. Fingerprint, server name and address each serve a different purpose.
Common VLESS, REALITY and Vision setups require checking the flow and security-layer settings together. That does not mean every REALITY connection should blindly use the same flow. Check client support, transport compatibility and server requirements individually. An importer may recognize the protocol but omit security-layer parameters, leaving an entry that looks complete but cannot complete the handshake. Reviewing the edit screen is more reliable than relying on the node label.
Use the Handshake Stage to Narrow Down Issues
If the logs show that the underlying connection was established and then immediately closed, distinguish a TLS certificate verification failure from a REALITY parameter validation failure. For TLS, check the name, clock and trust chain. For REALITY, check the verification material, short ID, server name and core support. The interface may report either issue simply as a connection failure; expand the logs to see which layer needs attention.
REALITY does not automatically handle local DNS, system proxy settings or certificate issues in apps. If only one website reports an application-level certificate error, determine whether it occurred in the browser-to-website inner TLS connection or the client-to-server outer handshake. Do not attribute every certificate or name-resolution issue to REALITY just because it is enabled. Check each connection stage separately instead of repeatedly changing the wrong security-layer settings.
Project V, V2Fly and Xray: How Cores and Interfaces Work
V2Ray is often used to refer to the broader technology ecosystem, but it can also appear in specific program and configuration names. Project V provides historical context for that ecosystem. V2Fly continues V2Ray's community development, while Xray has evolved along a separate core branch. They share some history and configuration concepts, but their features have developed along different paths. To determine whether a configuration will work, check support in the specific core—not just whether its name includes V2Ray.
The Client Manages Settings; the Core Runs Connections
A graphical client handles tasks such as subscription management, node editing, system proxy controls and log display, then passes the configuration to a core. The core handles protocol parsing, connections, security layers and routing. Successfully saving a form only means it passed local validation; it does not prove the core accepts every setting. Similarly, a client recognizing a share link does not guarantee that its selected core supports all the link's extension fields.
For desktop use, start with v2rayN, which provides entry points for Windows, macOS and Linux. Available cores and features depend on the specific release package and client support; do not assume a menu shown on another platform is available on yours. The Windows desktop edition and classic WPF edition mainly differ in interface technology and interaction. “Classic” does not simply mean old protocols only, and “desktop” does not mean every feature is automatically available.
On Android, v2rayNG with an Xray core is the primary choice; v2flyNG is an alternative for V2Fly cores. The two clients may share configuration sources, but changing the app name does not make every configuration work. For REALITY, a specific flow or core extension, first confirm which core provides the feature. If a configuration explicitly relies on an Xray implementation, do not expect another core to run it just because its settings form looks similar.
Compatibility Does Not Mean Every Setting Can Be Copied As-Is
V2Fly and Xray share concepts for common inbounds, outbounds and routing, and some simple configurations can be migrated. Security layers, transport implementations, field values and extensions may differ, however. The fact that both programs read JSON means only that the file syntax is the same, not that the settings mean the same thing. Runtime configurations generated by graphical clients may also include local paths and internal tags, so they are not suitable as direct imports into another client.
Before migrating, list the required protocols, transport, security layers, flow control and name resolution, then check each against the target core. Server addresses and user IDs are often easy to move; core-specific fields need new configuration guidance. Keep the original share content as a reference rather than piecing settings together from runtime logs. If the server must change, update both ends as a coordinated setup rather than changing only the client.
| Client | Platform | What to check |
|---|---|---|
| v2rayN | Desktop platforms | Check the selected core and fields after import |
| v2rayNG | Android | Xray configuration support and system access permissions |
| v2flyNG | Android | V2Fly configuration compatibility and server requirements |
Check feature changes and regressions after updates
Client updates and core updates are related, but they are not the same operation. A new interface version may fix subscription parsing; a core update may change field validation or protocol behavior. Either can affect existing configurations. Before updating, note the active entry, traffic-handling mode and important routing settings. After updating, verify the original baseline first. Do not change the core, transport and routing all at once, or it will be hard to identify the cause of a regression.
If the logs report an unknown field, invalid flow or unsupported security type, first check that the right core is selected and that the configuration matches the client. This is more useful than clearing every advanced field, which may let the program start but change how the connection works. For more on the ecosystem, see Project V and the client family. Use the download page for supported installer formats; this protocol reference does not introduce other client categories.
Speed, Resource Use and Mobile Battery Life
Protocol performance is not a fixed ranking from fastest to slowest. The same protocol can use different transports, security layers and server setups, and those differences can outweigh the average overhead between protocols. Define the workload before comparing: page load time depends on connection setup and name resolution, sustained downloads on consistent throughput, and real-time communication on latency variation and packet loss. Combining these into one test score often produces contradictory results.
Measure Initial Load Time Separately from Sustained Throughput
A page visit may involve local traffic handling, name resolution, connecting to the server, a security handshake, then a connection to the destination website and its response. Adding WebSocket, gRPC or another forwarding layer introduces further negotiation and scheduling. Lightweight protocol processing cannot make an unstable link or overloaded remote server perform well. Likewise, an established, reused connection does not represent all the costs of a cold start.
A client's TCPing mainly checks whether it can connect to the server port. A real connection test typically requests a test destination through the proxy, but results still depend on the test address and implementation. Neither measures sustained download speed. If TCPing succeeds but a real connection fails, authentication, the security layer or destination access may be the problem; that does not mean the protocol is “slow.” First confirm the connection works, then compare performance.
For a fair comparison, use the same device, network, destination and traffic-handling mode; rotate the test order and repeat at different times. If you change the server region and protocol together, you cannot attribute the result to the protocol. Record cold page loads, repeat visits and long transfers separately rather than chasing one minimum figure. See how to verify your first connection and proxy routing for detailed steps.
CPU, Memory and Connection Count All Matter
Encryption overhead depends on the algorithm and processor. Some devices have hardware acceleration for specific algorithms, so results may reverse on a different architecture. TLS, protocol-level encryption, data copying and transport encapsulation can all use processing resources, but none is automatically the bottleneck. Differences may be hard to notice during light browsing and more apparent under high concurrency or long transfers, when processor load can rise.
Memory use also depends on connection count, buffers, rule sets, DNS cache and log volume. Resource changes caused by a large routing ruleset should not all be attributed to VMess or VLESS. When investigating client resource use, compare idle, everyday browsing and sustained transfer under the same rules and logging settings. The results are meaningful only when the workload is reproducible.
Multiplexing can reduce some connection setup overhead, but it does not guarantee higher throughput for every workload. Packet loss and congestion on a shared connection can affect multiple streams at once. Some transports already support multiple streams, so adding another multiplexing layer may only add complexity. Keep the stable baseline unless you have a reason to test. Change one setting at a time and observe both short- and long-lived connections—not just a single page load.
Mobile Battery Drain Often Comes from Outside the Protocol
Wireless signal strength, screen use, background apps and system scheduling all affect mobile battery life. Frequent disconnects and reconnects, short keepalive intervals or network changes can keep the wireless radio active for longer. Even a lightweight protocol may not save power if it reconnects often. Do not equate a protocol name with a “battery-saving mode”; first check connection stability, whether the system repeatedly stops background activity and whether the client is constantly retrying.
When comparing battery use in v2rayNG or v2flyNG, keep traffic coverage, rules, screen brightness and background apps as consistent as possible. Observe standby and active use separately; do not compare a continuous download with idle standby. Adjust battery optimization settings to match your background-use needs. Allowing the client to run continuously may keep connections alive, but it also lets the client handle traffic for longer, so weigh that against your workload.
If battery drain is noticeably worse only on mobile data, check signal quality and network switching first. If one node keeps reconnecting, investigate the link and server. If all entries stop in the background, check system restrictions. The goal is to reduce unnecessary wakeups and retries, not to remove the security layer. Treat brief battery changes that you cannot reproduce as observations, not as evidence for a general claim about protocols.
Share Links and Subscriptions: Format Compatibility Is Not Connection Compatibility
A share link usually describes one connection; a subscription URL retrieves a set of configurations and updates. Both may be imported from the clipboard, but clients handle them differently: a share link's parameters are parsed directly, while a subscription first fetches content and then identifies its format. Import can fail during retrieval, decoding, field mapping or core execution. Identify the failing stage before deciding whether to check the URL, format or protocol support.
The Same Link Prefix Can Hide Different Fields
Common VMess share links use encoded structured content; VLESS and Trojan often use URIs with query parameters; Shadowsocks has its own user information encoding conventions. Different generators do not always handle extension fields and defaults the same way. A client recognizing the prefix proves only that it recognized the entry format. Check the edit screen to confirm that flow, security-layer settings, fingerprint and other fields mapped correctly.
Special characters in URIs must be encoded correctly. Spaces in remarks, symbols in passwords and delimiters in parameter values can change during copying or forwarding. Text displayed after a browser automatically decodes it may not be safe to concatenate into a new URI. Copy the complete original link where possible; do not remove percent signs or equals signs that look unnecessary. After importing a QR code, check the key fields as well—successful scanning does not guarantee a complete configuration.
The remarks or fragment in a share link is mainly for display and can usually be renamed; query parameters may affect the actual connection. If you encounter an unfamiliar parameter, check whether the client supports it and the server requires it before removing it as a label. Some importers silently ignore unknown parameters, leaving an entry in the list without its advanced features. Compare the imported entry against the original share content field by field.
Subscription Updates Use a Separate Data Path
A subscription may return a list of links, an encoded list or a structured configuration; not every format can be read directly by all three clients. A file extension does not reliably identify the content: a URL that looks like a regular webpage may return a subscription, while another may return a login page. If an update leaves the list empty, first check whether the request succeeded and the response actually contains configuration data. Then check protocol compatibility.
A subscription request may need to bypass the proxy or use an existing proxy. That is separate from how imported nodes connect. If the current proxy is unavailable, an update sent through it may fail, creating a loop: you need an update to connect, but need a connection to update. Follow the provider's instructions to choose a working update path, and keep any known-good entries. Do not delete all local configurations just to fix subscription retrieval.
Subscriptions often contain access credentials, so the URL itself may grant access. Do not reveal the full address in troubleshooting screenshots or post its query parameters in public comments. To describe the format, you can share the response type, error category and field names. Expired subscriptions, invalid authorization or a server returning an error page must be handled by the configuration provider; changing the local protocol cannot fix access problems during retrieval.
After Updating, Check the Active Entry and Local Changes
A subscription update may replace entries, change names or remove old servers. Whether the active selection and manual edits are preserved depends on the client. Record important local changes first; if necessary, duplicate them as clearly labeled entries, but avoid relying indefinitely on old credentials that no longer receive updates. After updating, check the active entry, protocol, security layer and routing, then verify access with a real request.
When moving between clients, use a subscription format the provider explicitly supports. For a small number of entries, import and verify them one by one; if many rely on the same extension, test one entry before migrating the full set. Conversion tools can drop fields or change local routing behavior, so a successful conversion does not prove the configuration works. For content containing access credentials, also consider which services or tools will process it.
If an entry worked before an update but fails afterward, compare what changed before reinstalling the client. A change to the server address, protocol, security layer or flow may require a different core. Keep an error summary without credentials so you can give the provider a clear report. You can also follow the relevant import, authentication or connection troubleshooting path in the Help Center.
Choose by Use Case: Match the Configuration, Then Test Your Workload
A protocol dropdown in a client is not a menu for freely upgrading your connection. The available choices are determined first by the server's valid configuration, then by local core support, and finally by performance and maintenance preferences. A sound process is to define the workload, verify the complete configuration, establish a stable baseline and then compare alternatives. The outcome should be a connection you can verify, not a protocol ranking divorced from server requirements.
Different Priorities for Desktop Use and Mobile Background Activity
For everyday desktop browsing, use v2rayN to manage the configuration provided to you, and first confirm that the system proxy covers the apps you need. If an existing VMess, Trojan or Shadowsocks connection is stable, there is no need to migrate just because you see VLESS. If the server provides a REALITY setup that specifically requires Xray, verify the core and its settings. Desktop hardware is rarely the first obstacle; connection stability and clear routing matter more to the experience.
On mobile, first make sure v2rayNG matches the configuration, then consider background stability, network switching and the apps you actually use. Evaluate v2flyNG if you need V2Fly-specific capabilities. Do more than open a webpage: check recovery after standby, switching between Wi-Fi networks and any UDP services you need. A protocol can complete its handshake correctly while system background restrictions or local traffic handling still prevent an app from working reliably.
For multiple devices, a configuration that every device can support and represent fully is often easier to maintain than a complex extension on one device. Give each device a clear name and record the configuration source to avoid confusion during updates. If the server supports separate credentials, managing them independently makes revocation and troubleshooting easier. Do not assume every device has the same issue because its node label is the same; the active configurations may already differ.
Keep Local Routing Separate from Protocol Choice
Routing rules decide which outbound handles traffic; they do not change the remote protocol. If a website will not load, its traffic may not be using the proxy entry you are testing at all. Before troubleshooting, confirm the matched route, selected outbound and name-resolution path. The example below is a single rule object from a core routing ruleset for blocking an ad category. It is not a complete configuration: it assumes an outbound named block and the relevant geosite data are available.
{
"type": "field",
"domain": ["geosite:category-ads-all"],
"outboundTag": "block"
}
This example shows that rule tags and data files are part of the runtime requirements, too. A successful protocol handshake cannot make up for a missing outbound or rules resource. For routine troubleshooting, start with the client's simple default rules, then restore custom rules gradually. Do not overwrite the entire runtime configuration to test one node. If only one category of domain fails, check routing and name resolution before considering a different protocol.
Verify system proxy and TUN mode separately, too. If an app does not respect the system proxy, changing protocols will not make its traffic reach the client. If TUN mode has a permission or routing issue, a successful node test does not prove that traffic handling is working. First test with an app that is known to follow the proxy, then expand coverage. For a first-time setup, return to the quick-start guide and work through import, selection, traffic handling and access verification in order.
Finish by Following a Verification Checklist
First, check the address, port, protocol and credentials to confirm the connection target and identity. Next, check the transport, path, server name, security layer and flow to verify the handshake. Finally, confirm core support, local traffic handling and routing so the workload actually uses the intended outbound. Change only settings that evidence shows are wrong, then save and retry. This keeps cause and effect clear and makes comparison with the original configuration easier.
Logs can narrow down a problem, but do not share only the last line. A timeout connecting to the server, rejected authentication, a certificate name mismatch and failed destination resolution occur at different stages. Record the error category, conditions and recent changes, and hide credentials before asking for help. If the same configuration fails on only one device, compare its core, clock and traffic-handling settings first. If several devices fail at once, check server status and configuration updates.
Keep a setup only when its configuration source is clear, it passes tests for the workloads you need, and its update and troubleshooting paths are understood. Compare performance only after those conditions are met. Choose an installer by operating system and processor architecture in the Download Center. For unclear terms, see the glossary; for recurring issues, use the Help Center categories to narrow down the cause. A protocol name is just a starting point—the complete configuration and repeatable tests are what guide the choice.