Android Split Tunneling VPN Guide: Route Apps by Rules
Set up per-app VPN routing on Android without sending every connection through the tunnel. Follow practical rules, verification steps, and quick rollback options.
Android split tunneling lets you decide which apps use a VPN tunnel and which apps continue through the ordinary network connection. This is useful when only selected services need a different route, while local banking apps, home devices, work tools, or region-dependent applications should remain outside the tunnel. The important detail is that split tunneling is an app-routing rule, not a universal speed switch. If the rule is too broad, more traffic than expected enters the tunnel; if it is too narrow, the application you wanted to route may still use the direct connection.
On Android, the VPN client normally works through the system VPN service. It creates a virtual network interface and applies the client’s routing policy to traffic generated by the device. Depending on the client, you may see options named per-app VPN, app bypass, include apps, exclude apps, allow list, or disallow list. These names describe similar ideas, but their behavior is not always identical. Before changing a rule, confirm whether the selected apps are the ones that enter the tunnel or the ones that bypass it.
When Android Split Tunneling Makes Sense
Full-device VPN routing is simple: almost all eligible traffic is sent through the active tunnel. It is often the easiest starting point when you want consistent behavior across browsers, messaging tools, and other applications. Split tunneling is more selective. It is a better fit when different apps have different network requirements or when sending every connection through one route creates unnecessary friction.
A common example is using a browser or development application through the VPN while leaving a local streaming, payment, or smart-home application on the direct connection. Another example is a phone used for both personal and workplace tasks. You may want selected research tools to use the tunnel without changing how a company application reaches its managed service. In that situation, an app-based rule is easier to understand than a broad rule that affects the entire phone.
Split tunneling can also help with troubleshooting. If an application stops working after the VPN connects, temporarily place that application outside the tunnel and test again. If it immediately recovers, the problem may involve the selected exit route, DNS behavior, IP-based access controls, or the application’s own network policy. This does not prove that bypassing is the correct permanent solution, but it narrows the cause.
2
routing choices: include or exclude
1
active VPN service to test
3
verification areas: IP, DNS, app
The two main models are easy to describe:
- ✅ Include-list mode: only the applications you select use the VPN tunnel; other applications use the ordinary network path.
- ✅ Exclude-list mode: most applications use the VPN tunnel, while the applications you select bypass it.
- ❌ Do not confuse an excluded app with an app that is completely offline. It normally still has network access, just through the direct route.
- ❌ Do not use both models at the same time unless the client clearly documents how the two lists interact.
For a small, clearly defined set of applications, include-list mode is usually easier to audit. For a phone where nearly everything should use the VPN and only one or two apps need a direct path, exclude-list mode may be more convenient. Your choice should reflect the default behavior you want when a new app is installed.
Check the Client Before Changing Rules
Android split tunneling is controlled by the client, not by the subscription link alone. A subscription usually provides server profiles, node information, and protocol parameters. The per-app policy is commonly stored in the client’s local settings. This means importing the same subscription into two Android clients may produce different app-routing controls, names, or limitations.
Start by identifying the application that currently manages the VPN connection. An official Android client may expose a straightforward app list in its connection or routing settings. A sing-box-based client may present route rules, package names, or an outbound selection. A Clash-compatible Android client may use global, rule, or direct modes alongside application rules. The labels differ, so read the description beside each switch instead of copying a configuration from another client without checking its meaning.
Do not run two VPN clients simultaneously while testing. Android generally allows one active VPN service to control the system tunnel, and another client may fail to connect, replace the first service, or leave confusing notification and routing states. Disable browser proxy extensions and other network-filtering tools temporarily as well. A local firewall, DNS changer, ad blocker, or work-profile policy can alter the result independently of the VPN client.
| Item to identify | Why it matters | What to record |
|---|---|---|
| VPN client | Each client exposes different app-rule controls | Client name and current mode |
| Routing model | Include and exclude lists produce opposite results | Whether selected apps use or bypass the tunnel |
| Android VPN options | Always-on and blocking options can override expectations | Whether always-on or block-without-VPN is enabled |
| App identity | Some clients list packages rather than familiar app names | The exact application selected in the client |
Android’s system settings may include an Always-on VPN option and a setting that blocks connections without the VPN. These features can be useful for preventing accidental direct traffic, but they can also conflict with a design where some apps must bypass the tunnel. If a bypassed app cannot connect, inspect these system options before changing the subscription or switching servers. Work profiles, managed devices, and manufacturer-specific battery controls may also restrict background VPN behavior.
Set Up Per-App VPN Rules on Android
The exact menu path depends on the client, but the workflow is consistent. The steps below are intentionally client-neutral so they can be applied to an official Android application, a sing-box-based client, or another compatible Android client that supports per-app routing.
- Import or update the profile. Open the client and make sure the intended subscription or profile is available. If the client provides an update function, update the profile before testing so that the selected node and routing options are current.
- Connect once without app restrictions. Use the normal mode briefly and confirm that the client can establish a tunnel. If the basic connection fails, split tunneling will not solve the underlying profile, permission, or network problem.
- Open the application routing menu. Look for per-app VPN, app management, bypass, application rules, or a similar entry. Avoid changing several unrelated settings at once.
- Choose include or exclude mode. Read the client’s wording carefully. In some interfaces, “bypass selected apps” means the checked apps go direct. In others, “selected apps only” means the checked apps enter the tunnel.
- Select one test application. Begin with an application that has a clear network request, such as a browser or a service with a visible refresh action. A single test app makes it easier to identify whether the rule works.
- Save the policy and reconnect. Some clients apply changes immediately; others require the VPN to disconnect and reconnect. If Android displays a VPN permission prompt, review the client identity before accepting it.
- Test the selected app and an unselected app. Verify the expected path in both cases. Testing only the selected app cannot reveal that the rest of the device is also being routed through the tunnel.
- Add additional apps gradually. Add related applications in small groups, reconnect when required, and test again. This avoids creating a large rule set that is difficult to troubleshoot.
When a client lists package names instead of familiar labels, check the application icon, package description, and installed-app entry carefully. Some services have a main application and separate helper, download, browser, or media components. Selecting only the visible front-end may not cover background traffic from an associated component. Conversely, routing every component of a large application suite can affect more traffic than intended.
For clients that expose advanced rules, distinguish between an application rule and a domain rule. An application rule selects traffic by Android package identity, while a domain rule selects destinations. They can overlap, and the client’s rule order determines which decision wins. Put specific exceptions before broad rules when the client uses first-match processing, then consult the client’s documentation or rule preview to confirm the order.
- ✅ Apply one clear routing model instead of mixing labels from different clients.
- ✅ Reconnect after saving if the client does not explicitly apply changes live.
- ✅ Test foreground requests and, where relevant, background synchronization separately.
- ❌ Do not assume a browser’s result represents every application on the phone.
- ❌ Do not copy package names from an untrusted configuration file.
Verify IP, DNS, and Application Behavior
Verification should be performed after the policy is saved and the VPN has reconnected. First test an application that should use the tunnel, then test one that should bypass it. Use the same access network and comparable conditions for both checks. If you change from mobile data to Wi-Fi during the process, an IP difference may come from the access network rather than the per-app rule.
For an included browser, open a network test page such as network detection and inspect the exit address and network ownership. The result should reflect the selected route if the browser request is actually entering the tunnel. For an excluded browser, the result should remain consistent with the direct connection, subject to normal changes from the mobile carrier or Wi-Fi provider. Close an old tab or perform a fresh request so that a cached page does not mislead you.
IP testing is only one part of the check. DNS requests may follow a separate policy depending on the client, Android settings, private DNS configuration, and the application itself. A browser may use secure DNS inside the application, while another app uses the system resolver. If the client has a DNS mode, note whether it is global, tunnel-only, or disabled. A DNS result that does not match your expectation does not automatically identify the cause, so compare the client setting, Android Private DNS, and the application’s own network options.
Also test the actual function that motivated the rule. Refresh a page, sign in to a test account, load an API endpoint, synchronize a small data set, or connect to a permitted service. A changed exit IP does not prove that every request from the app uses the same path, particularly when the app uses multiple processes, embedded web views, a separate media service, or a background worker.
| Test | Expected observation | If it differs |
|---|---|---|
| Included app exit IP | Request reflects the VPN route | Check include mode, reconnect state, and app selection |
| Excluded app exit IP | Request remains on the direct route | Check bypass wording and block-without-VPN settings |
| DNS behavior | Matches the client and Android DNS policy | Inspect Private DNS, secure DNS, and client DNS options |
| Real application action | The required page, login, or synchronization works | Check app components, rule order, and route compatibility |
Some applications maintain long-lived connections. After changing rules, force a normal refresh or restart the application so that an old connection does not continue using the previous route. Avoid repeatedly clearing application data during initial testing; that can introduce authentication and cache variables unrelated to routing.
Troubleshoot and Roll Back Safely
If the selected application still uses the direct route, confirm that you chose include-list mode rather than bypass mode. Then check whether the app is listed under the correct profile. Some clients maintain separate rules for each profile, so changing one profile does not necessarily change another. Reconnect the VPN, restart the application, and repeat the test with a fresh request.
If an excluded application cannot connect, inspect Android’s Always-on VPN and block-without-VPN settings first. A policy intended to prevent direct traffic may defeat the bypass rule. Next, check whether the application depends on a shared service that remains inside the tunnel. For example, a visible app may rely on a separate browser component, download service, or authentication helper. The correct solution may be to adjust the application set rather than disabling the entire VPN.
If only one route fails, switch to another available route within the same profile and retest. A per-app rule controls which traffic enters the tunnel; it does not guarantee that every route can reach every destination. Network policy, destination filtering, DNS response, and application authentication can all affect the result. Keep the diagnosis narrow: change one route or one rule, perform one fresh test, and record the outcome.
To roll back, return to the application routing menu and restore the original include or exclude mode. Remove temporary test entries, save the profile, and reconnect. If the client has a reset or clear-rules action, use it only after recording the current settings. Finally, check Android’s system VPN page and return Always-on or blocking options to their previous state. Confirm that the VPN notification disappears when disconnected and that direct connectivity works as expected.
- ✅ Keep a copy of the working profile before making advanced rule changes.
- ✅ Change one variable at a time: app selection, mode, DNS option, or route.
- ✅ Recheck both included and excluded applications after every significant change.
- ❌ Do not leave an unknown bypass rule active on a device used for sensitive work.
- ❌ Do not publish subscription URLs, configuration tokens, or screenshots containing credentials while asking for troubleshooting help.
For a more structured client setup, consult the site’s setup guide and keep the Android system settings separate from the subscription configuration. The subscription determines what profiles and routes are available; the Android client determines how application traffic is assigned to them.
A Maintainable Rule Design
A good split-tunneling policy should remain understandable after new applications are installed or the phone changes networks. Start with a short purpose statement, such as “only the browser and development tool use the VPN” or “everything uses the VPN except the local banking application.” This prevents the app list from becoming a collection of unexplained exceptions.
Prefer one routing model per profile. If you need two very different behaviors, create separate profiles or client configurations when the application supports that approach. For example, a narrow work profile can use an include list, while a general profile can use an exclude list. Switching between clearly named profiles is easier to audit than continuously reversing a long list of checkboxes.
Review the policy after installing a major application, changing Android’s Private DNS setting, joining a managed work profile, or moving between Wi-Fi and mobile data. Also review it after updating the VPN client, because a new version may rename options or change how application processes are handled. Keep the rule set minimal, document the intended direct applications, and retest the real tasks that matter to you.
Android split tunneling is most useful when treated as a controlled routing decision rather than a one-click optimization. Select the applications deliberately, understand whether the list means tunnel or bypass, verify IP and DNS behavior, and keep a rollback path. With that workflow, you can route only the traffic that needs the VPN while preserving predictable behavior for the rest of the device.