VLESS handles the proxy protocol and user authentication; REALITY secures the connection and its handshake; XTLS Vision identifies traffic and optimizes forwarding. This guide is for users with a VLESS node who need to verify its REALITY settings. Learn what each component does, check flow, fingerprint, serverName, public key, and shortId, then use logs to diagnose connection failures instead of cycling through fingerprints.
What VLESS, REALITY, and Vision Do
“VLESS + REALITY + Vision” in a node name does not mean three peer protocols. VLESS operates at the proxy protocol layer: it identifies users with details such as a UUID and carries the destination address. VLESS does not provide its own data encryption like VMess, so connections over the public internet need a suitable security transport. Setting VLESS encryption to none does not mean the entire connection is sent in plaintext.
REALITY is a security transport in the Xray ecosystem. It combines TLS handshake characteristics, server keys, and client authentication data to establish a protected connection. XTLS Vision uses the flow setting to handle initial traffic, apply padding, and optimize forwarding when conditions allow. A client with V2Ray in its name does not necessarily support this configuration in its current core; this guide covers the Xray implementation.
This sequence shows the logical roles of each component; it does not mean that every stage opens a separate network connection. In practice, authentication, handshaking, and traffic processing work together. When troubleshooting, identify the failing layer first: an unreachable port points to a connection issue, a mismatched public key to a security handshake issue, a mismatched UUID to proxy authentication, and incorrect website routing usually calls for checking routing.
Understanding REALITY Through the TLS Handshake
When a browser connects to an HTTPS website, it first sends a ClientHello containing supported TLS versions, cipher suites, extensions, and other details. The server replies with handshake messages, and both sides negotiate keys. A traditional proxy's outer TLS layer follows a similar process. If the browser also uses HTTPS to reach the website inside the tunnel, the result is website TLS nested inside proxy TLS.
REALITY is not designed to produce the same handshake behavior just by entering any well-known domain. The server must be configured with a suitable destination and permitted server names; the client also needs the matching public key, shortId, and other parameters. A legitimate client uses these details to authenticate the server and establish a connection; it does not rely solely on the destination website's standard certificate trust chain.
- Connection address: The server IP address or domain the client actually connects to. It can differ from
serverName. - serverName: The server name used in the handshake, usually corresponding to SNI in the client interface. It must match the server's permitted configuration.
- Public key: Paired with the server's private key for REALITY authentication. The private key must remain on the server.
- shortId: A short identifier accepted by the server, often represented as a hexadecimal string. It is not an abbreviated UUID.
Connections that fail the relevant authentication checks can be handed off by REALITY to the configured destination, making their outward behavior more like that of a real website. This “borrowing” does not mean legitimate proxy traffic is routed through that website or that the destination website forwards user data for the proxy server. The choice and reachability of the destination, along with handshake compatibility, still affect the deployment.
How XTLS Vision Reduces TLS-in-TLS
With a conventional encrypted proxy forwarding HTTPS traffic, the browser has already encrypted the application data into TLS records, and the proxy encrypts it again in the outer layer. This protects the tunnel but adds encryption, decryption, and encapsulation work, and can create observable nested-traffic patterns. One goal of Vision is to recognize suitable inner TLS traffic and, when conditions allow, avoid applying the same outer encryption path to payloads that are already encrypted.
Vision handles the initial connection data and applies padding, then chooses the next path based on the detected TLS state. Supported, identifiable TLS 1.3 traffic that meets the implementation requirements can enter the optimized forwarding path. This does not mean every byte, protocol, and connection is passed through directly from the start. Non-TLS traffic and connections that do not meet the requirements still need tunnel protection.
| Traffic scenario | What it means | What you cannot infer |
|---|---|---|
| Eligible TLS 1.3 traffic | Can use Vision's optimized forwarding path | Every request will be faster by the same amount |
| Non-TLS TCP traffic | Still needs the tunnel's security protection | VLESS none means unencrypted traffic over the public internet |
| UDP and QUIC traffic | Check UDP forwarding and support for related encapsulation separately | Optimization conclusions for TCP apply directly |
| Handshake or authentication failure | Fix basic connectivity and parameter mismatches first | Enabling Vision will bypass authentication errors |
Vision does not need to decrypt HTTPS content between the browser and the destination website. The browser still validates the website certificate, and the inner TLS connection remains end to end. REALITY protects and authenticates the client-to-proxy connection, while website TLS protects application data between the browser and the destination. These are separate security boundaries.
Test Connectivity Before Comparing Performance
First confirm that the same node can complete requests reliably. Then compare throughput and CPU usage using the same file, time window, and concurrency. A single latency test cannot prove that Vision entered its optimized path, and differences in server bandwidth should not be attributed to flow.
Check Flow and Fingerprint Settings in the Client
In v2rayN, first make sure the node is running on the Xray core, then edit the existing VLESS node. In common versions, select the node and right-click “Edit server.” To add one manually, look for the VLESS option under the “Servers” menu. Menu labels may vary by version; check the protocol, transport, security, and flow fields in the edit window instead of relying on the node label.
Protocol and Transport
- protocol
vless- encryption
none- flow
xtls-rprx-vision- Transport
- Usually TCP; some newer interfaces label it RAW
These values apply only to nodes whose server is configured for this combination. They are not universal VLESS settings.
REALITY Security Settings
- security
reality- fingerprint
chrome, or the value specified by your provider- serverName
- Must match a server-permitted name
- Public key and shortId
- Use the matching parameters provided for this node
Check the security type even after importing a subscription. Do not enter REALITY parameters into a standard TLS form and assume they will work.
flow specifies the flow control mode; it is not an encryption algorithm dropdown. The server-side user configuration and client must be compatible. If the server requires Vision, leaving the client field blank may cause authentication or flow checks to fail. Do not substitute other XTLS flow values found in older guides for xtls-rprx-vision.
fingerprint controls the simulated characteristics of the client's TLS ClientHello. chrome is a common value, but it does not turn the proxy into a browser or guarantee that the connection cannot be identified. The core may reject arbitrary strings, and switching fingerprints repeatedly will not fix an incorrect public key. Keep the node's supplied setting unless you have a specific compatibility reason to change it.
{
"flow": "xtls-rprx-vision"
}
{
"security": "reality",
"realitySettings": {
"fingerprint": "chrome"
}
}
These are two separate JSON excerpts showing where the fields belong, not a complete configuration to merge and run. In the first excerpt, flow belongs to the VLESS outbound user object; in the second, security settings belong under streamSettings. A working configuration also needs the server address, UUID, server name, and key-related fields. Public key field names can differ between the interface, share links, and core versions. Use a configuration generated by your client instead of copying fields mechanically across versions.
Check the Port, Core, and Logs—in That Order
Before troubleshooting, distinguish the remote server port from the local proxy listener. The server determines the remote port used by the node; 443 is common but not required by REALITY. The client determines the local proxy port. If an app connects to the wrong local port, its requests will not use the expected outbound route even when the remote node is configured correctly.
- Save the current configuration. Keep the original node address, remote port, UUID, flow, SNI, public key, and shortId. Hide authentication details in screenshots, and never share a full subscription URL.
- Confirm which core is actually running. Check the core name and version in the startup log. v2rayN can manage multiple cores, and updating the interface does not automatically switch the core currently in use. On Android, v2rayNG uses the Xray core; do not treat v2flyNG, which uses the V2Fly core, as an equivalent way to configure REALITY.
- Check TCP reachability. If the connection times out or is refused, check the remote listener, firewall, and address resolution first. A successful TCPing only confirms that a TCP connection can be established; it does not mean REALITY authentication succeeded.
- Check the handshake and authentication. If the port is reachable but requests fail, compare the server name, public key, shortId, UUID, and flow one by one, and synchronize the system clocks on both ends. Routing rules cannot fix a key error.
- Test with a new request. Save the changes, reload the node, and make a new website request. The browser may keep using an existing connection. Check the outbound tag in the logs too, to confirm the request is using the intended proxy.
If the core starts and the node test succeeds but some websites still will not open, check DNS and routing. A domain may match a direct-connection rule too early, an app may not use the system proxy, or UDP requests may bypass the proxy. Repeatedly changing the REALITY public key only introduces more variables. See the Configuration Reference for field definitions, or the User Guide for setup instructions.
REALITY and Vision FAQ
VLESS encryption is set to none. Should I change it to auto?
No. VLESS outbounds typically use none; do not copy auto from a VMess configuration. When editing the node, check that the security type is REALITY and that the public key, SNI, and shortId are all present. The selected security transport protects the connection.
Will changing the fingerprint to chrome make it connect?
It may help only if the original fingerprint is unsupported or does not match the configuration requirements. Keep the provider's specified value first, then use the logs to distinguish a timeout, handshake failure, or user authentication failure. Changing the fingerprint cannot fix an incorrect address, UUID, or public key.
Does REALITY require Vision?
They serve different purposes; REALITY and a particular flow value are not interchangeable. Set xtls-rprx-vision on the client only if it matches the server-side user configuration and is supported by the core. If you have an existing subscription, start with the imported settings and do not add or remove flow just to run a speed test.
Why are websites still slow when TCPing is low?
TCPing does not test full proxy authentication, the connection to the destination website, or content downloads. Run a real connection test first, then test a download from a fixed destination. Also check DNS lookup time, packet loss, server load, and outbound bandwidth. If only certain domains are affected, checking which routing rule matched is more useful than changing SNI.
Can I turn a standard TLS node into a REALITY node?
Changing the client's security type alone is not enough. The server must be configured with the REALITY keys, destination, server name, and user parameters, and the matching details must then be provided to the client. A standard TLS certificate setting cannot replace this authentication configuration. Have the server set up first, then import the updated node.