Free OpenVPN on Android
Android has two good OpenVPN clients and no bad ones worth naming. OpenVPN Connect is the official app and the shortest path; OpenVPN for Android is the open-source alternative, and it is the better tool the moment you want per-app routing or a connection that survives the night.
There is a shorter path on Android: the Hunt VPN app keeps the server list and hands a config to OpenVPN Connect in one tap — no browser, no file manager. Preview build, installed from a file rather than the Play Store.
- OpenVPN Connect from Google Play — free and official. Or OpenVPN for Android by Arne Schwabe, on Play and F-Droid, if you prefer open source.
- Any Android version Google Play still offers OpenVPN Connect for. No root, and no need to sideload anything — the tunnel runs through the system VpnService API.
- A server from the list, ideally TCP if you are on mobile data rather than Wi-Fi.
Step by step
- 01
Install the client first
Get OpenVPN Connect from Google Play before downloading a config. The one-tap handoff below is an Android intent, and an intent with nothing installed to receive it falls back to the Play Store listing — which works, but means going round twice.
- 02
Pick a server
From the full list or straight from a country page. The score is dominated by how consistently a server has answered our probes, which on a phone matters more than raw speed — a fast server that disappears twice an hour is worse than a middling one that does not.
Prefer TCP on mobile data. Carrier NAT expires idle UDP mappings within a minute or two, and a UDP server on a high random port is the classic "works for five minutes" case.
- 03
Download, then tap "Open in OpenVPN app"
Press Download, then Open in OpenVPN app. Chrome fires an intent at OpenVPN Connect, the app fetches the profile itself, and the import screen opens. Confirm with ADD.
If the app is not installed, Chrome sends you to the Play Store listing instead of failing silently — install it, then come back and tap the button again.
- 04
Instead of step 3: import the downloaded file
This replaces the step above — do one or the other, not both. Choose Download .ovpn. Then either tap the entry in Chrome's download bar, or open Files → Downloads and tap it there, and pick your OpenVPN client from the app chooser.
If Android insists on opening it in a text editor, use the client's own importer instead: OpenVPN Connect's Import Profile → File, or the + button in OpenVPN for Android.
- 05
Grant the VPN permission
Android shows a system dialog — "… wants to set up a VPN connection" — with a key icon. This is the OS asking whether this app may create tunnels at all, once, for the app. Accept it. You will see the key icon in the status bar whenever a tunnel is up.
- 06
Enter credentials, if the server needs them
Most do not. Where one does, the download dialog on this site shows the username and password with a copy button — public values published with the config, shared by everyone, not an account. They do not come across with the one-tap import, so grab them from the same page if you took that route.
- 07
Connect
Flip the toggle. Connection normally completes in a few seconds; if it is still trying after twenty, the server is not answering and another one from the list is a better use of your time than waiting.
Two settings worth changing now
Both cause a tunnel that works perfectly and then dies later, which is far more annoying to diagnose than one that never connects.
Battery optimisation kills the connection in the background
Android suspends background apps to save power, and an OpenVPN client is a background app. Exempt it:
Settings → Apps → OpenVPN Connect → Battery → Unrestricted
Samsung, Xiaomi, Oppo and OnePlus add a second, more aggressive layer on top of this with its own name — look for "App launch", "Auto-start" or "Protected apps" and allow the client there too.
Private DNS overrides the tunnel
If Private DNS is set to a specific hostname, Android keeps resolving through it and ignores whatever the VPN pushes — so names may still resolve as if you were not connected. Set it to Automatic while testing:
Settings → Network & internet → Private DNS
When it does not work
Stuck on "Connecting", then a timeout
Take a TCP server — filter the list to protocol = TCP — and prefer port 443 or 1194 over a high random one. If TCP fails on mobile data but works on Wi-Fi, your carrier is filtering that port.
AUTH_FAILED
The server wanted a username and password. Reopen the same server's download dialog and copy them from the credentials block, then edit the imported profile.
Everything connects but nothing loads
Almost always DNS — see Private DNS above. Failing that, the server is up but its own upstream is not, which our probe cannot detect: the handshake we measure proves the OpenVPN daemon is alive, not that its internet works. Try the next server down.
It reconnects constantly on the train
Handing between cells changes your address, and the tunnel has to be rebuilt. UDP recovers faster from this in principle, but on a carrier network TCP usually behaves better in practice. OpenVPN for Android also has a persistent-tunnel option that holds the interface open across the gap.
Removing it
Delete the profile in the app. To revoke the tunnel permission entirely, or to check nothing else holds it:
Settings → Network & internet → VPN
Also make sure Always-on VPN is off for the client if you set it — with it on and a dead server configured, Android will happily block all traffic waiting for a tunnel that is never coming.