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

Latency tests can succeed while websites fail to load. Learn what Shadowrocket’s DNS settings do and how to pinpoint where name resolution is failing.

At a glance

A latency result doesn’t confirm that the full path to a website is working. If you have your own provider and subscription, can connect in Shadowrocket, but can’t open a website, note the failing domain and current network first. Then check the DNS response, DNS request path, and Global Routing in turn. These controlled comparisons help distinguish a nonexistent domain, a DNS timeout, a routing-rule mismatch, and a website connection failure.

Normal latency only means the test destination responded

Shadowrocket’s latency test and opening a webpage in a browser are different operations. They test different parts of the connection: a response from the server’s port doesn’t confirm that proxy authentication, target-domain resolution, the TLS handshake, and webpage resources all work. Even an HTTP-based test only confirms that its test destination was reachable at that moment; it doesn’t replace checking the website that actually fails.

Domain resolution Rule matching Outbound connection TLS handshake Page loading

This flow shows the main stages involved in a request, but not every protocol follows them in exactly this order. If the proxy server address is a domain name, it must also be resolved first; the destination website’s domain may instead be resolved remotely. Identify whether the problem involves the server address or the website address before deciding what to change.

Record the conditions first, then run a controlled comparison

Keep your existing configuration during troubleshooting; don’t change the server, DNS, and rules at the same time. The steps below use iPhone as an example; the same approach applies on iPad. Test with a server and subscription you already have. A successful subscription update only means the subscription URL could be read; it doesn’t confirm that every server in it or every destination website is reachable.

  1. In Home, note the selected server, connection toggle state, and Global Routing selection. In Config, note which configuration is currently enabled.
  2. Record the failing URL’s hostname, when the issue occurred, whether you were on Wi-Fi or cellular, and the browser’s exact message. Remove subscription URLs, passwords, and tokens before sharing your notes.
  3. Turn off the connection and try a website that is usually accessible directly on your local network. If it still won’t load, check the local network or any required sign-in first.
  4. Reconnect using the same server and try the same website again. After each change, close the old browser tab and test in a new one to reduce the effect of existing connections.
  5. If needed, compare Wi-Fi with cellular without changing DNS. Differences after switching networks can help identify issues with the local router or mobile network.

What the DNS settings control

Review the DNS settings available in Settings → DNS, then check the active configuration’s [General] section in Config. Depending on the configuration, DNS servers, resolution strategies, and domain-specific mappings may all be involved. Check the configuration that’s actually enabled; seeing an address in a field doesn’t prove that every request uses it.

SettingWhat it doesWhat to check
System DNSUses the resolver provided by the current system or network.The resolution environment may change when you switch Wi-Fi networks; this isn’t a fixed public DNS address.
dns-serverDNS server settings in the configuration file.Check the address and format, and whether requests can reach it—not just whether an address is entered.
DNS over HTTPSSends DNS queries over HTTPS, typically using TCP port 443.The service endpoint must be reachable and its certificate must validate. If the endpoint uses a domain name, that name must also be resolved first.
Standard DNSUsually uses UDP port 53; some cases require TCP port 53.Check whether the current network restricts this traffic and whether queries time out. The website’s connection on port 443 is separate.
[Host]Provides a static mapping for a specified hostname.An outdated address can bypass normal resolution, making a domain resolve even though the website connection fails.

For example, the following line in a configuration indicates that system DNS is used. It illustrates syntax; it isn’t a complete file to replace your existing configuration with. Save the original value before making changes. If the configuration comes from your own provider, check its DNS requirements before testing a single setting.

[General]
dns-server = system

Takeaway: change one DNS variable at a time

Keep the server, Global Routing, and destination domain unchanged. Compare the original DNS setting with system DNS. If the problem consistently follows the setting change, investigate the resolver and request path further.

Use the response status to identify three types of DNS failure

A browser message such as “server not found” usually isn’t enough to identify the cause. If connection logs or diagnostic output are available, look for a DNS response status, the queried domain, and timeout details. The terms below are general DNS statuses or diagnostic messages; they may not appear verbatim in every Shadowrocket interface.

Error: NXDOMAIN

