Wireguard on fairphone 6 e/os not completing handshake

I’m having trouble getting a wireguard vpn connection on my partners new fairphone 6 running e/os andoird 15, /e/ OS version 3.0.4-a15-20250708507307-official-FP6. It’s a completely fresh install.

I have a home server running the wireguard VPN. It’s working on all other devices (iPhone, couple of macbooks), configured in the same way (pivpn -a).

When I import the conf file (directly, or using the QR code) I get the connection request, and wireguard shows in the VPN list in the Network and Internet settings. It’s not toggled to “always-on VPN”, but doesn’t work either way. There are no other VPNs in the list.

I’ve tried the WG Tunnel app, I’ve tried side-loading the wireguard app - same results.

The conf file looks like this:

[Interface]
PrivateKey = [redacted]
Address = 10.58.127.3/24,fd11:5ee:bad:c0de::3/64
DNS = 208.67.222.222, 208.67.220.220

[Peer]
PublicKey = <server_public_key_redacted>
PresharedKey =
Endpoint = [MY_IP_REDACTED]:51820
AllowedIPs = 0.0.0.0/0, ::0/0

Any help with this would be much appreciated.

while both the official wireguard app and wg-tunnel can use a usermode userspace implementation and built-in kernel wireguard (5.6+), only wg tunnel exposes a user switch for this through the settings. Is your experience any different if you explicitly run the usermode userspace implementation?

In WG Tunnel the switch to run using the kernel module rather than in userspace is set to usermode, but when I try to switch it to kernel mode it says “Root shell denied”.

The phone is not rooted, and I’d rather not root it, but if there’s a way to temporarily do so to enable the kernel module then I’d be happy to try.

In WG Tunnel there is a “Local logging” setting, maybe something of interest will show then?

Here’s what I’m getting from the logs:

