Shadowrocket DNS Troubleshooting: Latency Is Normal but Websites Won’t Load

If latency tests succeed but websites won’t load, DNS may be the issue. Learn what Shadowrocket’s DNS settings do, how DNS failures appear, and how to troubleshoot them step by step.

At a glance

This guide is for cases where you’ve configured your own service in Shadowrocket and latency tests return a result, but your browser still can’t reach websites. Check each layer in order: basic connectivity, Global Routing, DNS, rules, and cache. Distinguish between a domain that won’t resolve and an address you can resolve but can’t connect to. Change one setting at a time so you can tell what made a difference.

Normal latency doesn’t guarantee websites will load

A latency test only shows that its target responded using the test method. Whether it involves DNS resolution, proxy authentication, or access to a destination website depends on how the test works. A successful test doesn’t prove that every site will load. To open an HTTPS page, the browser also needs to resolve the domain, connect to the destination, complete the TLS handshake, and receive a server response. A failure at any step can prevent the page from loading.

Domain request DNS lookup Rule evaluation Destination connection TLS handshake Page response

This sequence helps narrow down a failure; it doesn’t mean every request follows exactly these internal steps. Domain rules can match before the destination IP is known, while IP rules may require a DNS result. Also distinguish between two lookups: if the proxy server is specified by domain name, that name must be resolved first. Where the destination website’s domain is resolved depends on the protocol, outbound route, and configuration.

Start with a repeatable test

Before testing, note the failing URL, network, server selected in Home, and Global Routing setting. Compare two sites that usually work with one that fails. Change one setting at a time, then revisit the same sites. The steps below assume you already have your own server or subscription; purchasing the client does not include a connection service.

  1. Record the current settings

    In Config, confirm which configuration is active and save a backup first. Note the current Home → Global Routing option, selected server, and DNS values so you don’t mistake troubleshooting changes for your permanent setup.

  2. Check basic connectivity

    Temporarily disconnect and try a site you can normally access directly. If it still fails, complete Wi-Fi authentication or switch to a working network. Check Settings → On Demand. During troubleshooting, temporarily disable conditions that may reconnect automatically, then restore them when you’re done.

  3. Set a fixed outbound route

    Return to Home, select one of your working servers, and connect. In Home → Global Routing, temporarily select Proxy and retry the same URL. Proxy helps isolate the effect of rules; it doesn’t guarantee that every DNS request goes through that server.

  4. Check DNS resolution

    Open Settings → DNS and note the current settings. Compare them with the DNS entries in the enabled Config. Start with a clearly identified DNS source; don’t combine several untested resolvers.

  5. Restore and retest

    Restore the original Global Routing setting and revisit the same pages. If Proxy works but Config doesn’t, check your rules. If both fail, determine whether the problem is a DNS lookup, destination connection, or TLS error.

Check the DNS resolver, transport, and scope

DNS translates domain names into addresses. An A record provides an IPv4 address; an AAAA record provides an IPv6 address. Getting a record means the lookup succeeded, but it doesn’t guarantee that the address is reachable over your current network and outbound route. When checking DNS settings, ask three separate questions: which resolver is being queried, how is the query sent, and which requests does the setting apply to?

What to check What it means Troubleshooting step
Settings → DNS Check the app-level DNS settings and any existing overrides. An address entered in a field doesn’t by itself prove that it’s in use. Record the current value and compare it with the enabled configuration. Change one source at a time.
dns-server DNS server entries in the configuration; system means to use the resolver provided by the system. Check [General] in the active configuration. Don’t draw conclusions by editing an inactive copy.
Traditional DNS Usually uses UDP port 53, and may also use TCP port 53. Queries can time out if the port or transport is blocked. Compare Wi-Fi and cellular. Don’t assume a query timeout means the website is down.
DoH / DoT DoH typically uses HTTPS on port 443; DoT typically uses TCP port 853. Encryption doesn’t guarantee reachability. Check which protocols, addresses, and certificate requirements the resolver supports. Don’t just change the port or guess at a URL path.
A / AAAA Both record types may exist, but one network path may be unavailable. Match the DNS result to the address family that failed to connect, then investigate the IPv6 path.

If you need to check the system DNS baseline in a configuration file, use the syntax below. This is a snippet, not a complete configuration or an instruction to replace an existing file. Edit the corresponding entry in a backup, and avoid creating multiple [General] sections.

[General]
dns-server = system

Using system DNS can help identify whether a problem comes from a previously customized resolver, but it doesn’t guarantee the same results on every network. If your configuration assigns a separate resolution method to specific domains, check those settings too. Adding more resolvers isn’t a universal fix: different sources may return different records, making the problem harder to reproduce.

