Official Guide · Protocol Reference

Shadowrocket
Protocol Types & Settings

Check which protocols your server supports, then understand how authentication, transport and rules each play a part. Protocol names are not speed rankings and cannot replace real connection tests.

Shadowrocket is available for iPhone, iPad, Mac, Windows, Android and Linux. The iPhone and iPad app costs $2.99 as a one-time App Store purchase. The Mac (Apple silicon and Intel), Windows, Android and Linux versions are free. Check the App Store listing for system requirements. See Get the app for download options and installation guidance; desktop and Android installers are available from this site at /dl/.

This guide assumes you already have your own subscription or server details. It focuses on choosing the right type in Add Server, understanding the fields and identifying protocol-level issues. For your first connection, follow the Quick Start to import, select and test a configuration, then return here for protocol details. This guide does not repeat the setup steps.

Check authentication and transport separately Use the server settings as the source of truth Compare under the same network and conditions
01 / REFERENCE

Choosing a Protocol: Start with the Connection Layers

Narrow Down the Options Using Your Existing Details

The first step is not comparing protocol names; it is confirming what the server actually supports. A subscription usually includes the type, address, port and authentication details. After importing it, keep the original settings and check them one by one. When adding a server manually, the type in Add Server must match the server. Changing the same address from Shadowsocks to Trojan will not make the server switch protocols. If you have one complete configuration, test it as provided rather than changing its authentication fields just to experiment.

A connection involves at least four layers: network reachability between your device and the server, protocol authentication, the transport that carries data, and the rules that determine which requests use the connection. A wrong address or port is a reachability issue; a wrong password or UUID is usually an authentication issue; a mismatched WebSocket path is a transport issue; and traffic that does not follow the expected policy may point to a rules issue. Each layer can fail independently. An enabled switch only means the connection service has started—it does not prove that every request is reaching its destination.

Proxy Protocol, Transport and Encryption Are Different Settings

Shadowsocks, VMess, VLESS and Trojan describe different proxy protocols. TCP, UDP and WebSocket concern how data is carried, while TLS provides identity verification and encryption for a connection. Some protocol types combine these functions; others rely on an additional outer layer. Seeing several related fields in a subscription does not necessarily mean settings are duplicated. Keep the intended combination intact—for example, a password does not make the TLS Server Name optional.

Evaluate speed in context. Loading a page for the first time involves DNS lookup, connection setup, the handshake and content transfer; a single latency test does not cover the whole process. Long downloads measure sustained throughput, interactive apps depend more on round-trip time and jitter, and network changes test reconnection behavior. A protocol may affect only part of the experience. Server load, the route between networks and wireless signal can still be the main constraints. This guide therefore does not rank protocols by speed or battery use regardless of network conditions.

LayerWhat to CheckCommon Symptoms
Network AccessAddress, port, TCP / UDP reachabilityConnection times out before authentication
Protocol AuthenticationPassword, UUID, keys and methodServer is reachable, but the session cannot be established
Transport SecurityTLS, Server Name, path and HostCertificate error or transport handshake failure
Traffic RoutingConfig, rule order and policyOnly some requests are handled unexpectedly

Account for Battery Use on iOS

Battery use on iOS is not just about cryptographic operations. Frequent wireless-radio wakeups, repeated connection failures and retries, and background uploads can all keep the device active longer. A protocol that requires less computation in theory may still use more power than a stable connection if it repeatedly has to handshake again. For a fair comparison, note whether the screen is on, whether you are on Wi-Fi or cellular, how long the test runs, and whether video or downloads are running at the same time. Avoid attributing all device power use to the client.

The routing mode also affects what you are testing. Global Routing options—Config, Proxy and Direct—work differently: Config applies the current configuration's rules, Proxy sends eligible traffic through the selected proxy policy, and Direct connects without a proxy. You can temporarily change modes to isolate the effect of rules, but change only one setting at a time and restore it after testing. If you change the mode and protocol together, even an improved result will not show which change made the difference.

A practical order for choosing is: check server compatibility first, then your use case, and finally performance on your device. Confirm whether you need UDP, access to internal addresses or frequent network switching, then test the available configurations under the same conditions. For a quick overview of the types, see the protocol overview. If your first import does not work, return to the Quick Start and check that the details are complete rather than rewriting the entire configuration.

