VPN keeps disconnecting: causes by verdict
A VPN that seems to keep dropping is often idle, switching networks or stalled. Read the app's message to tell which one and apply the matching action.
Key takeaways
- net.idle is not a fault: the app's detail line says nothing is being sent right now, and the tunnel is still up.
- A switch from Wi-Fi to mobile data changes the device's source address, so the tunnel has to rebind its sockets.
- For net.blocked_at_handshake, net.blocked_after_handshake and net.liveness_failed, turn the app off and on first; phone apps offer another location on two.
- net.exit_unreachable and net.degraded are the two messages where choosing another location is the action.
On this page (7)
- Is the VPN disconnecting or just quiet?
- Why does my VPN drop when I switch networks?
- Why does my VPN say the server isn't answering?
- What if it says connected, then nothing is carried?
- Do battery saver and Always-on settings drop the VPN?
- Should I restart the connection or change location?
- How was this tested?
A VPN that seems to keep disconnecting can be one of three things the app tells apart: it is idle, the device changed networks, or the connection stopped carrying traffic. Android adds two settings of its own, covered below. The app's message tells you which, and each has a different action.
Competing guides give one flat list: update, switch server, switch protocol, change battery settings. This page sorts the reasons by the message ForestVPN shows instead.
Is the VPN disconnecting or just quiet?
It is quiet when the connection details read "Nothing is being sent right now." That is net.idle, and the catalog marks it as not a fault: the tunnel is up and the app has simply had nothing to carry.
A quiet tunnel is why a setting like
- PersistentKeepalive
- a setting that makes a peer send a tiny packet at a fixed interval, so a tunnel with no user traffic still shows activity
There is no action for net.idle, because there is nothing to fix. Start a download or open a page, and the status moves on.
The main screen keeps saying Protected while the app is idle. The exact message and its code are in the connection details (Health or Details), so open them before you decide anything. A real drop shows one of the messages in the table below.
| App says | Code | What it means | Action |
|---|---|---|---|
| Nothing is being sent right now. | net.idle | Healthy and quiet; not a fault | None, the detail line sits under Protected |
| No network. | net.underlay_down | The device has no working route out | Connect the device to Wi-Fi or a mobile network; the app carries on when the network is back |
| We're sending connection attempts and the server isn't answering. | net.blocked_at_handshake | Handshake attempts (the first key exchange with the server) get no answer | Turn the app off and on; phone apps also offer another location |
| Connected, then stopped carrying anything. | net.blocked_after_handshake | The tunnel started, then traffic stopped | Turn the app off and on; phone apps also offer another location |
| Connected, but nothing is getting through. | net.liveness_failed | Counters look fine, but the app's own test packet got no reply | Turn the app off and on |
| Traffic is getting through, worse than it should be. | net.degraded | More loss or delay than expected | Choose another location |
| The server can't reach the internet. | net.exit_unreachable | The server cannot get out | Choose another location |
Why does my VPN drop when I switch networks?
Because your device's source address changes, and a tunnel keeps sending from the old one until something tells it to rebind. Moving from Wi-Fi to mobile data, or between two Wi-Fi networks, replaces the address the tunnel's sockets were using.
The app's side of this is a rebind: the platform signals the change and the tunnel opens its sockets on the new address. If that signal works, traffic comes back. If it does not, you may see "Connected, then stopped carrying anything" until you turn the app off and on.
On iPhone, and in the other phone apps, the app holds the Protected headline briefly after a network change while it re-checks the connection; only a failed re-check shows Reconnecting.
A network change is a different event from a network that refuses to carry the connection. The first is something your device did; the second is something the path does to packets. The sections below cover the second.
The lab run at the end reproduces the first: the source address is replaced by a different one, and traffic comes back once the tunnel is signalled to rebind. It tests that the rebind step works. It says nothing about how a phone's operating system notices a change.
If the device really has no route, for example in a lift or a tunnel, the app says "No network." (net.underlay_down). Nothing further out can be judged until the network returns, and the app carries on by itself.
Why does my VPN say the server isn't answering?
It means the handshake, the first exchange of keys with the server, is not being answered. The app words it as "We're sending connection attempts and the server isn't answering" (net.blocked_at_handshake).
The help page for this message gives the action: turn the app off and on, and try another network if it repeats. The phone apps also offer another location on the card next to Try again. If you also cannot get a connection at all, VPN not connecting walks through the stages of connecting.
Hotspots that hold traffic until you complete their sign-in page can produce this message too. The networks help page covers them.
What if it says connected, then nothing is carried?
Two messages describe a tunnel that was up and then went dark, and both take the same action: turn the app off and on.
- Connected, then stopped carrying anything (net.blocked_after_handshake): the connection started, then stopped carrying traffic. Per its help page, the reasons include a network change or a fault on the server. The phone apps also offer another location on the card.
- Connected, but nothing is getting through (net.liveness_failed): the counters look healthy, but a test packet sent by the app itself got no answer. See the liveness help page.
The first is judged from the tunnel's own counters. The second catches what counters cannot see, such as a network that carries the start and drops the data.
For the version of this symptom where pages fail while the app looks connected, see VPN connected but no internet.
Do battery saver and Always-on settings drop the VPN?
These are Android settings; on iPhone the network-change behaviour above is the one that applies. On Android they can drop it. If the system limits ForestVPN in the background, the app has to keep reconnecting you, and the app's own diagnosis flags it as a warning. The Android help page lists the fix: say yes to the battery prompt, or use the diagnosis's Open battery settings button, and pick the option with no limit on ForestVPN.
Android's Always-on VPN is a separate setting. Android's developer guide says the system can start a VPN service at boot and keep it running, and that it can block connections that do not use the VPN. Another VPN app holding that slot is a second reason the app may keep losing its tunnel.
The kill switch is the app's own setting that stops traffic leaving outside the tunnel when the tunnel drops. It is not absolute: when the app itself is stopped, only Android's Always-on VPN with Block connections without VPN covers the gap, and neither covers every edge case. Seeing no internet while the tunnel is down is that protection working, not a second fault.
Should I restart the connection or change location?
Restart first for the three silent-connection messages; change location for two others. The catalog separates them for a reason.
- Turn the app off and on first: net.blocked_at_handshake, net.blocked_after_handshake, net.liveness_failed. For the two handshake messages the phone apps also offer another location on the card; net.liveness_failed is restart only.
- Choose another location: net.exit_unreachable, which the help page calls the one connection message that a change of location really fixes, and net.degraded, where the help page adds that if every location is slow, you should try another network.
- Do nothing: net.idle. Wait: net.underlay_down.
How was this tested?
Two runs in ForestVPN's network-namespace test harness, on the home lab, on 2026-10-29. Each ran in a throwaway virtual machine that was destroyed afterwards. No production account or exit server was involved.
| Run | What was done | Result |
|---|---|---|
| Roam | Source address replaced mid-session, then the tunnel signalled to rebind | Traffic resumed within 5 s of the signal |
| Handshake blocked | UDP port 51820 dropped after a healthy session | BlockedAfterHandshake in flight; BlockedAtHandshake after 130 s and at 250 s |
In the roam run, the client's source address went from 10.11.0.1 to 10.11.0.5 and the harness passed only after traffic came back. In the handshake run the verdict was Working while healthy, then followed the table above; all samples matched. The assessor's BlockedAfterHandshake and BlockedAtHandshake verdicts correspond to net.blocked_after_handshake and net.blocked_at_handshake.
How this was tested
- Product
- ForestVPN quantum tunnel core and connection assessor, network-namespace harness
- Version
- repository commit 427fc1929ed6, static Linux build
- System
- Linux runner VM on the home lab
- Checked
- Runs
- 2
Not tested
The roam run proves the rebind step works; it does not show roaming on iOS or Android, and it does not show the operating system noticing a network change. The tunnel config used PersistentKeepalive set to 5. Timings depend on harness settings and are not a promise for a real network. Mapped from the runs: net.blocked_after_handshake (BlockedAfterHandshake) and net.blocked_at_handshake (BlockedAtHandshake). Not tested: net.idle, net.underlay_down, net.liveness_failed, net.degraded, net.exit_unreachable, and any phone.
Questions and answers
How do I stop my VPN from disconnecting?
Read the message first. Nothing is being sent right now is the app being quiet, not a drop. For a connection that stopped carrying traffic, turn the app off and on. Choose another location only for a server that cannot reach the internet or a slow path.
Why does my VPN drop when I switch from Wi-Fi to mobile data?
Your device's source address changes, and the tunnel's sockets were tied to the old one. The app has to be told to rebind. If traffic does not come back, turn the app off and on.
Why won't my VPN stay on?
On Android, battery limits can stop the app in the background and another app can hold the Always-on VPN slot. Allow the app to run without limits and pick ForestVPN as the Always-on VPN in Android's VPN settings.
Is the VPN disconnecting or just quiet?
If the connection details say Nothing is being sent right now (net.idle), it is quiet. That message is not a fault and has no action. A drop shows a different message, such as No network or Connected, then stopped carrying anything.
Does changing server fix a VPN that keeps disconnecting?
Sometimes. For the three messages where the connection goes silent, turn the app off and on first. The phone apps also offer another location on the card for the two handshake messages. For net.exit_unreachable and net.degraded, a new location is the action.
Sources
- Android developers: VPN (Always-on VPN and blocked connections) (read October 29, 2026)
How this was made
Drafted with AI assistance from ForestVPN's error catalog and help pages, checked by automated gates and an editor; two lab runs in a network-namespace harness are described in the method box.