Sep 28, 2026 · Troubleshooting · About 8 min read

Shadowrocket Connected but No Internet: Check Server, Global Routing, DNS, and Rules

If Shadowrocket shows connected but pages won’t load, check server availability, Global Routing mode, DNS settings, and whether rules such as FINAL are matching.

At a glance

Shadowrocket’s connection switch shows the status of the local tunnel. It does not confirm that the remote server, DNS resolution, and destination website are all reachable. This guide assumes you already have your own server and subscription. Check the local network, server settings, Global Routing, DNS, and rules in order. Change one setting at a time and retry the same destination so a temporary recovery isn’t mistaken for a fix.

1. Distinguish Tunnel Status from Website Connectivity

A VPN indicator on an iPhone or iPad means the system has established the corresponding local network tunnel. A webpage still depends on DNS resolution, policy selection, a remote connection, and a response from the destination. A failure at any stage can leave the connection switch on while the page keeps loading. Toggling the switch repeatedly won’t identify where the problem lies.

App request System tunnel Resolution and routing Outbound connection Destination response

First note whether the issue affects every app, every webpage, or just one domain. Also record whether you were on Wi-Fi or cellular when it failed. A page loading in your browser only confirms that particular request worked; it doesn’t prove that other protocols or destinations are reachable. Use the same known test page for comparisons rather than trying lots of different websites.

  1. Record the Current Setup

    In Home, note the selected server, the current Global Routing mode, and when the failure occurred. In Config, note the active configuration and save a copy before making changes. Don’t overwrite the original configuration.

  2. Test the Local Network

    Go to Settings → On Demand, note the current state, and temporarily turn off automatic connection. Then turn off the connection switch in Home. Try a page that normally works without a proxy. If it still fails, check Wi-Fi sign-in, signal strength, or the local network first.

  3. Switch Networks

    Test the same page over Wi-Fi and cellular, then reconnect Shadowrocket. If it fails on only one network, keep the server and configuration unchanged and check that network’s DNS resolution, access restrictions, and connectivity first.

  4. Send a Fresh Request

    After each setting change, reconnect and open a new page to trigger a request. Existing connections and cached pages may still reflect the previous settings, so don’t rely on an already-open tab to tell whether a change worked.

2. Check Server Settings and the Outbound Connection

In Home, check which server is selected and open its edit screen. Compare its address, port, Type, and authentication details with the original parameters for your own service. A server appearing in the list doesn’t mean it’s still valid. A latency test result also doesn’t guarantee that the full connection needed to load a webpage will succeed.

CheckWhat to VerifyWhat This Tells You
Address and portCompare each value with your own service parameters. Check whether the address is outdated or the port was entered incorrectly.The remote service may use port 443, but don’t change a server’s port to 443 just because a webpage won’t load.
Type and authenticationCheck the fields required by your actual service, such as Shadowsocks, VMess, VLESS, Trojan, Hysteria2, or WireGuard.Password, identifier, and key fields aren’t interchangeable between protocols.
TLS and transportIf the service uses TLS, check the service name and certificate requirements. If it uses an additional transport, verify parameters such as the path.Don’t disable certificate verification as a substitute for fixing a service name, certificate, or device time issue.
Subscription statusIn Home, update your own Subscribe entry, then confirm that the selected server is valid and up to date.A successful update only confirms that entries were retrieved; it doesn’t guarantee that every remote server is reachable.

If you already have multiple valid servers, compare them by switching servers without changing Global Routing or DNS. If only one entry fails, check its parameters and remote status first. If all entries fail, consider the local network and any shared DNS settings. This guide does not provide, sell, or recommend servers or subscriptions.

3. Use Global Routing to Narrow Down the Issue

Check the current mode under Home → Global Routing. Proxy, Direct, Config, and Scene work differently. When troubleshooting, first confirm which policy is handling the traffic. Proxy can be a useful temporary comparison, but it won’t fix every network issue.

ModeWhat to CheckHow to Compare
ProxyRequests use the global proxy mode. Also confirm which server or policy is selected.If the same destination works in Proxy but fails in Config, focus on the rules and policy references.
DirectRequests use the direct mode, so the destination must be reachable from the current local network.This can help compare proxy and direct paths, but it is not the same as turning off the system tunnel.
ConfigTraffic uses the routing rules in the currently active Config.Check the matching rule, policy group, and FINAL—not just the entry selected in Home.
SceneCheck your Scene conditions and the actions they trigger.If the mode changes with the network environment, rule out Scene switching before comparing results.