02 / SHADOWSOCKS

Shadowsocks: Symmetric Encryption and Lightweight Forwarding

Design and Limitations

Shadowsocks is designed to provide encrypted proxy forwarding with a relatively simple protocol: the client tells the server which destination to reach, and the server connects to it. It mainly relies on a password and encryption method agreed between the two sides; a website certificate is not a basic authentication requirement. This distinction helps clarify the fields: a standard Shadowsocks configuration requires both Password and Method. You cannot reuse a password from another protocol or assume two services are interchangeable just because they use the same port.

Different encryption methods may have different message formats and key requirements. Newer and older methods do not differ only in strength; they may also require different key formats, lengths or implementation support. Select the method specified by the server. If it is not available in the list, check whether the details are compatible with your client rather than choosing a similarly named alternative. After importing, confirm the method name, especially if the subscription was converted.

Check the Address, Port, Password and Method

Enter the server domain or IP address in Server and the actual listening port in Port. The address usually does not include a webpage path, and the port should not be entered in the address field. Copy Password exactly as provided, watching for spaces, line breaks and full-width characters. Method specifies the encryption method; it is not a personal preference. If the address resolves but the connection keeps failing, check both the port and method. A domain opening in a browser does not prove that the proxy port is working.

Some configurations include additional transport settings, but these are not required by every Shadowsocks service. Enable them only when your existing details specify them, and keep their names and values consistent. Do not add an option just because you saw it in another configuration; extra encapsulation changes the data format the server expects. If an imported entry behaves differently from one you entered manually, compare the fields while keeping the imported entry as a reference. This helps preserve the original details during troubleshooting.

FieldMeaningHow to Check
Server / PortServer EndpointCheck the domain and listening port; do not include a webpage path
PasswordAuthentication and key-derivation detailsCopy exactly; check spaces and encoding
MethodEncryption method and message formatMust match the server exactly
UDPDatagram forwardingCheck server, network and destination requirements

Working TCP does not mean UDP is available

Most web browsing works over TCP, but real-time communication, some DNS lookups and apps using QUIC may involve UDP. TCP and UDP forwarding in Shadowsocks have separate requirements: the server must support the relevant capability, the network must allow that traffic, and the client must not have it disabled. If webpages work but real-time features do not, check this path. One successful page load does not prove the connection suits every app, and a single app failure does not mean the entire connection is down.

On iPhone and iPad, lightweight forwarding generally means fewer layers of encapsulation to consider, but it is not always faster or more battery-efficient. Chip performance, the number of long-lived connections and network retransmissions can all change the result. If the same configuration works on Wi-Fi but times out on cellular, first compare endpoint ports and network reachability. If performance drops mainly under heavy load, consider server load and sustained throughput; the protocol name alone is not enough to draw a conclusion.

Troubleshoot in four steps: check whether the details are complete, whether the endpoint is reachable, whether authentication matches, and whether the specific use case is supported. First check that the subscription updated, then confirm which entry is selected; otherwise, you may edit one entry and test another. For authentication errors, recheck the password and method. For timeouts, start with the address, port and current network. If only some requests fail, check rules and UDP. This keeps cause and effect clear instead of cycling through several settings at once.

If your server supports only Shadowsocks, use the complete matching configuration; there is no need to change the type just to try another protocol. If you already have multiple working configurations, compare webpage load time, sustained transfers and background idle behavior using the same destination and similar test times. It is more useful to record which part improved than to label a protocol “lightweight” or “fast”—and that makes it easier to reassess when network conditions change.

03 / VMESS · VLESS

VMess and VLESS: Check Authentication and Transport Separately

Similar Fields Do Not Mean the Same Protocol

VMess combines user authentication with its own protocol data-protection mechanisms. Its settings commonly include a UUID, encryption options and transport settings. VLESS uses a leaner authentication and forwarding design; the protocol itself does not provide the same content-encryption functions and usually relies on an appropriate outer security layer. Both may use a UUID and TCP or WebSocket, but similar-looking fields do not make the types interchangeable. If the server specifies VLESS, selecting VMess and entering the same UUID is still a mismatch.

These designs can combine protocols and transports to support different deployments, but they also add fields to check. When reviewing existing details, group them into protocol type, user authentication, underlying transport and TLS protection instead of treating them as one flat list. If a group is missing, check with the source of the original details rather than guessing from the domain or port. A commonly used secure web port alone does not prove that the service uses TLS.

