Shadowrocket Protocol Selection and Configuration Guide
Choose a protocol based on your existing server details, then check authentication, transport and routing. The protocol name alone does not determine speed, battery use or whether a connection will work.
- Authentication and encryption
- TLS and transport
- DNS and rules
- Connection and battery troubleshooting
- Shadowsocks
- VMess
- VLESS
- Trojan
- HTTP · SOCKS5
- WireGuard
- Hysteria2
This is a reference for repeated consultation. It explains why settings are needed, when each protocol may be appropriate, and which layer to check when a connection fails. The setup guide walks you through importing a configuration and making your first connection. After that, return here to look up individual protocols. The guidance assumes you already have your own subscription or server details. This site does not provide, sell or recommend nodes or subscriptions.
01 / SELECTION
Choosing a protocol: confirm the server first, then compare transport requirements
Understand protocol, transport, security and routing separately
In Shadowrocket, choosing a protocol type tells the client which format to use when communicating with the server. It is not a speed setting that can be swapped at will. If your server provides Shadowsocks, use the corresponding Shadowsocks type and authentication details. A server configured for Trojan will not work by simply changing the type to VLESS. The same address and port only identify the same destination; they do not prove that the server accepts the same handshake, authentication or data encapsulation. Always start with the protocol explicitly specified in your existing details.
A working connection typically involves four layers of information. First, the address and port determine where data is sent. Second, the protocol and authentication determine whether the server accepts the request. Third, transport and security settings may include TLS, WebSocket or UDP. Finally, local routing determines which requests use the connection. Some protocols combine several layers; others allow different combinations. Troubleshoot each layer separately to avoid mistaking a DNS problem for an incorrect password, or a rule mismatch for an incompatible protocol.
There is no fixed ranking for speed or battery life
Actual speed depends on the access network, round-trip latency, packet loss, server load, outbound bandwidth and destination service. An extra layer of encapsulation usually adds bytes and processing, but that does not mean it is always slower: a transport better suited to the current network may reduce retransmissions enough to outweigh that overhead. Differences between two servers using the same protocol can also be much larger than differences between two protocols on the same server. For that reason, this guide does not rank protocols by speed.
Battery use on iPhone and iPad also depends on how the connection is used. Sustained high-volume traffic keeps the wireless link, encryption and app processing active; intermittent requests are more affected by connection setup, background keepalives and network wakeups. Frequent automatic tests, short update intervals and repeated failed reconnects can obscure differences between protocols. For a fair comparison, keep the device, network, server and destination consistent, and account for screen brightness and other background tasks. A single battery drop does not prove that a particular protocol is responsible.
| What you have | Check first | Do not assume |
|---|---|---|
| An existing subscription | The imported type, authentication and transport fields | Similar names mean the types are interchangeable |
| An existing server configuration | The protocol and port actually enabled on the server | A particular port necessarily uses TLS |
| Noticeable packet loss on the network | Transport compatibility, retransmissions and connection stability | UDP is always faster |
| Access to an authorized private network | Address ranges, routing, DNS and return path | A tunnel being established means resources are reachable |
Build a repeatable comparison
Save a known-working configuration as a baseline, then change one setting at a time. Test the same destination for the first visit, repeat visits, sustained transfers and recovery after sleep. Do not change DNS, protocol and server in the same test. Connectivity Test can help you check connection status, but it does not prove that every service works. Websites, video and real-time voice have different transport requirements, so test the service you actually need rather than comparing a single number.
If your existing details specify only one protocol, import and verify those details as provided rather than guessing another type based on its name. To switch protocols, first obtain the complete settings prepared for the new protocol on the server. If the list is empty after importing a subscription, that is a separate issue from protocol selection; see what to check when the list is empty after importing a subscription. The sections below assume you have at least one editable server entry. Available fields depend on the options shown in your current app.
02 / SHADOWSOCKS
Shadowsocks: the address, password and encryption method must match
Design focus: straightforward proxy encapsulation
Shadowsocks is designed for proxy data forwarding and encryption. A typical configuration includes a server address, port, password and encryption method. Unlike a web app, it does not necessarily use HTTP requests as its entry point, and a common web port does not mean the server requires TLS. If you already have complete Shadowsocks details, the configuration is relatively direct: connect to the specified server and process proxy data using the agreed password and encryption method. The client and server must use compatible protocol implementations and settings.
Encryption methods are not interchangeable performance options. The password and method work together in key-related processing, and some methods have specific credential format requirements. Keeping the existing password while changing only the method to another, apparently newer name will usually prevent the connection from working. Preserve the original method when importing a link. When entering details manually, check every character, especially hyphens, numbers and the full method name. If the server's method is not listed for the selected type, check compatibility rather than choosing a similar name.
What the settings mean and how to enter them
Address or server address can be a domain name or an IP address. A domain name allows DNS resolution and makes it easier to move a service, but it adds a DNS dependency. An IP address avoids that dependency but will not automatically reflect future address changes for a domain. Port specifies the server's listening port; whether a website opens does not tell you if this value is correct. Password is part of the server's authentication and encryption settings—not your App Store account password or device passcode. Avoid leading or trailing spaces, line breaks and characters substituted by the input method.
If your existing details include additional obfuscation or plugin settings, check them as separate requirements. They may affect the outer layer of the connection, but that does not mean every Shadowsocks entry needs the same options. Omitting a required outer-layer setting can cause the handshake to fail; enabling an unnecessary option can also prevent the server from recognizing the connection. First confirm that the extra layer is actually required, then match each setting to your details and the available app fields. Leave unspecified options unchanged.
| Setting | Purpose | Common checks |
|---|---|---|
| Address | Identify the server location | DNS resolution and complete, accurate details |
| Port | Identify the service entry point | Must match the listening port for this protocol |
| Password | Used for authentication and encryption | Check for changes to case, spaces or encoding |
| Method | Specify the encryption method | The method name and credential requirements must match on both ends |
A successful TCP connection does not mean UDP is working
A website opening usually shows only that the path used by its requests works. Real-time voice, some games and other UDP-based services also require UDP forwarding to be supported by the client settings, server and network path. TCP and UDP are different transport entry points even when they use the same port number, and the network may handle them differently. If ordinary websites work but real-time services fail, first check which transport the service uses, then verify UDP support and relevant rules. Do not immediately change the password or encryption method.
On mobile devices, Shadowsocks battery use depends on the encryption method, hardware processing capacity, traffic volume and reconnect frequency. Sustained transfers and frequent small requests create different workloads and should not be treated as the same. If the device gets noticeably warm right after importing a configuration, pause continuous testing and repeated connections, check for a loop of failed reconnects, then run a limited test against one destination. Unusual battery use is a symptom to investigate alongside connection logs and network status; it does not by itself prove that the encryption method is wrong.
Troubleshoot based on where the failure occurs
If the connection cannot be established at all, first check DNS resolution, the port and server status. If it connects and then drops immediately, check whether the password, method and outer-layer settings match. If only some websites fail, check DNS, rules and reachability to the destination. Keep an unchanged copy of the original entry so you can revert. If the entry comes from a subscription, updates may overwrite manual edits. Before testing, confirm whether you are editing a subscription-managed entry or an independent one, so an overwritten change is not mistaken for an app failing to save settings.
03 / VMESS · VLESS
VMess and VLESS: similar identity fields do not make them the same protocol
Design trade-offs and protocol boundaries
VMess organizes identity authentication and data handling as a dedicated proxy protocol. Its settings typically include a UUID and parameters related to security and transport. VLESS uses a more lightweight protocol layer and does not encrypt content on its own, so the complete connection must be considered together with its security transport. Both can use a UUID and be combined with different outer transports, so the identity field in a link alone does not identify the protocol. Use the type specified in the original subscription or by the server administrator; a UUID is not a universal credential shared across protocols.
VLESS's lightweight design does not guarantee that the complete connection uses fewer resources, nor does it mean the security layer can be omitted. With TLS, WebSocket or another transport, actual overhead and handshake behavior depend on the full combination. VMess performance also depends on server configuration and network conditions, not just the protocol name. When comparing options, record protocol, transport and security layer as separate dimensions before assessing compatibility or use cases. Comparing only one dimension can lead to conclusions that do not reflect real-world behavior.
UUID, transport type and path
A UUID identifies a user authorized by the server. Copy it in full, preserving every character and separator; a profile label is not a substitute. Labels help you recognize entries but are not used for protocol authentication. Some VMess parameters also depend on the protocol implementation and legacy configuration formats, so do not make bulk changes based on a single screenshot found online. If authentication depends on time, a significantly incorrect device clock can cause failure. First confirm that the system date and time are correct, then check whether the server rejected the identity.
Transport fields determine how protocol data is carried. With WebSocket, Path is the request path used during the handshake, and Host relates to the HTTP-layer host information. Neither is a server label, and you should not split a full URL among these fields arbitrarily. Check the server details to see whether the leading slash, letter case and query string must be preserved. Other transports may use different fields; do not copy WebSocket settings into another transport type. A field that is not shown in the interface cannot be replaced by another field just because its name looks similar.
| Layer | Common settings | What to check |
|---|---|---|
| Protocol identity | VMess / VLESS、UUID | Both the type and identity must be correct |
| Outer transport | TCP, WebSocket and others | Choose the combination used by the server |
| HTTP-layer information | Host、Path | Do not confuse it with the connection address |
| Security-layer information | TLS, Server Name and certificate verification | Check the name and trust relationship separately |
TLS name and other extension settings
The connection address is used to reach the server. The TLS Server Name provides the name during the handshake and is relevant to certificate name verification; the two may match, or the server may specify different values. Host belongs to another layer and must not be substituted just because it also looks like a domain name. If your details include other security extensions or special handshake settings, confirm that the current app supports the combination. The presence of an input field does not prove that any combination will work with the server.
Optional settings such as Flow in an existing configuration apply to specific protocol combinations; they are not general-purpose speed switches. Enable them only when the server requires them and the client offers a compatible option. Do not try security settings at random instead of checking the original details; changing several handshake conditions at once makes it harder to identify the cause. For an imported subscription entry, keep the original and create a separate test copy. This makes it easier to tell whether the imported details were incomplete or later edits changed the connection.
How to compare behavior on mobile networks
When comparing these connections on iPhone or iPad, distinguish the initial handshake from data transfer over an established connection. Multiple handshake steps make short requests more sensitive to round-trip latency, while long transfers may depend more on bandwidth and congestion. After a network change, an existing connection may stop working while the app reconnects, causing a brief delay. If one transport takes longer to recover, note whether it happens after waking the screen, switching networks or during normal continuous use. Do not attribute the result to an overall difference between VMess and VLESS without checking the circumstances.
When a connection fails, check the address and port, protocol and UUID, outer transport, security layer, and destination access—in that order. If the connection log shows that the request did not select this server, check Global Routing and the active configuration first. For more general issues, see Troubleshooting. Avoid repeatedly changing identity fields before confirming the route.
04 / TROJAN · TLS
Trojan and TLS: correct authentication is only part of a trusted connection
Using TLS to carry a proxy connection
Trojan carries proxy requests over a TLS-protected connection and uses a password for protocol-level authentication. Two separate conditions must be met: the client must establish a trusted TLS connection to the intended server, and the server must accept the protocol credentials. A correct password cannot fix a certificate name mismatch; successful certificate verification does not prove that the password is correct. Unlike a check limited to address and port, checking Trojan settings requires you to distinguish the connection destination, TLS name, certificate chain and user authentication.
TLS protects data in transit and, when certificates are verified correctly, helps confirm the server's identity. It is not a speed setting and should not be changed arbitrarily just to make the connection appear successful. The handshake requires network round trips, and its overhead depends on connection reuse, network latency and implementation. Behavior after a connection is established also differs from the initial handshake. A slightly slower first page load does not prove that Trojan has poor sustained throughput, and one successful visit does not prove that every security setting is correct.
Address, Server Name and certificate verification
Address is where the client actually connects. Server Name is generally related to SNI in the TLS handshake and certificate name verification, and should be set according to the server details. The certificate must cover the name used for verification and have a valid trust chain and acceptable validity period. If you enter the server's IP address but its certificate is issued for a domain, you will usually still need the correct name information. Do not remove the domain just because the IP is reachable, or substitute a domain belonging to an unrelated, accessible website.
Certificate failures can have several causes: an incorrect device clock, an expired certificate, a missing intermediate certificate on the server, a name mismatch or a network redirecting the connection to another endpoint. Check the specific error first, then verify your details and server configuration. If the app offers an option to skip certificate verification, using it changes the trust boundary; it does not fix the certificate. In normal use, correct the name, clock or certificate chain instead of leaving verification disabled.
Password, ALPN and outer transport
Trojan's Password is an authentication credential and must be preserved exactly, including case and special characters. Importing a subscription may involve URL encoding; copying a section from a link manually can lead you to use its encoded form as the actual password. Prefer a complete import method supported by the app, or enter the separate field from your existing details. Do not show the full password in public screenshots or paste the original share link into a public feedback area after an authentication failure. Troubleshooting usually requires the field structure, not public disclosure of credentials.
ALPN negotiates the application-layer protocol in TLS. Whether it must be specified and which values are accepted depends on the server and outer transport. It is not a list where adding more values is better, and common names do not guarantee compatibility. If the entry also uses WebSocket or another transport, check its path and host settings too. A successful TLS handshake only confirms that the security layer was established; the subsequent transport handshake or Trojan authentication may still fail. Use the order of events to locate the problem.
Distinguishing certificate problems from service problems
If every destination fails at the start of the connection and you see a certificate or handshake error, check the TLS settings first. If the connection is established but a particular website fails, check DNS for the destination, routing and remote reachability. If only real-time services fail, check UDP forwarding support and the network path. Separating these symptoms prevents changing certificate settings when a destination service is temporarily unavailable, or resetting a password because of a DNS problem. Change one setting at a time and record how the error changes.
Assess battery use based on what the connection is doing. Frequent TLS handshakes, repeated retries after failures and background activity from small transfers can all increase power use; these are different costs from encryption during high-volume traffic. For testing, disable unnecessary continuous probes and keep one known-working baseline entry, then observe the services you regularly use. For app source, the official icon and developer details, see how to verify the genuine app. Connection behavior does not tell you where an app came from.
05 / HTTP · SOCKS5
HTTP and SOCKS5: identify the proxy entry point and its protection
The purpose of two general-purpose proxy interfaces
HTTP proxying developed around forwarding HTTP requests. For web requests, the request target can use proxy form; for HTTPS and similar traffic, a CONNECT request is commonly used to create a tunnel to the destination. SOCKS5 provides a more general proxy session negotiation for specifying a destination address, port and connection request. These protocols define proxy entry points; they do not imply the same encryption, authentication or UDP capabilities. If your server specifies HTTP, do not switch to SOCKS5 just because the address is unchanged.
In particular, distinguish an HTTPS destination website from TLS between the client and the proxy entry point. HTTPS generally protects content through to the destination website, but a connection to an HTTP proxy without TLS has a different protection scope for proxy negotiation and some authentication details. A secure destination website does not mean every part of the outer proxy connection is protected in the same way. Assess each segment of the connection rather than relying on the browser address bar or a word in the server label.
Address, port and authentication mode
Basic HTTP and SOCKS5 settings usually include a server address, port and, when required, Username and Password. The server determines whether authentication is needed. Do not assume that leaving the fields blank will work, or that entering another protocol's UUID as a username will make it compatible. Authentication failures and network reachability problems can look similar, so compare the error with your existing details. When entering credentials, check for a domain or other prefix in the account name; preserve the complete format provided by the server.
If the proxy entry point requires TLS, select the corresponding security setting and check the certificate name. A port number alone does not show whether the entry point is encrypted or accepts CONNECT. Some servers restrict destination hosts, ports or authentication methods. Even if the client connects to the entry point, subsequent requests may still be rejected. If certain destination ports fail, first check the authorized scope and server policy instead of repeatedly changing local DNS or assuming that HTTP proxies can only access websites.
| Check | HTTP | SOCKS5 |
|---|---|---|
| Common operation | Request forwarding or CONNECT | Proxy connection after session negotiation |
| Authentication | Depends on the entry point's supported methods | Depends on negotiation and server configuration |
| Encryption at the entry point | Check separately whether TLS is used | The protocol itself does not encrypt content |
| UDP | A standard HTTP proxy is not equivalent to UDP forwarding | Requires end-to-end support for UDP ASSOCIATE |
DNS resolution and UDP requirements
SOCKS5 can express a destination address as a domain name, but whether a request sends that domain to the proxy for resolution still depends on client behavior, DNS policy and whether the destination has already been converted to an IP address. Selecting SOCKS5 does not prove that all DNS requests are resolved remotely. An HTTP proxy may also receive the destination hostname in a request, but other DNS queries made by an app need to be considered separately. To troubleshoot domain resolution, check the actual connection destination and DNS result rather than only the server type.
The SOCKS5 specification includes UDP ASSOCIATE, but that does not mean every server, access network and client combination can forward UDP successfully. Negotiation may involve both a control connection and a forwarding address, and the network may restrict either one. If TCP services work but UDP services fail, check separately whether the server has UDP enabled, the returned address is reachable and the rules select the same entry. A successful website test does not prove that voice, games or other UDP services will work.
Use cases and mobile considerations
These proxy entry points are commonly used with an existing organizational proxy, authorized network access or an environment that explicitly provides a general-purpose proxy protocol. Configure them according to the type and security requirements specified by the administrator; fewer settings do not necessarily make a protocol better for long-term use. On iPhone and iPad, connection stability still depends on network changes, credential validity and server restrictions. If a proxy repeatedly reports authentication failures, check the credential status and authorized scope rather than relying on repeated reconnects.
If your work requires low latency or UDP, first confirm that the entry point supports those requirements. If you only need access to specific authorized resources, pay particular attention to destination routing and authentication scope. Protocol selection works within the connection conditions you already have; it cannot add capabilities the server does not provide. You can note the purpose and network conditions in an entry's label, but do not include a password. This helps distinguish entries without exposing credentials in list screenshots.
06 / WIREGUARD
WireGuard: keys, tunnel addresses and allowed addresses determine reachability
From proxy requests to an IP tunnel
WireGuard is designed as an encrypted IP tunnel, unlike the protocols described above in terms of individual proxy requests. To understand its configuration, consider the relationship between the tunnel interface address, peer identity, UDP endpoint and allowed addresses. It identifies peers using public and private keys; authentication is not completed simply by sending a username and password to a server. Existing configurations are usually provided by the server administrator. Enter the complete set of related details; an Endpoint alone is not enough to establish a usable path for your traffic.
WireGuard's design emphasizes a relatively lightweight protocol and explicit key relationships, but that does not mean there are fewer configuration errors or that it is always the fastest option on mobile networks. It typically uses UDP, so if the current network cannot carry that traffic properly, both the handshake and data transfer are affected. Even when the peer responds, the remote network still needs correct forwarding, access controls and a return path. An established tunnel and a reachable destination are separate conditions; verify both during testing.
Private Key, Public Key and optional shared key
The Private Key identifies your device and must be kept secret; the corresponding public key is provided to the peer. The Peer Public Key entered by the client should be the remote peer's public key, not your own. Common mistakes include reversing the keys for the two sides, or replacing a private key without updating the server's record of that user's public key. A key that looks correctly formatted only suggests that its characters may be valid; it does not prove the two sides are correctly paired.
If the configuration includes a Preshared Key, it is additional shared material alongside the public/private key pair, and both sides must use the same value. Do not add a random value when the configuration does not include one, or remove an existing one only on the client. Hide Private Key and Preshared Key in screenshots and when troubleshooting. A public key is not secret authentication material, but it may identify a device; avoid sharing it alongside the endpoint and private-network topology. For help, provide which fields are present, the error type and a redacted configuration structure.
What Address, Allowed IPs and DNS control
Address usually specifies the address assigned to the local tunnel interface. It is not the remote server's public address or an arbitrary address on the local Wi-Fi network. Endpoint is the remote host and port the client can reach. Allowed IPs defines address ranges associated with the peer and participates in WireGuard's address selection and validation; it is not identical to Shadowrocket's higher-level rules. A request can use the tunnel as intended only when both configuration layers cover its destination.
DNS settings control name resolution; they do not automatically add missing address routes. Accessing an internal domain requires DNS to return the correct address, a usable path to that address, permission to access it on the remote end and a route for the response. If an IP address works but its domain does not, check DNS first. If the domain resolves to the expected address but it remains unreachable, check Allowed IPs, higher-level rules and the remote return path. Do not keep changing DNS to fix a destination range that the tunnel does not handle.
| Field | Identifies | What to check |
|---|---|---|
| Private Key | Local identity | Must match the local public key registered by the peer |
| Peer Public Key | Remote identity | Do not enter the local public key here |
| Endpoint | Remote network endpoint | Host, port and UDP reachability |
| Allowed IPs | Peer address range | Check together with the destination and higher-level routing |
MTU, keepalive and recovery on mobile networks
MTU relates to packet size after tunnel encapsulation. A value that is too large may cause large-packet transfers to fail on some paths, even when small requests work; a value that is too small increases packet count and overhead. Start with the recommendation in your existing configuration, and adjust it gradually only when there is evidence to do so. Persistent Keepalive can maintain a network mapping when needed; shorter intervals are not always more stable. Frequent keepalives increase background traffic and wireless wakeups, so set them based on network behavior and remote requirements.
After switching mobile networks, endpoint reachability, mapping state and DNS results may all change. Note separately whether the tunnel handshakes again, only some address ranges fail, or the problem appears only after the screen locks. For an authorized private network, test one known resource first, then expand the scope. Do not use an unrelated public website to decide whether the tunnel is working fully. The basic checks are the same on iPad; for purchase and restore questions, see the iPad user guide.
07 / HYSTERIA2
Hysteria2: confirm UDP availability before using this QUIC-based transport
Design goals and network requirements
Hysteria2 uses QUIC as the basis for proxy transport, with a focus on data delivery and congestion handling under challenging network conditions. QUIC runs over UDP and uses TLS for its security handshake. It can organize multiple data streams within one connection, unlike a single TCP byte stream, but those streams still share the overall bandwidth, congestion conditions and server resources. Multiple streams do not mean an individual request is entirely unaffected by other traffic, and the protocol name alone cannot predict actual throughput.
The most important requirement is a working UDP path. Some networks allow normal web browsing but restrict or handle UDP entry points differently. A working TCP-based entry therefore does not prove that a Hysteria2 entry should work. If it fails, first check DNS resolution, the port and UDP reachability, then check authentication and TLS. If the underlying path is unavailable, changing bandwidth settings or adding keepalives will not make up for the missing network conditions.
Authentication, TLS and obfuscation settings
Existing Hysteria2 details typically include a server address, port, authentication information and TLS settings. Preserve the authentication field exactly as required by the server; do not try a password from another protocol. TLS follows the same principles described above: the connection destination, Server Name and certificate name must be correctly related. Even though the transport uses UDP, certificate validity dates, names and trust chains still matter. Not every handshake failure is caused by UDP restrictions.
If the server uses obfuscation, the client needs the corresponding type, password and other settings. Obfuscation, authentication and TLS are separate layers with different roles; getting one right does not remove the need to check the others. Do not add unknown settings if the entry point does not use obfuscation. If an imported entry works but a manually recreated one does not, compare the fields one by one, especially optional settings that may be omitted from abbreviated details.
Bandwidth fields are not speed test results
Some configurations include upload and download bandwidth fields that may affect how a particular congestion-control mode behaves. The values are not speeds measured by the client in real time and do not represent guaranteed server throughput. Server policy and negotiation may determine whether they take effect; entering a larger number cannot increase physical bandwidth. Check the units used by the app, avoid confusing bytes per second with bits per second, and do not put your download capacity in the upload field.
A value far above the actual access capacity may cause queuing, packet loss and instability in some modes; a value that is too low may limit available throughput. Use real network conditions and the server's instructions as your guide, and keep the original configuration as a baseline. During testing, observe sustained downloads, responsiveness of interactive requests and whether other apps experience queuing. A brief speed peak does not prove that the settings are appropriate; assess stability over a longer period.
Resource use on iPhone and iPad
QUIC processing, encryption and data transfer all use device resources. Actual battery use depends on the implementation, traffic, packet loss and wireless signal strength; there is no fixed conclusion that applies to every device. During high-volume testing, both app processing and wireless transfer are active, so a warmer device does not by itself prove a configuration error. More useful indicators include sustained performance under the same workload, repeated background reconnects, and problems on weak signals or after waking from sleep.
If the connection fails only on a particular Wi-Fi network, test the path on another authorized network. If it fails on every network, check the original authentication details, TLS and server status. If the connection establishes but stalls during high-volume transfers, check packet loss, packet size, bandwidth settings and remote resources instead of immediately switching protocol types. A switch only helps if the server actually provides the new protocol. Record the stage at which the failure occurs and a concise error message; this is more useful than simply noting that it does not work.
After testing, stop repeated speed tests and unnecessary sustained transfers, restore your normal configuration and observe battery use. If the problem started after a subscription update, compare the entry settings first to distinguish a server-side change from a local network change. Manual edits to a subscription entry may be overwritten by a later update, so keep test copies separate and understand how they relate to the subscription entry to avoid the same issue recurring after an update.
08 / ROUTING · VALIDATION
Rules, DNS and validation: check protocol availability separately from request routing
The three Global Routing modes
Choosing the correct protocol only makes communication with the server possible; whether a request uses that server also depends on Global Routing. Config uses the rules in the active Config file to determine the policy. Proxy mainly sends requests through the selected proxy. Direct mainly accesses destinations through a direct path. These modes control request routing; they cannot fix incorrect protocol authentication. If a website works in Direct mode, that does not prove the proxy server works—the request may not have gone through it at all.
| Mode | Interface label | What to verify |
|---|---|---|
| Config | Config | The active file, rule order and matching policy |
| Proxy | Proxy | The selected entry and actual request path |
| Direct | Direct | Direct network path and destination reachability |
Rule order and fallback behavior
Rules are generally matched in order. An earlier, more specific condition may determine how a request is handled before later rules are considered. DOMAIN matches a full domain, DOMAIN-SUFFIX matches a domain suffix, and DOMAIN-KEYWORD matches a keyword. IP-CIDR and IP-CIDR6 target address ranges; GEOIP matches IP location data. FINAL is a fallback when no earlier rule matches. The examples below show the structure of rules in a Shadowrocket configuration. They contain no connection details and are not complete configurations for every network.
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY
In these examples, PROXY and DIRECT are policy keywords, not the labels of individual entries. GEOIP relies on IP location data; it does not identify a website's language, business owner or actual content location. Domains may resolve to multiple addresses, and results can change. Before using IP-based rules, understand where and when resolution occurs. If a rule seems correct but has no effect, check whether the request includes a matchable domain, what the final destination address is, and whether an earlier rule already matched it.
REJECT denies a connection; it does not analyze page content semantically. A domain may host multiple functions, so rejecting it can also affect content you want to keep. An app's own connection behavior can also affect which match information is available. For more on these limits, see how REJECT rules work and when to use them. Rules such as USER-AGENT, which depend on application-layer information, also require you to confirm that the current connection provides usable match data. Do not assume that every encrypted request exposes these fields.
DNS, IPv6 and destination addresses
DNS resolves domain names to addresses; proxy protocols handle subsequent data transfer. They are related, but they are not the same setting. If name resolution fails, the client may never get a chance to connect to the destination. If resolution succeeds but returns an unreachable address, the connection may time out. When a destination has both IPv4 and IPv6 addresses, the current network may not reach them equally well. Check which address family was actually used, not just whether DNS returned any result. Before disabling a feature globally, confirm that it is causing the failure.
Domain rules and IP rules may also produce different results because a request does not always have the same information available when it is matched. For one destination, check the DNS result first, then the destination address and policy shown in the connection details. Do not change DNS, the rules file and the protocol at the same time. For authorized private networks, public DNS may not know internal names, while internal DNS may be unreachable over the current path. Check name resolution, the path to the DNS server, destination routing and the return path in turn.
A complete troubleshooting workflow
First, confirm that the original entry comes from your own valid details and keep an unchanged copy. Next, check the type, address, port and authentication. Then verify transport, TLS and optional settings. Check Global Routing, the active Config and which rule matches the request. Finally, test a real service against a single destination. Confirm an observable result at each step before moving on. Connectivity Test can help but does not replace testing the actual service; traffic changes in Data are only an indication of network activity.
To report an issue, provide the device platform, access network type, protocol and transport combination, stage of failure and a redacted error message. Do not share a complete subscription link, password, private key or QR code containing identity details. Before reinstalling, save your own configuration and any necessary details so you do not lose your troubleshooting baseline. For purchase restoration and installation details, see how to restore a purchase. For first connection steps, return to the setup guide; for common issues, browse Troubleshooting.