Takeaway: Switch networks to isolate transport issues

Keep the server, configuration, and test domain unchanged. Switch between Wi-Fi and cellular. If the issue changes with the network, check DNS reachability and the address-family path on that network instead of changing the protocol and replacing the entire rule set at once.

Classify the error by stage

The following are actual error identifiers that may appear in Apple network requests. A browser or Shadowrocket may not display these exact strings. Record the error text you actually see, the time, and the requested domain, then classify the failure by stage. A timeout alone doesn’t prove the problem is DNS.

Error: NSURLErrorCannotFindHost (-1003)

Cause and fix: The request couldn’t find the host. Common causes include a misspelled domain or a lookup that returned no usable result. Check the full domain name, then check whether the DNS query received a response. If only one domain is affected, confirm that it’s still valid.

Error: NSURLErrorTimedOut (-1001)

Cause and fix: The request didn’t finish within the time limit. The failure could occur during DNS resolution, connection, or while waiting for a response. First check whether you got the destination IP, then investigate the connection. Not every timeout is a DNS failure.

Error: NSURLErrorCannotConnectToHost (-1004)

Cause and fix: The host couldn’t be reached; that’s different from failing to resolve its name. If an address was returned, check the outbound route, destination port, and IPv4/IPv6 path instead of repeatedly changing DNS.

Error: NSURLErrorSecureConnectionFailed (-1200)

Cause and fix: The TLS connection couldn’t be established. First check the device’s date and time, then check the destination certificate and relevant TLS settings. Don’t hide the problem by disabling certificate validation.

DNS results also have distinct meanings: NXDOMAIN means the resolver reports that the name doesn’t exist; SERVFAIL means the server couldn’t complete the lookup; a query timeout means no response arrived within the wait period. These are different failures. For a domain you’ve confirmed is valid, repeat the test with fixed DNS settings. This tells you more than the browser’s generic “page can’t be opened” message.

Check for Global Routing and rule interference

Even after DNS resolution succeeds, the page may fail if the outbound route isn’t suitable. In Global Routing, Proxy sends traffic through a proxy, Direct connects directly, Config follows the active configuration, and Scene follows the selected scene. Don’t just check whether a server is selected; confirm that the current mode is actually using it.

If Proxy opens the same page but Config doesn’t, check for an earlier matching domain or IP rule. Rules are evaluated in order: DOMAIN-SUFFIX matches a domain suffix, GEOIP and IP-CIDR use IP conditions, and FINAL is the fallback. The snippet below shows syntax only; don’t replace your existing configuration with it.

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

Don’t use “open the destination IP directly in a browser” as your only HTTPS test. HTTPS also relies on the domain’s certificate, SNI, and site routing. Entering an IP directly may produce a different error. More useful evidence: did the same domain resolve, which action matched, and where did the subsequent connection fail?

Cache, IPv6, and common retest questions

After you change DNS, the app, system, or resolver may still have cached results. Once you’ve saved the configuration and confirmed it’s active, disconnect and reconnect, then make a fresh browser request. This may not clear every cache. Don’t assume one successful refresh proves the issue is fixed. Retest the same set of pages and note whether the network changed.

Why won’t websites load after I change DNS?

First confirm that you changed the active file in Config or the setting actually used in Settings → DNS. Then check whether the lookup returned an address. If there’s an address but the connection fails, investigate rules, the destination port, and TLS instead of adding more resolvers.

Only Wi-Fi fails. Should I re-enter my subscription?

Keep the subscription and selected server unchanged, then retest on cellular. If cellular works, return to Wi-Fi and check for an authentication page, the system DNS, and whether the current DNS transport is reachable. Don’t delete the subscription unless you have evidence that it’s invalid.

Things work after I turn off IPv6. Can I leave it off?

That suggests you should investigate the IPv6 path, but it doesn’t identify the root cause. Note whether the failed request used an AAAA address, then compare IPv4 connections on the same network. Temporarily disabling the relevant option can help with comparison; make a long-term decision based on your network and support for your own service.

What if reconnecting switches to a different configuration?

Check which item is active in Config, whether Scene is selected in Home → Global Routing, and whether Settings → On Demand triggers a connection after a network change. Keep the configuration and network conditions fixed when retesting so that an automatic switch isn’t mistaken for an intermittent DNS failure.

When contacting the provider of your own service, include the time of the failure, network type, Global Routing option, failing domain, exact error text, and whether an A or AAAA record was returned. Hide subscription tokens, credentials, and private keys; don’t share your full configuration file. Details such as “DNS resolved, but the connection failed” or “DNS times out only on this network” are more useful for troubleshooting than a latency screenshot alone.

Verify the App Store listing