UUID, Encryption and Time Settings

A UUID identifies a user in the protocol; it is not a free-form note. Copy it in full, and do not enter a display name, subscription URL or other credential in that field. Follow the provided settings for VMess encryption. If an older configuration includes additional authentication parameters, preserve their original values rather than treating a fixed number from an old guide as universal. Matching the imported settings to the server matters more than following a generic example.

Device time can also affect authentication or outer certificate validation. If authentication fails, first make sure the system date, time and time zone are correct, then check the UUID and related settings. Do not change the system clock at random to bypass an error. If a problem appears after a subscription update while the old entry still works, compare the protocol type and authentication fields. A successful import only means the client parsed the details; it does not mean the remote server accepted them.

WebSocket Host and Path Have Different Roles

WebSocket provides a way to carry proxy data. Path is the server endpoint for the protocol upgrade request and usually needs its leading slash and letter case preserved. Host is the hostname in the HTTP request. Either may match the connection address, or differ from it, depending on the deployment. Omitting the path, entering it in Server, or using a Host that does not match the server's expectations can leave the underlying TCP connection established while the transport handshake fails.

The TLS Server Name serves a different purpose: it is used for the server name indication in the handshake and for certificate name verification. A correct Host does not guarantee a correct Server Name, or vice versa. If your existing configuration specifies all three, enter each separately rather than changing them all to the server IP for consistency. Connecting by IP while verifying a certificate against a domain is possible when the server is configured for it; do not assume it will work if you assemble the settings yourself.

Field GroupCommon SettingsWhat Goes Wrong
Protocol IdentityVMess / VLESS、UUIDWrong type or authentication
Data ProtectionProtocol encryption options, TLSSecurity settings do not match
TransportTCP / WebSocket、PathExpected transport cannot be established
Name FieldsHost、Server NameRouting or certificate verification issues

Understanding the Cost of Additional Layers

On iOS, an additional transport layer may add handshakes, headers and buffering, but the actual cost depends on connection reuse and how long the traffic lasts. Short webpage requests may be sensitive to the initial handshake, while sustained downloads are more likely to be limited by link throughput. VLESS has a leaner protocol design, but that does not mean every VLESS combination is faster than every VMess combination. If the servers, TLS and transports differ, the comparison reflects the entire connection setup, not just the protocol.

Comparing combinations is useful only if you already have multiple server configurations. Keep the routing mode and destination fixed, and retain a working baseline. Then compare the first request, repeated requests and recovery after a network change. If only a WebSocket combination fails, recheck Path and Host. If every TLS combination reports a certificate error, check system time and Server Name first. Narrowing the issue to one group of fields prevents authentication, transport and rules problems from being conflated.

04 / TROJAN · TLS

Trojan: Establish TLS Before Protocol Authentication

Keep Certificate Identity and User Password Separate

Trojan carries the proxy session inside a TLS connection. TLS first establishes a protected channel; protocol authentication and destination details are then sent through it. There are two separate identities: the certificate verifies the server you are connecting to, while Password proves that the client is authorized to access it. A correct password cannot fix a certificate name mismatch, and a valid certificate does not mean the server accepted the password. Troubleshoot in handshake order rather than treating every failure as a password problem.

This design relies heavily on TLS for security, making the server name, certificate validity period and device trust settings especially important. It does not mean you need to enter every TLS option manually; an existing subscription usually includes the required settings. Keep the imported configuration intact and use the error to identify what may be missing. Trying different names without complete details could connect to a different endpoint and make the failure harder to explain.

Server, Server Name and Certificate Chain

Server is the address the network connection actually reaches. Server Name is an important value used during the TLS handshake and name verification. When connecting by domain, they are often the same; when connecting by IP, you may still need the original domain as the Server Name. Certificate verification also depends on validity dates and the trust chain, so a correct name is only one requirement. If a certificate has expired or the intermediate certificate chain is misconfigured, the server needs fixing—not repeated changes to the client password.

An incorrect device clock, a network sign-in page or faulty DNS resolution can all cause TLS symptoms that look similar. On public Wi-Fi, requests may be redirected to a login page until you sign in; incorrect DNS results may also connect you to a certificate that does not belong to the service. First confirm that the network itself is working, then check DNS resolution and Server Name. Do not submit more credentials or expand the scope of trust before confirming which endpoint you have reached.

