DNS Changes Not Showing Up? How to Find Out Why and Fix It
Usually the change was made at a DNS host your domain does not use, or a cache is holding the old answer. Ask the authoritative servers first, then work outward.
The site loads on mobile data but not on your Wi-Fi, or fails only in your office. Prove it is up, then check for a firewall block on your IP, stale DNS, IPv6 and local filters.
You type your own website address and the browser gives up. Chrome and Edge show This site can’t be reached with one of these lines underneath: example.com refused to connect. (ERR_CONNECTION_REFUSED), example.com took too long to respond. (ERR_CONNECTION_TIMED_OUT) or The connection was reset. (ERR_CONNECTION_RESET). Firefox says Unable to connect or The connection has timed out, and Safari says it can’t connect to the server.
Then the strange part: the site loads fine on your phone once you switch off Wi-Fi, a friend in another town says it works, and your uptime monitor is green. When a site is down only for you, or only for one office, the cause is very often not the website at all. Something between your network and the server is refusing you, and the most common culprit is the server’s own firewall, which has blocked your public IP address. This guide shows you how to prove which it is in a few minutes and what to do about each cause. It is for site owners, office managers and the designers who get the “the site is down!” call.
Before a browser can ask for a page, it has to look up the domain’s IP address in DNS, then open a connection to that address on port 443 (HTTPS) or 80 (HTTP). These three errors all mean the second part failed: the lookup worked, but the connection did not. The exact error is a useful clue.
| Error | What the network did | Usual causes |
|---|---|---|
ERR_CONNECTION_REFUSED |
Something at that address answered straight away and said no | Web server stopped, DNS pointing at a machine that has no website (an old server), a firewall set to reject, or a local proxy or security tool on your computer |
ERR_CONNECTION_TIMED_OUT |
Nothing answered at all | A firewall silently dropping your traffic (the classic sign of your IP being blocked), the server switched off, or a routing problem |
ERR_CONNECTION_RESET or ERR_CONNECTION_CLOSED |
A connection started, then something cut it | A firewall or filter in the middle (office firewall, antivirus web shield, parental controls, an ISP filter), or an overloaded server |
ERR_NAME_NOT_RESOLVED or DNS_PROBE_FINISHED_NXDOMAIN |
The DNS lookup itself failed | A different problem: see our guide to DNS_PROBE_FINISHED_NXDOMAIN and expired domains |
If you see a Cloudflare-branded page instead, such as Sorry, you have been blocked or Error 1020, the connection worked and a Cloudflare rule refused you: go to our guide on Cloudflare 1xxx block errors. A Cloudflare 522 or 521 page is the opposite case, where Cloudflare could not reach your server: see Cloudflare 52x errors.
curl.exe rather than curl, so the built-in alias does not interfere). On macOS and Linux use Terminal. Replace example.com with your domain.Read the result like this:
| Result | Meaning | Go to |
|---|---|---|
| Fails everywhere, including our tools | The site or server really is down | Step 7 |
| Works on mobile data and in our tools, fails on your Wi-Fi for every device | Your network’s public IP is blocked, or your network filters the site | Steps 2, 5 and 6 |
| Fails on one computer only; other devices on the same Wi-Fi are fine | Something on that computer: DNS cache, hosts file, VPN, proxy, security software | Steps 3 and 5 |
| Works on some networks, fails on others, with no pattern by office | DNS still pointing at an old server on some resolvers, or an IPv6 problem | Steps 3 and 4 |
If the server’s firewall has blocked you, it blocked your network’s public IP address, the one the outside world sees, not the 192.168.x.x address on your computer. Everyone behind the same office router shares it. Find it from the network that cannot reach the site:
curl -4 -s https://www.cloudflare.com/cdn-cgi/trace
curl -6 -s https://www.cloudflare.com/cdn-cgi/trace
What it does: asks Cloudflare’s public trace page which address you came from. -4 forces IPv4 and -6 forces IPv6; -s hides the progress bar. Output: several lines, one of which starts with ip=. That is your public address. Note both. If the -6 line prints nothing or an error, your network has no IPv6, which is normal. Keep these addresses: your host needs them in Step 6.
Your computer may be using a stale DNS answer, or a hosts file entry left over from a migration, and connecting to an old server that no longer serves your site. Compare the answer your computer gets with the answer a public resolver gives:
nslookup example.com
nslookup example.com 1.1.1.1
What they do: the first asks the DNS resolver your computer normally uses (your router, your ISP, or your company’s). The second asks Cloudflare’s public resolver at 1.1.1.1 directly. Both work on Windows, macOS and Linux. Good output: the same addresses in both, and they match the server IP shown in your hosting panel. Bad output: different addresses, which means your usual resolver or your computer has an old answer cached. Our DNS lookup tool shows what resolvers around the world see, and our guide on DNS changes not showing up explains caching and TTLs in depth.
ipconfig /flushdns. Success prints “Successfully flushed the DNS Resolver Cache.”sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. It asks for your Mac password and prints nothing when it works.chrome://net-internals/#dns (or edge://net-internals/#dns) and click Clear host cache.A hosts file entry overrides DNS completely. Developers often add one to preview a site on a new server before launch and forget it. Open the file in a text editor: on Windows it is C:\Windows\System32\drivers\etc\hosts (open Notepad as administrator), on macOS and Linux it is /etc/hosts (sudo nano /etc/hosts). Any line with your domain name that does not start with # is active. Put # at the start of it, save, and try again.
Many home broadband and mobile networks now use IPv6 as well as IPv4. If your domain has an AAAA record (an IPv6 address) that points to an old server, or to a server that does not actually listen on IPv6, visitors on IPv6 networks can fail while IPv4-only networks work. Browsers usually fall back to IPv4 quickly, but not always, and a wrong AAAA record that leads to a different server can show the wrong site or a certificate error instead.
nslookup -type=AAAA example.com 1.1.1.1
curl -4 -sS -o /dev/null -w "IPv4: %{http_code} %{remote_ip}\n" https://example.com/
curl -6 -sS -o /dev/null -w "IPv6: %{http_code} %{remote_ip}\n" https://example.com/
What they do: the first lists any IPv6 addresses published for the domain. The curl lines fetch the home page over IPv4 only and IPv6 only. -sS hides progress but still shows errors, -o /dev/null throws the page away (use -o NUL on Windows), and -w prints the status code and the address actually used. Good output: both lines print a status such as 200 or 301 and an address that belongs to your server. Bad output: the IPv4 line works and the IPv6 line fails with “Failed to connect” or times out, while your network does have IPv6 (Step 2). Fix: in your DNS zone, correct the AAAA record to the server’s real IPv6 address, or delete it if the server has no IPv6. If no AAAA record exists, IPv6 is not your problem.
If the site fails on one device or one network but the server looks fine, something local may be filtering it:
tracert example.com
traceroute example.com
What they do: list each network hop between you and the server. tracert is the Windows command and traceroute is the macOS and Linux one. How to read it: some hops showing * * * is normal, because many routers ignore these probes. What matters is whether the last lines reach your server’s IP. If the trace stops at the same point every time on one provider but completes from another, send both traces to your host. On Windows, Test-NetConnection example.com -Port 443 in PowerShell gives a quick yes or no: TcpTestSucceeded : True means port 443 opened.
If the site works from mobile data and our tools but fails for every device on one network, and the DNS answers match, your public IP is almost certainly blocked by a firewall on the server. Hosting firewalls block an address automatically after repeated failed logins, and the trigger is often innocent:
wp-login.php, if the host feeds WordPress login failures into its firewall.From your phone or another network, open a support ticket and include:
These commands run over SSH as root on the server, from a network that is not blocked. Replace 203.0.113.10 with your blocked public IP. Run only the ones for the firewall your server actually has.
| Firewall | Find the block | Remove it |
|---|---|---|
| CSF and LFD (common on cPanel and DirectAdmin servers) | csf -g 203.0.113.10 searches the firewall rules and the allow and deny files for the address and shows the reason recorded |
csf -tr 203.0.113.10 removes a temporary block; csf -dr 203.0.113.10 removes a permanent entry from /etc/csf/csf.deny |
| cPHulk (cPanel’s brute force protection) | WHM, Security Center, cPHulk Brute Force Protection, then the history and blocked lists | Remove the address from the blocked list there. cPHulk mainly blocks logins (cPanel, WHM, mail, FTP, SSH); it blocks the website only if the host enabled its option to block at the firewall level |
| Imunify360 | The Imunify360 page in the panel, Firewall tab, then the Gray List and Black List | Remove the address from the list it appears in. Graylisted addresses may be shown a challenge page rather than a hard block |
| fail2ban | fail2ban-client status lists the jails; fail2ban-client status JAIL lists the banned addresses in one (replace JAIL, for example sshd) |
fail2ban-client set JAIL unbanip 203.0.113.10 |
Good output: the search command names your address and a reason such as repeated IMAP or cPanel login failures. After removal, reload the site from the blocked network. Fix the reason before you move on, or the block returns. To stop a fixed office IP being blocked again, CSF uses /etc/csf/csf.ignore for addresses LFD should never block (an entry in csf.allow alone does not stop LFD), and other firewalls have their own allowlist. Allowlist sparingly: an allowlisted address can guess passwords without limit.
If the site is behind Cloudflare: your server sees Cloudflare’s addresses, not visitors’, unless it is configured to restore the original visitor IP. A server firewall that blocks one of Cloudflare’s addresses causes 52x errors for many visitors at once, not a connection error for one. Cloudflare’s documentation on restoring original visitor IPs explains the web server setting, and it matters for fail2ban and login-limiting tools too.
If the site fails from mobile data and from our tools too, the problem is the server or its DNS:

Send your host the results of each step: your public IPs, the nslookup answers from your resolver and from 1.1.1.1, the IPv4 and IPv6 curl results, a traceroute from the failing network and one from a working network, and the time it started. With those, a host can usually find the firewall rule, routing fault or DNS mismatch in minutes.
Related: locked out of WordPress admin (security plugin lockouts), stopping brute force attacks without locking yourself out, and the curl and DNS and dig cheat sheets for more ways to test from the command line.
Did this fix it?
Still stuck? Start again from what you can see in the Emergency Room.
Still stuck?
Print a free one-page checklist to keep, or open the Emergency Room if the symptom does not match.
Get the free checklistsKeep reading
Search the field manual
Or jump straight to a symptom
Press / to search from any page, Esc to close