On this page
If Clash says connected but there is no internet access, first identify the specific type of failure
The same “Clash is connected” message may mean only that the core process is running; it does not prove that the system-proxy port works, the node is reachable, or DNS is healthy. Record one specific error, one destination address, and the current mode to establish a starting point.
First check for each symptom
| Symptom | Check first |
|---|---|
| Every website immediately reports a proxy connection failure | The local address and port configured in the system proxy |
| Domains fail, but direct access by IP responds | DNS and browser secure DNS |
| Domestic sites work, while sites requiring proxying time out | Node, policy group, and matched rule |
| The system proxy works, but enabling TUN breaks all connectivity | Service, virtual adapter, default route, and other VPN software |
| Only one app fails | Whether that process enters Clash, plus the app's own status code |
Use two toggles to narrow the failure domain first
Disable TUN, keep only Rule mode and the system proxy, and reopen the same page. If the system proxy works while TUN breaks connectivity, the subscription and node have at least one viable basic path, so focus on services, routes, and DNS. If both modes fail, leave the virtual adapter alone for now.
Then disable the system proxy to restore direct access and confirm that the underlying network works. If direct access also fails, address the Wi-Fi, broadband connection, corporate authentication, or router first. Clash cannot repair an underlying connection that has no internet access.
Whether this request appears on the connections page is the most important branch
Clear the connection records and visit one fixed domain. If no new request appears, the browser may not use the system proxy, the port may be wrong, or the app may bypass the current capture method. Changing more rules and nodes will not affect that.
If the request appears, record the destination, matched rule, policy group, and error. Unexpected DIRECT, REJECT, timeout, and connection refused results point to different layers. The tray icon's color omits the most useful evidence.
One minimal reproduction
Keep the configuration and node fixed
Temporarily disable automatic switching and keep one egress.
Clear the connection and log views
Do not mistake a background update for the page request you just made.
Visit the same HTTPS address
Record whether it enters Clash, which rule it matches, and what error appears.
Change only one variable and retry
Do not change the node, rule, DNS, and TUN together.
For an immediate error, verify the system proxy and listening port
If the browser immediately says it cannot connect to the proxy server, Windows or macOS may still point to an old port on 127.0.0.1 while the current client is not listening. Read the actual mixed-port from client settings, then verify it with netstat, lsof, or ss.
If the port exists, make an explicit request with curl -x to distinguish the local proxy entry point from system-proxy configuration. If the explicit proxy works but the browser fails, the problem is in system or browser settings. If the explicit proxy also fails, return to the core, node, and logs.
# 将 7890 换成客户端实际端口
curl -I -x http://127.0.0.1:7890 https://example.com
# Windows
netstat -ano | findstr :7890
# macOS / Linux
lsof -nP -iTCP:7890 -sTCP:LISTENInvestigate DNS only when resolution behavior is abnormal
Give DNS priority only when a domain request lacks a destination address for a long time, nslookup fails, or disabling browser secure DNS changes the behavior. First route the browser, system, and Clash through one resolution path, then check whether nameserver is reachable.
If the system uses router DNS while the browser independently enables secure DNS, Clash may not receive the complete domain. During troubleshooting, temporarily disable browser DoH so a domain follows only one resolution path from the system to Clash; afterward, decide whether to enable it again.
With Fake-IP, distinguish a normal virtual address from a stale cache first
In Fake-IP mode, a domain resolving to an address such as 198.18.0.0/15 is usually normal: the app connects to the virtual address first, then Mihomo restores the domain and evaluates rules. Seeing 198.18.x.x does not itself mean DNS poisoning. What matters is whether the connections page retains the original domain and matches the intended policy.
The real problem occurs when the system and app retain old results after switching configurations, changing rules, or moving from Redir-Host to Fake-IP. Close the test app, clear the system DNS cache, restart the Mihomo core, and test again. Do not retain old connections while repeatedly switching enhanced modes.
If a NAS, printer, router dashboard, or corporate internal domain must return a real intranet address, add it to the current configuration's fake-ip-filter or send it to the appropriate internal DNS. Verification should show that these local domains still resolve to real LAN addresses while public domains reappear by name on the connections page and route correctly.
ipconfig /flushdnsAfter the request enters the client, separate rule, node, and TUN issues
The request times out after matching DIRECT
Common cause:A specific rule was matched early by a broader direct rule
Resolution:Inspect the final rule order and place exact rules before GEOIP and MATCH.
The request matches a proxy group but reports dial timeout
Common cause:The current node, protocol, or remote endpoint is unreachable
Resolution:Compare against another known-working pinned node without changing DNS first.
The local proxy reports connection refused
Common cause:The port is not listening, or the system proxy is configured incorrectly
Resolution:Check mixed-port, process status, and port conflicts.
All connectivity fails only under TUN
Common cause:Service permissions, default route, virtual adapter, or another VPN conflict
Resolution:Restore the system proxy and check each item separately; do not reset the entire computer's network.
The final diagnosis should fit in one concrete sentence—for example, “the request entered Clash, matched PROXY, and the fixed node returned dial timeout”—rather than “the app is green but there is no internet.” That sentence already identifies the layer to address next.