Authentication, Transport and Service Support

Preserve the exact case and symbols in the Trojan Password. Do not paste an entire subscription URL into the field. If your existing details specify an additional transport, it must also match the server; do not remove required fields just because a common Trojan setup uses a particular transport. After importing, check the type, address, port, password and TLS name, then review any other transport settings. This order helps catch common structural mistakes first.

UDP availability still depends on server support, client settings and network conditions. A protocol's ability to forward a type of traffic does not mean every app will behave the same way. Real-time apps are more sensitive to latency and jitter, while long downloads are more affected by server bandwidth. If webpages work but a real-time app does not, test that use case separately. Do not treat a successful page load as proof that the app works, or increase every timeout in an attempt to hide the issue.

Check Connection Reuse and Reconnection on iOS

A TLS handshake requires data exchange and computation, so the first connection has a different cost from subsequent stable transfers. In scenarios with frequent short-lived connections, the number of handshakes can affect responsiveness and battery use. For long-lived connections, that cost is spread out and link quality often matters more. Whether the client and server use connection-reuse mechanisms also affects the result. Record the first page load separately from subsequent visits; speed after a session is established does not represent a cold start.

Switching from Wi-Fi to cellular can change the device's address and network path, so existing TCP connections usually need to be re-established. If the connection does not recover, stop the current task, confirm that the new network works, and then measure reconnection time. Do not clear the configuration immediately. Repeated background connection failures can increase retries and keep the wireless radio active, raising battery use. Investigate the failure rather than assuming encryption is the cause.

If you already have a working Trojan configuration, keep its certificate verification and authentication settings intact during everyday use, and check that subscription updates have not overwritten them. To compare it with another protocol, use a similar network path, the same destination and the same test period, and make clear that you are comparing the whole service setup. Protocol guidance can help locate problems, but it cannot replace checking server status and destination reachability.

05 / HTTP · SOCKS5

HTTP and SOCKS5: Distinguish the Proxy Endpoint from the Destination

How These General-Purpose Proxies Work

HTTP proxies were designed to forward web requests. A client can submit a request to the proxy or use CONNECT to establish a tunnel to a destination. SOCKS5 is a more general proxy negotiation protocol that specifies the destination address and port without requiring the application traffic to be web content. Both appear as server types in Shadowrocket, but their names alone do not prove that the endpoint is encrypted, supports every use case or provides the same authentication mechanisms as other protocols.

Distinguish the connection to the proxy server from the connection between the proxy server and the destination website. If the destination uses HTTPS, TLS protects the content in that TLS session. This does not automatically mean that all negotiation between the device and the proxy endpoint is protected by an outer layer of encryption. A plain HTTP or SOCKS5 endpoint is not synonymous with an encrypted tunnel. Check the existing service details to determine whether the endpoint is protected and suitable for use over an untrusted network.

HTTP CONNECT Is Not the Same as an HTTPS Proxy Endpoint

When accessing a secure website through an HTTP proxy, CONNECT usually requests a connection to the destination; the destination's TLS traffic then passes through that tunnel. Support for CONNECT does not mean the proxy endpoint itself uses TLS—these are separate things. Some endpoints also restrict which destination ports are allowed, so common web pages may work while other services fail. Check the service's permitted scope instead of repeatedly changing the destination domain or assuming that the client rules are wrong.

If your existing details explicitly specify an HTTP proxy endpoint protected by TLS, select the appropriate type and configure the required certificate name. Otherwise, changing the port to a commonly used secure port does not make a plain endpoint secure. Authentication must match too: enter the username and password in their respective fields rather than combining them into an address and trying to import it. If the service imposes specific authentication requirements, confirm that both the client and server support them.

SOCKS5 Address Types and UDP Requirements

SOCKS5 can represent either an IP address or a domain name, but which side resolves the domain depends on how the client handles the request and its DNS settings. If the device has already resolved a domain to an IP, the proxy may receive the IP; if the domain is preserved, resolution may happen remotely. Support for domain names in SOCKS5 does not mean every lookup happens remotely. When troubleshooting a domain, check DNS and the proxy request separately rather than treating them as the same step.