1754127741.621 29746 29746 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=b.w@f25a4dd
1754127742.865 29746 31827 I AmneziaWG/GoBackend: Bringing tunnel ml_ff UP
1754127742.868 29746 31827 D AmneziaWG/GoBackend: Requesting to start VpnService
1754127742.878 29746 31827 I AmneziaWG/GoBackend: FD already closed
1754127742.904 29746 31827 D AmneziaWG/GoBackend: Go backend v0.2.11
1754127742.906 29746 31827 D AmneziaWG/ml_ff: Attaching to interface tun0
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 1 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 1 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 5 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 1 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 2 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 2 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 2 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 3 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 3 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 3 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 4 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 4 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 4 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 5 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 7 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 5 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 6 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 6 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 6 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 7 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: decryption worker 8 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 7 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 8 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 8 - started
1754127742.907 29746 29761 D AmneziaWG/ml_ff: Routine: TUN reader - started
1754127742.907 29746 31827 D AmneziaWG/ml_ff: UAPI: Updating private key
1754127742.910 29746 31827 D AmneziaWG/ml_ff: UAPI: Removing all peers
1754127742.910 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - UAPI: Created
1754127742.910 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - UAPI: Adding allowedip
1754127742.911 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - UAPI: Updating endpoint
1754127742.911 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - UAPI: Updating persistent keepalive interval
1754127742.911 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - UAPI: Updating preshared key
1754127742.911 29746 31827 E AmneziaWG/ml_ff: UAPIOpen: mkdir /data/data/org.amnezia.awg: permission denied
1754127742.913 29746 29966 D AmneziaWG/ml_ff: Routine: event worker - started
1754127742.916 29746 31827 D AmneziaWG/ml_ff: UDP bind has been updated
1754127742.917 29746 29966 D AmneziaWG/ml_ff: Routine: receive incoming v4 - started
1754127742.917 29746 29965 D AmneziaWG/ml_ff: Routine: receive incoming v6 - started
1754127742.925 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Starting
1754127742.925 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending keepalive packet
1754127742.925 29746 31827 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127742.925 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Routine: sequential receiver - started
1754127742.925 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Routine: sequential sender - started
1754127742.928 29746 31827 D AmneziaWG/ml_ff: Interface state was Down, requested Up, now Up
1754127742.928 29746 31827 D AmneziaWG/ml_ff: Device started
1754127746.338 29746 29750 I guardautotunnel: Compiler allocated 4319KB to compile java.lang.Object C.m.j(java.lang.Object, java.lang.Object)
1754127748.087 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127748.087 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127753.319 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127753.320 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127758.446 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127758.446 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127763.777 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127763.777 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127764.262 29746 29746 D InsetsController: hide(ime(), fromIme=false)
1754127764.262 29746 29746 I ImeTracker: com.zaneschepke.wireguardautotunnel:97d1aa5: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
1754127766.585 29746 29746 D VRI[MainActivity]: visibilityChanged oldVisibility=true newVisibility=false
1754127766.605 29746 29746 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=b.w@f25a4dd
1754127769.086 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127769.086 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127774.331 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127774.331 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127779.640 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127779.640 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127784.830 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127784.831 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127790.133 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 3)
1754127790.133 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127795.180 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 4)
1754127795.180 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127800.201 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127800.201 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127805.505 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127805.505 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127810.802 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127810.802 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127816.124 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127816.124 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127817.673 29746 29746 D ViewRootImpl: Skipping stats log for color mode
1754127817.820 29746 29746 D InsetsController: hide(ime(), fromIme=false)
1754127817.820 29746 29746 I ImeTracker: com.zaneschepke.wireguardautotunnel:8cbeb73c: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
1754127821.218 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 3)
1754127821.218 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127826.311 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 4)
1754127826.312 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127831.502 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 5)
1754127831.503 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127835.471 29746 29746 D VRI[MainActivity]: visibilityChanged oldVisibility=true newVisibility=false
1754127835.498 29746 29746 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=b.w@f25a4dd
1754127836.665 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 6)
1754127836.665 29746 29968 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127841.698 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Handshake did not complete after 5 seconds, retrying (try 2)
1754127841.698 29746 29967 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Sending handshake initiation
1754127842.371 29746 29746 D ViewRootImpl: Skipping stats log for color mode
1754127842.474 29746 29746 D InsetsController: hide(ime(), fromIme=false)
1754127842.474 29746 29746 I ImeTracker: com.zaneschepke.wireguardautotunnel:10149b36: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
1754127844.697 29746 29750 I guardautotunnel: Compiler allocated 4658KB to compile void O2.u.d(V5.a, Z5.L, U.o, int)
1754127844.699 29746 29746 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=b.w@f25a4dd
1754127846.637 29746 31784 I u : Stopping tunnel ml_ff userspace
1754127846.646 29746 31784 I AmneziaWG/GoBackend: Bringing tunnel ml_ff DOWN
1754127846.646 29746 31784 D AmneziaWG/ml_ff: Device closing
1754127846.646 29746 29966 D AmneziaWG/ml_ff: Routine: event worker - stopped
1754127846.693 29746 29967 D AmneziaWG/ml_ff: Routine: TUN reader - stopped
1754127846.693 29746 29761 D AmneziaWG/ml_ff: Routine: receive incoming v4 - stopped
1754127846.694 29746 29761 D AmneziaWG/ml_ff: Routine: receive incoming v6 - stopped
1754127846.694 29746 31784 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Stopping
1754127846.694 29746 29761 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Routine: sequential sender - stopped
1754127846.694 29746 29966 D AmneziaWG/ml_ff: peer(PtXX…DIzI) - Routine: sequential receiver - stopped
1754127846.695 29746 31784 D AmneziaWG/ml_ff: Device closed
1754127846.695 29746 29966 D AmneziaWG/ml_ff: Routine: decryption worker 1 - stopped
1754127846.695 29746 29967 D AmneziaWG/ml_ff: Routine: decryption worker 6 - stopped
1754127846.696 29746 29967 D AmneziaWG/ml_ff: Routine: handshake worker 3 - stopped
1754127846.696 29746 29967 D AmneziaWG/ml_ff: Routine: handshake worker 4 - stopped
1754127846.696 29746 29965 D AmneziaWG/ml_ff: Routine: decryption worker 8 - stopped
1754127846.696 29746 29965 D AmneziaWG/ml_ff: Routine: handshake worker 2 - stopped
1754127846.696 29746 29965 D AmneziaWG/ml_ff: Routine: handshake worker 7 - stopped
1754127846.696 29746 29771 D AmneziaWG/ml_ff: Routine: handshake worker 5 - stopped
1754127846.696 29746 29965 D AmneziaWG/ml_ff: Routine: handshake worker 8 - stopped
1754127846.696 29746 29965 D AmneziaWG/ml_ff: Routine: handshake worker 6 - stopped
1754127846.696 29746 29965 D AmneziaWG/ml_ff: Routine: decryption worker 7 - stopped
1754127846.696 29746 29771 D AmneziaWG/ml_ff: Routine: decryption worker 4 - stopped
1754127846.696 29746 29761 D AmneziaWG/ml_ff: Routine: handshake worker 1 - stopped
1754127846.696 29746 29966 D AmneziaWG/ml_ff: Routine: decryption worker 2 - stopped
1754127846.696 29746 29759 D AmneziaWG/ml_ff: Routine: decryption worker 3 - stopped
1754127846.696 29746 29759 D AmneziaWG/ml_ff: Routine: encryption worker 3 - stopped
1754127846.696 29746 29967 D AmneziaWG/ml_ff: Routine: decryption worker 5 - stopped
1754127846.696 29746 29967 D AmneziaWG/ml_ff: Routine: encryption worker 2 - stopped
1754127846.696 29746 29967 D AmneziaWG/ml_ff: Routine: encryption worker 7 - stopped
1754127846.696 29746 29967 D AmneziaWG/ml_ff: Routine: encryption worker 8 - stopped
1754127846.696 29746 29967 D AmneziaWG/ml_ff: Routine: encryption worker 6 - stopped
1754127846.696 29746 29966 D AmneziaWG/ml_ff: Routine: encryption worker 5 - stopped
1754127846.696 29746 31784 D AmneziaWG/GoBackend: Service is now active
1754127846.699 29746 29759 D AmneziaWG/ml_ff: Routine: encryption worker 4 - stopped
1754127846.699 29746 29761 D AmneziaWG/ml_ff: Routine: encryption worker 1 - stopped
1754127848.459 29746 29746 D VRI[MainActivity]: visibilityChanged oldVisibility=true newVisibility=false
1754128055.884 29746 29746 D ViewRootImpl: Skipping stats log for color mode
1754128055.997 29746 29746 D InsetsController: hide(ime(), fromIme=false)
1754128055.998 29746 29746 I ImeTracker: com.zaneschepke.wireguardautotunnel:454eab36: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
1754128072.593 29746 29746 D VRI[MainActivity]: visibilityChanged oldVisibility=true newVisibility=false
1754128072.622 29746 29746 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=b.w@f25a4dd
1754128080.288 29746 29751 W guardautotunnel: Reducing the number of considered missed Gc histogram windows from 105 to 100
1754128080.778 29746 29746 D ViewRootImpl: Skipping stats log for color mode
1754128080.794 29746 29777 I AdrenoGLES-0: QUALCOMM build : 6c4e93ae0c, Id536f549c1
1754128080.794 29746 29777 I AdrenoGLES-0: Build Date : 02/21/25
1754128080.794 29746 29777 I AdrenoGLES-0: OpenGL ES Shader Compiler Version: E031.47.18.24
1754128080.794 29746 29777 I AdrenoGLES-0: Local Branch :
1754128080.794 29746 29777 I AdrenoGLES-0: Remote Branch : refs/tags/AU_LINUX_ANDROID_LA.VENDOR.14.3.0.11.00.00.973.839
1754128080.794 29746 29777 I AdrenoGLES-0: Remote Branch : NONE
1754128080.794 29746 29777 I AdrenoGLES-0: Reconstruct Branch : NOTHING
1754128080.794 29746 29777 I AdrenoGLES-0: Build Config : S L 16.1.2 AArch64
1754128080.795 29746 29777 I AdrenoGLES-0: Driver Path : /vendor/lib64/egl/libGLESv2_adreno.so
1754128080.795 29746 29777 I AdrenoGLES-0: Driver Version : 0800.31
1754128080.795 29746 29777 I AdrenoGLES-0: Process Name : com.zaneschepke.wireguardautotunnel
1754128080.802 29746 29777 I AdrenoGLES-0: PFP: 0x01100067, ME: 0x00000000
1754128080.868 29746 29746 D InsetsController: hide(ime(), fromIme=false)
1754128080.868 29746 29746 I ImeTracker: com.zaneschepke.wireguardautotunnel:ac9d1280: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
1754128097.399 29746 29746 D InsetsController: hide(ime(), fromIme=false)
1754128097.399 29746 29746 I ImeTracker: com.zaneschepke.wireguardautotunnel:410d8f42: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN

I think the problem might be there.

imo most relevant is

Handshake did not complete after 5 seconds

Can you ssh into the pivpn and tcpdump on the interface to look what arrives?

When you transfered a config per QRcode - was that same file known to be working elsewhere on the other devices you mention, just as sanity check?

SMH, I’m an idiot - pivpn -a was configuring the endpoint incorrectly. Used a known working conf worked, and then manually correcting that in the conf fixed it. IDK if it’s possible to delete the thread - this has nothing to do with /e/os and everything to do with my idiocy.

1 Like

troubleshooting threads have their own worth.

I fumbled many wireguard configs and banged my head until realizing I switched private, public or preshared key in some field. They all have the same damn length. A key prefix would make it obvious…