For a comparison, keep the server and destination domain the same. Reproduce the issue in the original mode, briefly switch to Proxy, reconnect, and test again. Then restore the original mode. If Proxy also fails, DNS isn’t ruled out. If Config fails but Proxy works, that alone doesn’t prove FINAL is misconfigured; check whether the matching policy points to a different, unavailable server.

4. Check DNS: Successful Resolution Doesn’t Guarantee a Connection

If the server address is a domain name, it must be resolved first. Resolving the destination website’s domain is a separate request. So a successful server latency test and successful resolution of a website’s domain are not the same thing. First identify whether the server domain or destination domain is failing, then check its DNS resolution path.

53
Traditional DNS typically uses this port over UDP or TCP
443
DoH typically uses this port over HTTPS
1 item
Change One DNS Setting per Test
  1. Open Config and check the DNS settings in the active configuration. Also review the relevant settings under Settings → DNS, and make sure you aren’t treating a value from an inactive configuration as the current one.
  2. Check the resolver address, how it’s used, and whether it’s reachable. Encrypted DNS still depends on a network connection. Entering an HTTPS resolver address doesn’t guarantee that it’s accessible through the current route.
  3. If you changed DNS earlier, note the original value and temporarily restore a setting you’ve verified works. Then send a fresh request to the same destination. Don’t change the server, resolver, and rules all at once.
  4. If the log shows that the destination IP was resolved but the subsequent connection timed out, investigate the outbound path and destination service. If the request stopped at DNS resolution, check the resolver connection and the domain itself.

Don’t rely on entering the destination IP directly in a browser as your only test. HTTPS services often depend on the domain name, TLS service name, and virtual host configuration. Visiting an IP directly may cause a certificate error or show different content. IPv4 and IPv6 may also have different reachability. Use the address type shown in the logs to narrow down the issue instead of permanently disabling an address family to mask a network problem.

5. Check Rule Order, FINAL, and Policy References

When Global Routing is set to Config, open the configuration that’s actually active and check the rule order. Standard routing rules are evaluated in sequence, so an earlier match may prevent a later rule from taking effect. FINAL is a fallback rule; it doesn’t replace all preceding rules or fix server authentication failures.

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

This is only a syntax example, not a complete configuration to copy as a replacement. example.com is an example domain; PROXY must refer to a valid proxy policy or policy group in the current configuration. If that name refers to something else, check its actual definition rather than guessing the outbound route from the English name alone.

Copy the configuration before making changes. Then adjust only one rule or policy related to the failing destination and test again after re-enabling the configuration and reconnecting. If the issue clears, still check the request log to confirm that the expected rule matched. Don’t replace the entire ruleset or switch permanently to Proxy just because a page happened to load.

6. Retest Using Error Logs and Restore Your Settings

In the app’s connection records or logs, find the request matching the time of the failure and the destination domain. Check the resolution result, policy, and error details. The following are examples of errors that may appear in network logs. Actual messages may include addresses or other context. They help identify the stage of failure but don’t prove that a particular setting is wrong.

Error: connection refused

Cause and next steps: Often means the destination port refused the connection, though an intermediate device may also have rejected it. First check whether the record points to the proxy server or the destination site, then verify the relevant address, port, and service listening status.

Error: i/o timeout

Cause and next steps: A network operation didn’t complete in time. This alone doesn’t indicate an incorrect password. Use the connection stage in the same log entry to check the local network, server, or resolver, then test again.

Error: no such host

Cause and next steps: DNS resolution didn’t return a usable result. Check for a misspelled domain, missing or invalid DNS records, or a problem with the resolution path. First identify which domain failed, then verify the address and DNS settings. Don’t change unrelated rules.

If there’s no clear error, record the network, server, Global Routing mode, destination domain, time, and symptoms together. For example, “On Wi-Fi, Config timed out; with the server unchanged, the same page loaded after switching to Proxy” is more useful than “connected but not working.” This is an example of how to record an issue, not a test result from this guide.

  1. Restore any Global Routing, DNS, and configuration settings changed temporarily for testing. Keep only changes confirmed to be necessary through comparison.
  2. Once a manual connection is stable, restore Settings → On Demand to its original behavior if needed, then verify what happens when the network changes.
  3. Test one page that was already reachable and the page that previously failed. Check that the page’s APIs and other resources also work.
  4. When contacting your own service provider, include the protocol, port, time, and a redacted error log. Hide the full subscription URL, passwords, keys, and account identifiers.
Verify the App Store Listing