The SOCKS5 specification includes UDP ASSOCIATE for datagram forwarding, but the server must implement and allow it, and the network must be able to reach the UDP relay address. An endpoint that supports only TCP CONNECT may be enough for webpages but not for real-time apps. If your use case requires UDP, confirm support in the existing service details, then test the app itself. A successful TCP latency test cannot verify UDP forwarding.

CheckHTTPSOCKS5
How It NegotiatesRequest forwarding or CONNECTDestination address and connection command
Endpoint EncryptionDepends on whether the endpoint also uses TLSThe base protocol does not encrypt content
User AuthenticationConfigure the method supported by the endpointEnter the username and password as required by the endpoint
UDPCannot be inferred from plain CONNECT supportRequires server and network support for the relevant mechanism

Use Cases and Testing on iOS

These types are often used with existing workplace or organizational network endpoints, test environments or specific business proxies. They are usually chosen for compatibility with existing infrastructure, not for a performance advantage inherent in the protocol name. Configure them only if you already have an authorized address and credentials. If the endpoint is reachable only on a particular network, failure elsewhere may be a deployment limitation rather than a phone setting issue. Confirm the access scope instead of repeatedly importing the same details.

On iOS, simpler protocol negotiation does not guarantee lower overall battery use. An endpoint that limits connections, frequently closes sessions or triggers repeated retries from unsupported apps can still keep the wireless radio active longer. Compare webpage loading separately from UDP-dependent tasks, and note whether failures are limited to particular destinations. Confirm authorization, endpoint protection and service support before deciding whether the setup suits your needs. Do not disable authentication or ignore certificate verification just to get a one-off connection.

06 / WIREGUARD

WireGuard: Keys, Tunnel Addresses and Routing Scope

Understand That It Handles Network-Layer Traffic

WireGuard is designed as a network-layer tunnel, which differs from establishing a proxy connection to a particular destination. Along with the remote endpoint, its configuration needs a local address, key identities and the address ranges allowed through the tunnel. Managing it alongside other connections in a client does not remove these network-layer requirements. Use a complete configuration rather than trying to assemble one from a domain and password. Without the tunnel address or peer public key, the expected communication path usually cannot be established.

WireGuard uses public keys to identify peers. The local private key proves the local identity, while the peer's public key identifies the remote identity. These are not interchangeable strings. Keep the client private key secret, and make sure the server has the public key corresponding to that client; the server will not recognize a new key just because you entered it on your phone. If an administrator provided the configuration, keep the agreed key pair rather than generating a replacement and overwriting it.

Endpoint, Address and Allowed IPs

Endpoint is the network address of the tunnel peer, usually a host and UDP port. Address is the local address inside the tunnel, not the server's public address. In WireGuard's basic semantics, Allowed IPs relates both to destination routing ranges and to the addresses permitted for a peer; the client integration's exact behavior also depends on app settings. These roles help explain why a successful handshake does not guarantee access: it proves that the peers established a session, not that every destination has a correct route.

For access to an organization network, the destination subnet must match the supplied configuration, and the server needs a forwarding and return path. If the local Wi-Fi subnet overlaps with a remote internal subnet, routing may become ambiguous. Changing keys repeatedly will usually not help; first check where traffic to the destination is routed. For IPv6, verify that the necessary addresses and routes are configured. IPv4 working does not mean the IPv6 address space is also available.

FieldRoleWhat to Check
Private KeyLocal IdentityKeep it private; do not include it in public troubleshooting posts
Public KeyPeer IdentityDistinguish the local public key from the server's public key
EndpointRemote EndpointCheck that the UDP address and port are reachable
Address / Allowed IPsTunnel Address and Allowed RangesCheck subnets, return paths and address conflicts

Keepalive and Mobile Network Trade-offs

WireGuard uses UDP. When a mobile device reaches a remote endpoint through a NAT device, an idle mapping may expire. One purpose of Persistent Keepalive is to maintain that mapping with periodic packets; it does not increase bandwidth. More frequent keepalives mean more wireless activity, while less frequent ones may delay recovery from idle on some networks. Follow the existing configuration and investigate the interval only if idle recovery is a real problem. There is no single fixed interval that suits every phone.

