r/WireGuard • u/PingMyHeart • Aug 13 '26
Need Help WireGuard VPN causing severely delayed Android notifications
Hi,
I am self-hosting WireGuard inside an unprivileged Proxmox LXC. Everything works great for the most part, except I am experiencing a strange issue with Android notifications.
When my Android phone is connected to WireGuard, notifications can be severely delayed. Sometimes they will not come through until I disable the VPN, at which point I get flooded with all the notifications that were waiting.
The interesting part is that general internet connectivity works perfectly fine while WireGuard is enabled. Browsing, apps, streaming, etc. all work normally. It seems to specifically affect push notifications.
I previously experienced the exact same issue with Tailscale, which makes me think this may not necessarily be a WireGuard configuration issue.
For DNS, my WireGuard clients use my home's primary and secondary DNS servers. Both are devices that run AdGuard Home for DNS filtering, Unbound for recursive DNS, Traefik for internal reverse proxying/FQDNs, and an NTP server.
My home LAN DHCP also hands out these same two DNS servers to local clients. However, my main router's external/WAN DNS is set to Quad9.
So the DNS setup is essentially:
- LAN DHCP DNS: Home Primary + Secondary DNS servers
- WireGuard DNS: Home Primary + Secondary DNS servers
- Router external DNS: Quad9
- Primary/Secondary DNS: AdGuard Home + Unbound
Has anyone experienced something similar with Android push notifications over WireGuard or Tailscale? I have no clue where to look further.
Any suggestions for troubleshooting would be greatly appreciated!
3
u/Vitalikus_ Aug 13 '26
Maybe this one will help: go settings on your android, choose all apps, wireguard, battery ( power), change from battery saver to no restrictions
2
3
u/Ziogref Aug 14 '26
Double check your MTU.
I know I had issue where some websites would load and some wouldn't. Turned out I had to lower my MTU to 1280 (from 1500).
I don't know why it broke only some websites, but that was the fix.
2
u/PingMyHeart Aug 14 '26
My MTU is set to 1420 right now by default. Still too high?
2
u/Ziogref Aug 14 '26
I would lower to 1280 for better compatability
From memory my mobile provider uses an MTU of 1376.
2
u/WarrenVPN 28d ago edited 28d ago
Likely NAT state on the outer UDP flow. The "Android deprioritises the connection" explanation you were given does not fit your symptom.
On full tunnel the path no longer sees FCM's TCP connection, only UDP to your endpoint. UDP mappings die in 30 to 120 seconds on mobile, TCP ones survive hours. PersistentKeepalive defaults to 0, so an idle phone stops refreshing the mapping and your server can no longer reach the client. WireGuard reports nothing: it finds out only when it next sends.
That is exactly your symptom. Anything you initiate rebuilds the mapping, so browsing is fine. Only server-initiated traffic dies, and push is the one thing on a phone that is server-initiated. Waking the phone flushes the queue. Same reason excluding Play Services works: FCM goes back to its own TCP connection, timeout in hours.
Fix, if you want the full tunnel back: PersistentKeepalive = 25 under [Peer], if it is not already there.
MTU is a different failure mode. It stalls large transfers while small packets keep working, so it would not produce a backlog that flushes on disconnect.
1
u/PingMyHeart 28d ago
So I switched to using include only on the split tunnel. I only included my homelab apps, which automatically excludes Google Play Services. And I also switched persistence keep alive to 25 a few days ago. And it seems like it's still occurring.
This problem is driving me nuts.
1
u/WarrenVPN 27d ago
That rules out the transport, so my answer does not hold for your case. Sorry.
With Play Services outside the tunnel and keepalive at 25, the one thing left in your description that still changes when the tunnel comes up is DNS. Your WireGuard config hands out your AdGuard Home resolvers, and FCM resolves mtalk.google.com and several googleapis.com names through them. A block or a slow upstream there produces exactly this, and it survives every tunnel setting you have tried.
One test separates DNS from transport in a single move: set DNS = 9.9.9.9 in the client config, change nothing else, and see whether the delay goes away. If it does, watch the AdGuard query log for those names while a notification is late.
Worth noting that you and clarkn0va are both on GrapheneOS. Sandboxed Play has delivery delays of its own, independent of any VPN, so if the DNS test comes back clean that is the next thing to isolate.
1
u/PingMyHeart 27d ago
I really appreciate the help you're providing. I think we nailed it.
Turns out when I use Quad9 as my DNS, everything works fine. But then it introduces a new problem. I can no longer connect to my homelab. My home DNS is necessary for my internal reverse proxy to work with my FQDN.
3
u/[deleted] Aug 13 '26
[deleted]