Guide · Android

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.

Before you start

Step by step

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

Also
iPhone & iPadImport a .ovpn into OpenVPN Connect in one tap, or through the Files app when the tap does not take.
Also
PCOpenVPN GUI, Tunnelblick and the openvpn command — including credentials, autostart and the DNS leak nobody warns you about.
Ready for a config? Every server in the list answered a real handshake within the last five minutes.Browse servers →