A network change may alter the underlying public address. WireGuard can adapt to peer address changes when conditions allow, but the experience still depends on UDP reachability, NAT and server policy on the new network. If Wi-Fi works but cellular does not, compare UDP reachability first, then check carrier network and peer restrictions. Address-update mechanisms do not guarantee uninterrupted service through every network change, and one fast recovery does not mean every network will maintain the session.

Test MTU and DNS Separately

Tunnel encapsulation uses some of the packet size. If the effective path size does not match the MTU setting, small requests may work while large responses stall. Packet loss or server issues can cause similar symptoms, so save the original value before making changes, change only one setting at a time and repeat the same request. Do not treat an MTU value found online as universal or immediately reduce it drastically when a webpage fails; that can needlessly reduce throughput.

DNS resolves domain names to addresses; routing determines where the data goes. They often come up together in tunnel scenarios but have different roles. If a known internal address is reachable but its hostname is not, check internal DNS and its network path first. For access to an internal network, a complete address plan matters more than protocol speed tests. For regular web browsing, verify that requests are actually using the expected Shadowrocket policy.

07 / HYSTERIA2

Hysteria2: QUIC, UDP Paths and Bandwidth Settings

Designed Around Transport Behavior, Not a Guaranteed Speed

Hysteria2 uses QUIC as the basis for proxy transport. QUIC runs over UDP and combines encryption, connection management and multiplexed streams, so it behaves differently from ordinary TCP transport. This design can perform differently under some high-latency or lossy conditions, but it cannot overcome physical bandwidth limits or guarantee higher speeds on every wireless network. The server, UDP availability on the network and congestion-control settings all affect the result.

Multiplexed streams also have limits: they can reduce some forms of transport-layer blocking between streams, but they still share network resources and congestion conditions. A heavily congested wireless link does not gain bandwidth just because it uses QUIC. If you change the server or destination during a comparison, it is difficult to attribute the result to the protocol. First confirm that your existing service supports Hysteria2, then compare it with other available configurations under the same conditions. The protocol name is not an optimization switch.

Check Authentication, Certificates and Optional Settings by Group

Basic settings usually include the server address, port, authentication details and TLS-related name. The authentication string must match the server, and the Server Name must be correct for certificate verification. The use of UDP does not remove TLS's identity-verification role. For authentication errors, recheck the authentication field; for certificate errors, check the name, system time and trust chain. These issues require different fixes—a password change will not resolve a name mismatch.

Some services also provide optional obfuscation settings. Use these fields only when the server explicitly enables them and supplies the corresponding details. Enabling an option on the client alone can leave the server unable to process the data in its expected format. If an imported subscription does not connect, compare it with the original details field by field, especially for settings lost during conversion or manual editing. Do not copy optional fields from another connection or guess the server's deployment from default values.

Bandwidth Settings Are Not a Data Allowance—and Higher Is Not Always Better

Some configurations include upload and download bandwidth hints that may affect congestion-control behavior. They do not represent a bandwidth allowance, and higher values do not automatically mean faster speeds. Overestimating may increase queuing, packet loss or jitter, while underestimating may limit throughput; the effect also depends on negotiation and server policy. Read the existing configuration details and use realistic expectations for the actual link. A brief cellular peak is not necessarily sustainable capacity.

Check the units and direction when entering values: upload is data sent from the device, and download is data received. Units may differ between interfaces or information sources, so do not copy a bare number and assume it means the same thing. If you need to adjust a setting, first observe several sustained transfers on a stable network, then make small changes and record the results. A very short file mostly measures connection setup and caching; it is not enough to assess bandwidth settings or battery use over time.

Measure Throughput, Temperature and Recovery Separately on iOS

Higher throughput involves more data processing, wireless transmission and app activity. Even if a task finishes sooner, power consumption over a short period may be higher. When comparing battery use, also note whether the task finished earlier, the screen state and device temperature; do not judge solely by the battery drop at one moment. If the device heats up during sustained cellular load, reduce the test load and check signal quality first. Weak signal and repeated retransmissions can increase total device power use, so do not blame protocol processing alone.

If Wi-Fi works but another network times out, first test the UDP path to the same address and port. If small requests work but sustained transfers are unstable, check packet loss, congestion settings and packet-size issues. Recovery after network changes must be tested on the actual device; QUIC's features do not guarantee that every client-server combination will stay connected. For frequent travel, test network switching as a separate case.