Cause and fix: The resolver reports that the queried domain doesn’t exist. Check the full hostname and spelling, then compare with another resolution path to distinguish a genuinely nonexistent domain from an unusual result from one resolver.

Error: SERVFAIL

Cause and fix: The resolver couldn’t complete the query, possibly due to an upstream issue or validation failure. Note the domain and time, then retest over another reachable resolution path. If the issue persists, share the details with your provider.

Error: timeout

Cause and fix: No response arrived before the query timed out. Check the DNS server address and request path, then try switching between Wi-Fi and cellular with the same settings to see whether the timeout occurs only on a particular network.

Also distinguish “no AAAA record” from “domain doesn’t exist.” AAAA records provide IPv6 addresses, while A records provide IPv4 addresses; a domain having only an A record isn’t necessarily a problem. If an address is returned but the connection then stalls, check address-family reachability, routing, and TLS instead of repeatedly changing DNS.

Use Global Routing to distinguish DNS issues from rule issues

In Home → Global Routing, Config processes traffic according to the current configuration, Proxy sends applicable traffic through the proxy, and Direct connects applicable traffic directly. Switching modes can help isolate an issue, but it isn’t a DNS-only switch: the destination’s connection path and the opportunity for remote resolution may also change.

  1. Reproduce the failure under Config first, and note the domain and the rule or policy that matches it.
  2. Keep the same server, briefly switch to Proxy, and revisit the same domain. If it works, check the routing rules and selected policy in Config first; this alone doesn’t prove that DNS is working properly.
  3. For a destination that’s usually reachable directly on your local network, briefly compare with Direct. If the destination itself can’t be reached locally, failure in Direct doesn’t prove that DNS is misconfigured.
  4. Restore the original mode after the comparison. If you use Scene, first check which connection behavior the active scene selects so that a scene change doesn’t skew the comparison.

The following illustrates rule syntax. example.com is an example domain, not a diagnostic service. DOMAIN-SUFFIX matches a domain suffix, IP-CIDR matches an address range, GEOIP matches by IP geolocation, and FINAL handles requests not matched by earlier rules. Rules are checked in order. Address-based rules may also depend on resolution results, so don’t focus only on the last line.

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

no-resolve avoids triggering an additional domain lookup just to match the corresponding address rule; it isn’t a setting that “fixes all DNS.” If an earlier rule sends a domain through an unavailable path, changing DNS alone may not help. Check which rule matched, then adjust its policy or position.

Common questions: caching, subscriptions, and restoring connectivity

Why won’t the website load after I change DNS?

First confirm that you changed the active configuration, then reconnect and open a new browser tab. The app or system may retain cached results or existing connections. If an address is returned but the connection still fails, check the rules, outbound connection, and TLS instead of adding more DNS addresses.

If my subscription updates, does that mean DNS is working?

No. The subscription URL, proxy server, and destination website may use different domains and paths. In Home, check the subscription update result and server status separately, then investigate the hostname that won’t load. Keep your existing configuration to avoid introducing another test variable during an update.

If only Wi-Fi fails, should I change servers?

Keep the same server and DNS, then switch to cellular and test again. If the issue only occurs on that Wi-Fi network, check for a required sign-in, router-provided DNS, and network restrictions. There’s no need to change the protocol and server at the same time before identifying the cause.

Could a certificate error be a DNS failure?

Not necessarily. A certificate error usually means the connection has reached the TLS check. Verify the device’s date and time and that the certificate matches the destination domain. Resolving to the wrong address can also cause a certificate error, but don’t hide the problem by disabling certificate verification.

Retest under the same conditions after recovery

One successful page load only confirms that it worked once. After recovery, retest on the network where the problem first occurred, using the original destination domain and your usual mode. Check that the page’s supporting resources load too. The key is to record which variable changed when the issue cleared, not how many settings you changed.

Takeaway: let the failing step guide your next check

If there’s no response, check the DNS request path; if the domain is explicitly reported as nonexistent, verify the hostname; if an address is returned, investigate the connection and rules. Record each comparison to avoid repeatedly overwriting your configuration.

Go to the App Store