A latency reading in Shadowrocket does not mean DNS resolution for the destination website has succeeded. This guide is for users who already have their own provider and configuration. First, keep the test conditions consistent; then check the active Config, DNS upstream, and matching rules to distinguish resolution failures from connection failures or website issues. Change one setting at a time, and keep a copy of the original configuration so you can restore it.
1. Distinguish a latency test from loading a website
A latency test only shows that the connection covered by that particular test received a response at that time. It may not access the website that is failing, or use all the same resolution and connection steps as the browser request. So even with a latency reading, a request can still fail during domain resolution, policy selection, the TLS handshake, or page resource loading.
Note a specific failing domain, the time of the failure, the network in use, and the current Global Routing setting in Home. Don’t use “all websites are down” as a substitute for test results: a page may load resources from its main domain, image domains, and a login endpoint. A page with some resources failing is a different problem from a main domain that cannot be resolved at all.
Bottom line: identify where the failure occurs
If you have the destination IP and then see a connection timeout, check the destination connection and policy first. If the same domain repeatedly returns no resolution result, investigate DNS. Port numbers describe common protocol conventions; they do not guarantee that the current network allows those requests.
2. Keep Home, Config, and On Demand test conditions consistent
Before troubleshooting, save a copy of the current configuration or export a backup, and note the original Global Routing setting. This guide focuses on Config because it lets you inspect the rules in your configuration. Proxy and Direct can be used for brief comparisons, but neither proves on its own that DNS is working or failing. Scene is not a useful comparison unless you first document the behavior of the current scene.
-
Record the current state
Go to Home → Global Routing and note whether it is set to Config, Proxy, Direct, or Scene. Also note the currently selected server. Don’t change the server and DNS at the same time during testing.
-
Check the active configuration
Go to Config and confirm which configuration file is selected. Tap the information button beside that file, choose Edit Plain Text, and check the saved
[General]and[Rule]sections—not a file that is not currently in use. -
Check automatic connections
Go to Settings → On Demand and note whether it is enabled and which conditions are configured. If the connection turns back on after you disconnect, check this setting first. If you temporarily disable it, note its original state and restore it after testing.
-
Change one variable at a time
Stay on the same Wi-Fi or cellular network, then visit the same domain repeatedly with Home → Global Routing → Config selected. After each change, save and reconnect before making a new request, and record the result.
If the problem occurs only on a particular Wi-Fi network, first check whether it requires a web-based sign-in. Until sign-in is complete, DNS requests and HTTPS connections may be restricted; editing rules repeatedly will not authenticate you to the network. If you compare with another network, treat that as a separate test and don’t combine it with other setting changes.
3. What to check in DNS settings
The DNS upstream returns addresses for domain names; rules choose the policy for a request. These are separate settings. In the active configuration’s [General] section, dns-server specifies DNS servers. Check the actual values, address format, and reachability before changing them. A familiar-looking address is not necessarily reachable on your current network.
| What to check | What it means | What to look for |
|---|---|---|
dns-server |
DNS upstream list in the configuration | Check for typos, outdated addresses, or upstreams that may not work with the current network. |
system |
Use the DNS servers provided by the system | The system’s DNS settings may differ between Wi-Fi and cellular networks. |
| DNS over HTTPS | Send DNS queries over HTTPS | Check the full URL, path, certificate, and upstream connectivity. A hostname alone is not a valid query endpoint. |
| A / AAAA | Return IPv4 / IPv6 addresses separately | Receiving an AAAA record does not mean the current network has working IPv6 connectivity. |
| Server hostname | The existing server address may itself need to be resolved | Distinguish a failure to resolve the server hostname from a failure to resolve the destination website’s domain. |
This minimal snippet shows where the fields go; it is not a template for replacing your entire configuration. It sets the DNS upstream to the servers provided by the system, making it a clear comparison case, but it may not suit every network. Edit the existing field, keep the rest of the configuration, and don’t add multiple entries with the same name.
[General]
dns-server = system
When using an encrypted DNS endpoint with a hostname, consider how that hostname is resolved first and whether the endpoint can be reached. Encryption changes how queries are transmitted; it does not guarantee correct results or a working connection to the website. If the upstream connection itself fails, check its reachability instead of adding more addresses to mask the problem.
- Make changes only in the configuration currently in use. After updating a remote configuration, check whether your local changes were retained.
- Don’t enter a website URL, subscription link, or server connection parameters in
dns-server. - To investigate IPv6 issues, compare results on the same network. Permanently disabling IPv6 is not a universal fix for DNS problems.
4. Use rule matching to distinguish DNS issues from routing issues
With Config selected under Global Routing, rule order affects the final policy. Check more specific domain rules first, then address rules and the final FINAL rule. A domain may resolve correctly while its request is routed through an unavailable path; changing DNS won’t directly fix a policy mismatch.
This snippet demonstrates rule syntax only; the example domain and reserved documentation address do not represent a service. Don’t paste the whole snippet over your existing rules. Find the corresponding entries in your own configuration and check connection logs to confirm which rule matches. In particular, FINAL,DIRECT is the final policy in this example, not a general recommendation.
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
| Keyword | What it matches | How it helps with troubleshooting |
|---|---|---|
DOMAIN-SUFFIX |
Domain suffix | Check whether an earlier rule assigns the destination domain to an unexpected policy. |
IP-CIDR |
IP address range | When the destination is a domain, matching an address rule may involve resolution; no-resolve prevents that address rule from actively triggering a lookup. |
GEOIP |
IP geolocation database | This classifies an address; it does not guarantee a website’s domain or the actual location of its service. |
FINAL |
No earlier rules matched | Check which policy is applied last, and don’t put a catch-all policy before specific rules. |
Bottom line: compare policies before changing DNS
If the same destination works with Proxy but fails with Config, first compare the matching rule and the route in use. This can help narrow down the issue, but it does not by itself prove that DNS is at fault. Switch back to Config and check the relevant rules one at a time.
5. Choose the next step based on the actual error
Interpret an error in the context of the stage that produced it. The examples below are messages that may appear in DNS responses or network logs; they are not messages Shadowrocket displays for every failure. Use each diagnosis only when the corresponding text appears in your actual records. A browser’s generic “can’t open this page” message does not, by itself, mean NXDOMAIN.
Error: NXDOMAIN
Cause and next steps: DNS reports that the queried name does not exist. Check the full domain and spelling, then compare responses for the same domain using another upstream. If the results differ, record where each response came from and investigate further.
Error: SERVFAIL
Cause and next steps: The DNS server could not complete the query, possibly because of an upstream failure or a validation issue. Check whether only one domain is affected, then compare with an upstream you have confirmed is reachable. Don’t assume the destination website is offline.
Error: connection timed out
Cause and next steps: A connection did not complete within the allotted time. This message alone does not identify DNS as the cause. Check whether the timed-out connection was to the DNS upstream, the configured server, or the website, then investigate that connection path.
If you see a certificate error, check the device’s date and time, the domain being accessed, the certificate name, and the HTTPS connection. Don’t “fix DNS” by ignoring certificate validation. If the page text loads but images don’t, check the rules and DNS resolution for each resource domain instead of repeatedly testing only the main site.
- Only one domain fails: Check the spelling, DNS response for that domain, and any specific rule for it. Then check whether the website itself is having an issue.
- Failures across the same network: Check network sign-in status, system DNS, and upstream reachability. If you switch networks, keep all other conditions the same.
- Resolution succeeds but the connection fails: Check address reachability, IPv4 / IPv6 routing, policy, and TLS instead of repeatedly changing DNS addresses.
- It works occasionally after a change: Consider cache expiration, reconnecting, and the setting change as separate factors. One successful request is not enough to establish the cause.
6. Retest, restore settings, and record what you found
After changing DNS, existing connections may not resolve the domain again immediately, and the browser or system may retain cached data. Save the configuration, reconnect, and make a new request; if needed, close and reopen the page. Don’t treat repeatedly refreshing the same page as an independent test, and don’t assume reconnecting clears every app’s cache.
After access is restored, undo temporary changes one at a time and keep only those that remain effective in repeated comparisons. In particular, restore the original On Demand and Global Routing settings so you don’t leave the device in a temporary Proxy or Direct state. If the configuration is updated afterward, check whether the active file or relevant fields have changed.
| Record | What to include |
|---|---|
| Network and time | When it happened, whether you were on Wi-Fi or cellular, and whether the issue recurred after switching networks. |
| Active configuration | Configuration name, Global Routing setting, DNS upstream type, and relevant rules. |
| Request result | Failing domain, DNS response or exact error, whether an IP was returned, and the final policy used. |
| One-variable comparison | What you changed, the result after reconnecting, and whether the problem returned after restoring the original value. |
Before sharing records with your own provider or support channel, hide the full subscription URL, tokens, UUIDs, passwords, and other credentials. Don’t publish your entire configuration. This guide covers client troubleshooting only and does not provide, sell, or recommend servers or subscriptions. A one-time client purchase is not a network service plan.