Judge whether an existing Hysteria2 service suits a task by its results: webpage stability, whether long tasks finish on time, jitter in real-time communication, and repeated retries while idle. If you want to improve the time to first page load, rule out DNS and TLS issues first. If sustained downloads are limited, then investigate the network path and server capacity. Choosing tests based on symptoms is more useful than repeatedly increasing settings without knowing their units or the server's conditions.

08 / VALIDATION

Testing by Scenario: Troubleshoot Protocol, DNS and Rules Separately

Establish a Baseline with the Same Tasks

Protocol comparisons should answer a real-use question. For everyday browsing, check the first response and subsequent page loads. For large file transfers, measure sustained throughput and interruptions. For real-time communication, check latency, jitter and UDP. For internal network access, prioritize address planning, DNS and the return path. If you already have multiple configurations, start with one that completes the task as a baseline. If they all fail, check the network and destination before drawing conclusions about protocols.

For a meaningful comparison, keep the device, network, destination, routing mode and test time as consistent as possible. Pause background traffic and note whether each connection is a first-time connection. Repeat each test a few times and use typical results, not the best run. Connectivity Test can help identify entries that are clearly unreachable, but it does not represent the full webpage experience and cannot confirm that UDP, internal network access or long-lived connections work. Separate connection checks, real usage and sustained transfers to identify where the difference occurs.

Use the Three Global Routing Modes to Isolate Variables

Config applies the rules in the current configuration to determine how connections are handled. Proxy sends eligible traffic through the proxy path; Direct connects without one. If Config fails but Proxy works, check rules and policy targets before changing the password. If both modes that require a proxy fail, check the endpoint, authentication and transport. A Direct test only provides a baseline for the local network: if the destination is unreachable directly, that alone does not prove there is a proxy protocol issue.

The example below shows a basic structure: choose a policy by domain suffix, connect directly for an IP range, and use a final rule for other requests. This is Shadowrocket .conf rule content, not a server configuration, and it contains no authentication details. PROXY must refer to a valid policy in your configuration. Back up the file before importing or editing, and confirm that the active Config is the file you changed. Rules are generally matched in order, so a broad condition near the top may prevent a more specific one below it from taking effect.

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY

Domain rules rely on the client having domain information at the relevant point; IP rules match addresses. They are not interchangeable. A website may use multiple resource domains, and an app may connect directly by IP, so routing the main page as expected does not mean every related request follows the same policy. GEOIP results also depend on the address database and changes to destination addresses. To route only selected sites through a proxy, see the guide to routing selected sites through PROXY, then add conditions for your own destinations.

Match the Symptom to the Layer

For a complete timeout, start with the network, address and port. For an explicit authentication error, check the password, UUID or key pair. For a TLS error, check system time, Server Name and certificate. If the handshake succeeds but the service does not work, check destination reachability, DNS, UDP and routing. If only one domain fails, test another known destination. If all domains fail but a known IP is reachable, focus on DNS. Change one group of settings at a time, verify the result and record it; do not put several guesses into the configuration at once.

ScenarioCheck FirstAvoid Concluding That
First webpage loads slowlyDNS, handshake, cold start and destination responseA latency value alone reflects the full page load
Real-time app behaves unexpectedlyUDP, jitter, rules and app requirementsWorking webpages mean every app works
Internal hostname does not openInternal DNS, subnets and return pathChanging only protocol authentication details will fix it
Higher battery use in the backgroundRetries, keepalives, app activity and signalAll device power use comes from encryption

Keep Reproducible Notes Before Switching Protocols

Troubleshooting notes should include the device network, destination type, Global Routing mode, failure stage and conditions. Do not expose a full subscription URL, password or private key. Before sharing a screenshot or text, remove authentication details and personal identifiers; keep only the protocol type and non-sensitive fields needed to reproduce the issue. After a subscription update, compare the type, transport and name fields if needed, but retain the original entry so you do not lose a working baseline before confirming the new settings.

Choose based on compatibility and reproducible results: completing the task, recovering after a network change and running without repeated retries are more useful indicators than a single peak test result. For common import and connection issues, see Quick Start troubleshooting. For interface terms, see the quick reference; for feature behavior, see Feature Guide. If the issue concerns server authentication, certificates or routing scope, check those settings with the source of your existing details rather than repeatedly changing unrelated client options.