How can you tell whether your VPN is really working? Do not rely only on the client showing “Connected.” That status usually means the local client has established a session, not that requests from your browser, download tools, and other apps are using the selected route. For a reliable answer, check the exit IP, DNS resolution path, and per-app rules in order, then rule out interference from system proxies, browser secure DNS, dual-stack networking, and cached results.
The most important testing principle is to create a baseline for comparison. Disconnect the service and record your current network’s exit IP and DNS behavior. Then connect to a route and test again on the same device, network, and diagnostic page. Only consistent conditions make the results meaningful. If you switch access networks between tests, a changed exit IP alone does not prove that the proxy has taken over your traffic.
Start with a Comparable Baseline
Before you begin, temporarily disable other tools that can change the network path, including browser proxy extensions, system-wide proxies, corporate network access software, and any other client still running in the background. When multiple network tools modify routing or system proxy settings at once, the results may come from any of them, making the issue difficult to isolate.
After disconnecting the VPN, open this site’s network test page and note the network and approximate region associated with your exit IP. The region comes from an address database and is useful only for spotting major changes, not for precise geolocation. Databases can lag behind, so a city name that differs from the selected route does not necessarily mean the connection failed. The address and network owner are more meaningful signals.
Connect to the target route, close the old test tab, and open the page again—or perform a hard refresh—to avoid cached results. If the exit address changes and broadly matches the route’s region, the current browser request has most likely reached the proxy exit. This proves only what happened to the tested browser request; it does not automatically show that every app and DNS query is using the same path.
- ✅ Record the original exit IP while disconnected, then retest under the same conditions after connecting.
- ✅ Reopen the test page instead of reading an old result from the existing tab.
- ✅ Check the address, network ownership, and approximate region—not just the city name.
- ❌ Do not treat the client’s connection animation as a substitute for a real network request.
- ❌ Do not switch access networks between tests, or the comparison loses its value.
Interim conclusion: A changed exit IP shows only that the request being tested went through another exit. To determine whether the whole device is covered, you must also check DNS and other apps.
How to Tell Whether Your Exit IP Really Changed
A common mistake is to look only at the country or region label. Public IP databases may place the same address range in different cities or retain an outdated network-owner name, so compare the full exit address and network ownership first. If the exit address is identical before and after connecting, the request usually did not enter the proxy, or the routing rules explicitly sent that test site direct.
If the address changed but the region does not match what the client displays, cross-check it with another test endpoint and determine whether the route name refers to the ingress location, exit location, or a logical group. The ingress and final exit of a relay route are different concepts: the device first sends traffic to a relay, which then accesses the destination through a remote exit. The test page should show the final exit, not the relay ingress.
With a direct route, the device typically connects straight to the remote server, making the path easier to understand, though it may not always be stable on complex networks. An IEPL dedicated route emphasizes the dedicated transport path between ingress and exit; that is separate from which exit address a test page displays. Whether you use a direct route, relay, or IEPL, the site ultimately sees the exit used for external access.
Also consider the scope of browser extensions. A proxy extension usually handles only the browser’s web traffic; command-line tools, desktop chat apps, and system updates may still connect directly. Clients that use a virtual network interface can cover more apps, but they may still be affected by bypass rules, LAN rules, and system permissions.
| Observed result | Most likely meaning | Next step |
|---|---|---|
| The exit IP is the same before and after connecting | The test request may be direct, or the proxy may not control the current app | Check the system proxy, virtual interface, and routing rules |
| The exit changes and the region broadly matches | The tested request has passed through the selected exit | Continue by checking DNS and other apps |
| The exit changes but the region label differs | The address database may be outdated, or the route name and exit location may differ | Cross-check network ownership and the route description |
| The browser changes but other apps do not | Only a browser proxy or per-app rule may be enabled | Check the actual connection path of each app |
Check Whether DNS Resolution Is Bypassing the Proxy
Before connecting to a domain, a device usually resolves it to an address. Web traffic using a proxy does not necessarily mean DNS queries use that proxy too. If queries are still handled by the resolver provided by the local network, an outside observer may see which domains the device is querying. Some sites may also return an unsuitable endpoint when the DNS result does not match the exit region.
DNS testing should focus on who performs the resolution, rather than simply expecting a particular provider name to appear. A client may use a route-side resolver, a public encrypted DNS service, or forward system queries through the proxy. If the setup matches the configuration the user selected, a different provider name alone is not evidence of a leak.
Browser secure DNS is an easy-to-miss variable. It may send encrypted queries directly to the resolver specified by the browser, bypassing the system DNS controlled by the client, or automatically fall back when system policy allows it. During testing, record the browser’s current setting, then temporarily compare it with the system default resolver. If the results differ, first determine whether the difference is intentional or an accidental bypass.
Command-line tools can provide additional clues, but they reflect the system resolver or a resolver you specify and may not match the browser. On common systems, you can use the following commands to inspect current query results or resolver settings:
nslookup example.com
scutil --dns
nslookup can perform a standard lookup and show the response source; scutil --dns displays resolver configuration maintained by some desktop systems. Interpret the output together with the client mode: when a client intercepts DNS through a virtual interface, the address visible to the system may be only a local interception endpoint, while the actual upstream resolution occurs at the other end of the route.
DNS takeaway: The exit and resolver do not have to display the same name, but both should match the handling method configured in the client. If web traffic uses a remote exit while DNS is consistently handled directly by the local network, inspect the resolution rules closely.
Complete Per-App Verification
Per-app proxying is not meant to send all traffic through one path. It uses app, domain, or address rules to decide what goes direct and what uses the proxy. So if an app still shows a local exit, that may be the intended configuration rather than a fault. Before testing, define the expected behavior: which apps should use the proxy, which should connect directly, and which mainland resources should be handled automatically by the rules.
Desktop clients generally use one of two traffic-capture methods: a system proxy or a virtual network interface. A system proxy depends on apps reading the operating system settings, and some games, command-line programs, and apps with their own network stack may ignore it. A virtual interface operates closer to the routing layer and usually covers more traffic, but the client can still send LAN traffic, specific domains, or specific processes direct through its rules.
On mobile devices, the status-bar icon only indicates that the system-approved network tunnel is running. Whether an app’s requests enter the tunnel also depends on client settings and the bypass options allowed by the system. Test from inside the target app by triggering a real request—for example, refresh content, reconnect to a service, or open an in-app page—instead of relying only on a browser test.
A protocol name alone cannot prove that all traffic is being captured. Shadowsocks, VMess, Trojan, and VLESS describe how the client and server exchange data; system proxy settings, virtual interfaces, and routing rules determine which requests enter that protocol connection. Successfully importing a subscription link only means the client received node and rule information; it does not mean those rules fit the current use case.
- Confirm whether the client is using global mode, rule-based routing, or system proxy only.
- List the browsers, desktop apps, and mobile apps to test, and write down the expected path for each.
- Close and reopen each app so it does not continue using a long-lived connection established before the route changed.
- Start a new request inside each app and compare content region, connection status, or the app’s own network information.
- If you find an issue, temporarily switch to global mode and test again. If global mode works but rule mode does not, the problem is usually in the routing rules.
- Restore the original mode, then review the domain, process, and address rules one by one. Avoid leaving a temporary configuration in place when it does not match your needs.
Why These Cases Look Connected but Do Not Work
The system proxy was overwritten by another program
Some security software, development tools, and browser extensions modify the system proxy. If another program writes new settings after the client connects, the client may still show a normal status while apps read a different proxy address. Exit other network tools, reconnect, and check that the system network settings match the client mode.
An old connection was not rebuilt after the route changed
Chat, streaming, and download apps often keep long-lived connections. After switching routes, existing connections may briefly continue along the old path while newly opened pages use the new exit. Fully quit and restart the target app; this is a better way to verify the new connection than repeatedly refreshing its interface.
The rules classified the test site as direct
Rule sets may choose a path by domain, address ownership, or geographic category. If the test site is classified as direct, its local exit does not mean other destinations are direct too. Temporarily switch to global mode and test again, or check the client’s connection log to see which rule matched the domain. Use logs for troubleshooting only; do not publish full screenshots containing subscription addresses.
The browser extension covers web traffic only
A browser proxy extension does not automatically take over other apps on the system. In this case, the browser test may show a remote exit while desktop programs continue using the local network; that is an expected difference in scope. For device-wide coverage, use a client that supports a system proxy or virtual network interface, then configure routing according to your needs.
Dual-stack networking used different paths
A device may have both types of internet address. If the client captures only one type of request, some sites may connect directly over the other, causing different test pages to show different exits. Check dual-stack capture and routing settings in the client, and note the address type returned by each test page. Do not hide the issue simply by disabling a system capability; first confirm whether the client supports handling both types properly.
WebRTC results were overinterpreted
Browser real-time communication may reveal a local interface address, a LAN address, or a processed candidate address. Seeing interface information does not mean the original public exit has been exposed. Focus on whether the page can obtain the public exit from before the connection, and whether browser proxy and real-time communication traffic follow the same policy. If the feature is not needed, restrict it through browser permissions and client rules, but do not treat every local candidate as evidence that the proxy failed.
A Repeatable Full Review
When access behaves unexpectedly, following a fixed review order is more effective than repeatedly switching routes. First update the subscription and confirm that the client reports no errors. Then disconnect and record an exit baseline; after connecting to the target route, check the browser exit, followed by DNS, and finally the specific app. Change only one variable at a time so you can identify whether the cause is the route, client mode, rules, or app cache.
- ✅ After updating the subscription, confirm that node information loads correctly.
- ✅ Disconnect the route and record the original exit and DNS behavior.
- ✅ Connect to the target route, reopen the test page, and compare the exit.
- ✅ Query a new domain and confirm that DNS matches the client’s policy.
- ✅ Fully restart the target app and verify its newly established connection.
- ✅ Retest separately in global mode and rule mode to locate routing issues.
- ❌ Do not publish subscription links, complete configuration files, or logs containing access credentials.
If the exit never changes, first review the system proxy and client checks in Troubleshooting. If only a specific platform is affected, revisit the import and permission steps in Setup Guide. If the current route connects but the target service remains unstable, review the Route Guide and choose a more suitable region and route type.
Final takeaway: Confirming that a VPN works requires a chain of evidence: the current app shows the expected exit change, DNS handling matches the configuration, and other apps that should use the proxy pass their individual checks. A connection icon, region label, or single test result is not enough to prove that all device traffic is being handled as expected.