A latency reading in Shadowrocket only shows that a particular test received a response. It does not confirm that the browser’s DNS, rules, and HTTPS requests are all working. For users who already have their own provider configuration and subscription, this guide follows a step-by-step process—from network baseline and routing mode to DNS settings, rules, address families, and retesting. Change one variable at a time to distinguish resolution failures from connection timeouts and TLS errors.
1. A Normal Latency Reading Doesn’t Guarantee Websites Will Load
First, identify which test produced the latency reading. A test that connects to a server port and one that requests a webpage cover different parts of the connection path. If the server address is an IP, the test may not need to resolve that server’s domain at all. A browser still needs to resolve a website’s domain before connecting. So a latency reading in Home alone does not rule out a DNS issue.
A page that keeps loading does not necessarily indicate a DNS failure. Resolution may have succeeded while the subsequent connection was blocked, the destination server failed to respond, or the TLS handshake failed. Note the exact error and when it occurs before changing DNS. Don’t attribute every access problem to the same setting.
These port numbers help explain transport differences. They don’t mean your network allows those connections, or that you should change the server port to one of these values. Proxy server ports and DNS service ports are separate settings; the former must match your existing server configuration.
2. Establish a Repeatable Troubleshooting Baseline
Don’t start by changing the server, DNS, and rules all at once. Choose one affected website and note the current network, selected server, Global Routing mode, and active configuration. Use the full domain for comparisons. Don’t replace the domain in an HTTPS URL with an IP to “test DNS”: that changes certificate validation, SNI, and virtual host selection, so the results aren’t directly comparable.
-
Record the current setup
In Home, note the selected server and connection status. Open Home → Global Routing and record the current setting. In Config, note the active configuration and save a restorable copy before making changes.
-
Check the underlying network
Disconnect temporarily and try a website that the current network normally allows. If public Wi-Fi requires a web-based sign-in, complete it first. If the site still won’t load while disconnected, check the Wi-Fi or cellular connection first.
-
Keep the test conditions consistent
Reconnect, then temporarily select Proxy in Home → Global Routing. Keep the same server and retry the target domain. This provides a comparison with Config; it is not a recommended permanent setting.
-
Retest on another network
Keep the server and configuration unchanged, then compare Wi-Fi with cellular. If the issue occurs on only one network, note the DNS requests and connection errors on that network. Don’t overwrite the configuration right away.
-
Restore the original settings
After comparing results, restore the original Global Routing setting. If the connection comes back automatically after disconnecting, check the enabled conditions in Settings → On Demand. Temporarily disable the relevant conditions before testing again.
3. Check Which DNS Configuration Is Active
Open Config, confirm which configuration is active, and review its DNS settings. Editing an inactive file won’t affect the current connection, and a remote configuration update may overwrite local changes. Save a copy first, then reconnect after making changes and retest the same domain. Updating the server subscription in Home alone does not mean the DNS settings in Config have also changed.
| What to check | What it means | Troubleshooting focus |
|---|---|---|
dns-server | The DNS resolver specified in the configuration. | Check that the address is valid, the current network can reach the resolver, and the address hasn’t expired. |
system | Use the DNS resolver provided by the system. | System DNS may change when you switch Wi-Fi networks. Don’t assume test results from the previous network still apply. |
| DoH URL | Sends DNS queries over HTTPS. | Check the full URL and service path. A hostname without a path may not be a valid endpoint. |
| Server hostname | Resolution may be needed before establishing the proxy connection. | Determine whether it’s the proxy server’s hostname or the website’s hostname that failed to resolve. |
| Static hostname mapping | Maps a specified hostname to a fixed address. | An outdated address may bypass normal resolution. Check any mappings you added manually, especially older ones. |
This is a syntax example, not a general fix. It uses the system resolver as one variable in a controlled comparison. If the system DNS is faulty on your current network, this setting may fail too. Change only the corresponding field in your existing configuration; don’t delete other rules, policies, or server settings just to test.
[General]
dns-server = system
With DoH, also check the dependency on resolving the service address first. If the DoH endpoint uses a hostname, its address must be resolved before an HTTPS connection can be established. The query may stall if the endpoint is unreachable, certificate validation fails, or its hostname cannot be resolved. Encryption changes how queries are carried; it does not guarantee endpoint reachability or replace checking the current network.
4. Check Rule Matches Separately from DNS Results
Direct, Proxy, Config, and Scene under Global Routing are not four DNS protocols. Direct and Proxy define different traffic-handling modes; Config follows the active configuration, while Scene depends on the settings for the selected scene. During troubleshooting, don’t change the scene and DNS settings at the same time. Otherwise, the same website may take a different path between tests.
In Config, check the order of the rules too. Domain rules and IP rules match different things, and IP-based matching may require resolving the target domain. If the logs already show an address but the request uses the wrong policy, changing DNS again may not help. The reserved domains and documentation addresses below illustrate syntax only; they are not connectable services.
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN-SUFFIXchecks the domain suffix. If a broader rule above it already matches, a later rule won’t be selected for that request.IP-CIDRchecks the address range. In this example,no-resolvemeans this rule won’t actively trigger domain resolution; it does not disable DNS for the entire app.GEOIPmatches based on the IP’s geographic data. Don’t infer whether a rule matches from the domain’s language or the website’s name alone.FINALis the policy used when no earlier rule matches. Check which policy it actually points to rather than just confirming that the keyword appears in the file.
Also distinguish A and AAAA records: the former returns an IPv4 address, the latter an IPv6 address. If resolution succeeds but connections fail only with one address family, that points to an address reachability issue. Keep the DNS response and subsequent connection results for comparison. Don’t treat the presence of an AAAA record as a fault, and don’t change IPv6, DNS, and rules all at once.
5. Choose the Next Step Based on the Exact Error
The following error identifiers come from Apple’s networking error domain. Use them as clues when the exact text appears in error details or diagnostic information; this does not mean Shadowrocket always displays these messages. The browser may show only a localized error. Record the full message you actually see rather than guessing based on “won’t load.”
Error: NSURLErrorDomain Code=-1003
Cause and fix:This indicates that the host could not be found. Check the domain spelling and resolution results first. Confirm whether the failed hostname belongs to the server or the website, then check the active DNS source and any static mappings.
Error: NSURLErrorDomain Code=-1001
Cause and fix:This indicates that the request timed out; it does not prove DNS failed. First check whether the target IP was obtained, then review the request’s rule policy, selected server, and the current network’s ability to connect.
Error: NSURLErrorDomain Code=-1200
Cause and fix:This indicates a secure connection failure. Check the device’s date and time, the target certificate, and the TLS connection. Don’t hide the issue by disabling certificate validation; continue by checking the destination address and network authentication status.
If only one website fails while other domains load reliably, note that domain and any related resource domains separately. A page’s main document, images, and scripts may come from different domains. If the page appears but its images keep loading, the main domain may already have resolved successfully. Check the rules for the failing resource domains to pinpoint the issue more easily than replacing DNS across the board.
- Record the network type, Global Routing mode, active configuration, and target domain associated with the error.
- Distinguish “no resolution result” from “IP obtained, but connection timed out,” and keep the exact error text.
- Before sharing diagnostics, redact subscription tokens, passwords, UUIDs, and personal network addresses. Share only the information needed to locate the issue.
6. Common Questions and How to Verify a Fix
Latency readings are still showing. Should I switch servers?
Keep the current server for now and compare Global Routing modes and DNS settings one variable at a time. If the target IP has been obtained but the same request keeps timing out through the current server, retest with another server you already have to distinguish a server-side path issue from a resolution problem.
Why does the browser still show the same result after I change DNS?
First confirm that you changed the configuration currently in use in Config, then reconnect. The browser may reuse a connection or cached result. Close and reopen the affected page, or cross-check with another domain that loads normally. Avoid changing several DNS sources in quick succession.
It works with Proxy but not Config. What should I change?
Switch back to Config and check which rule matches the target domain, especially preceding DOMAIN-SUFFIX, IP-CIDR, GEOIP, and the final FINAL rule. Compare the resolution results from both tests too. Don’t consider the issue fixed just because you changed every rule to PROXY.
What if Wi-Fi fails but cellular works?
Complete any web-based Wi-Fi sign-in and check the system DNS provided by that network. Retest with the same server and configuration. If a specified resolver endpoint is unreachable only on that Wi-Fi, note the endpoint and error and ask the network administrator to investigate.
Verify the fix using your original setup, not the temporary Proxy test mode. Restore the intended Global Routing and On Demand settings, reconnect, and revisit the website that first failed along with a comparison site. Confirm that the main page and required resources load, and that access doesn’t depend on temporarily switching networks.
- Keep a copy of the final configuration and note the DNS source you chose. Revert temporary changes that aren’t supported by the evidence.
- Retest on your usual networks. If you use both Wi-Fi and cellular, record the result on each.
- If the issue is still reproducible, continue troubleshooting with the redacted error text, target domain, and rule match information instead of repeatedly importing the same subscription.