I’m digging into establishing pritunl-client in our raspberry pis since we have had issues with openvpn now (it’s dropping connections and we want to have a more stable connection which would be testing out Wireguard.) I got Wireguard working on Pritunl, it’s now a matter of getting it to work in our raspberry pis. I have done the following if anyone wants to set this up on their side:
### Pritunl setup on raspberry pi
wget https://go.dev/dl/go1.23.3.linux-arm64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.23.3.linux-arm64.tar.gz
mkdir -p ~/go/{bin,pkg,src}
### my .profile has the following
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
go install github.com/pritunl/pritunl-client-electron/cli@latest
sudo mv ~/go/bin/cli ~/go/bin/pritunl-client
### Commands to setup the connection correctly using Pritunl's Admin API keys
curl -H "Auth-Key: 3JKJKj3jk3jk3jl3kjhh3kl3kj3" \
-H "Auth-Token: vj33h3kk3l2929009fjjFJKJK" \
-o client.tar \
https://pritunl.foo.com/key/JkyfjKKJFKKKLLDLDlldliekd.tar
pritunl-client add client.tar
pritunl-client list
pritunl-client start 5ac --mode=wg
I’m able to pull the tar file to be used with pritunl-client but I get this error:
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: [2025-11-20 17:05:25][ERRO] ▶ profile: Failed to start connection in restart ◆ client_disconnect=true ◆ client_>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: utils: Failed to exec '/usr/bin/wg-quick'
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: exit status 2
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: ORIGINAL STACK TRACE:
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/utils.ExecCombinedOutputLogged
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Wg).confWgLinux
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Wg).confWg
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Wg).Connect
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Client).connectPreAuth
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Client).Start
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Wg).Start
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Connection).Start
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: github.com/pritunl/pritunl-client-electron/service/connection.(*Connection).Restart
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /home/pi/go/pkg/mod/github.com/pritunl/pritunl-client-electron/service@v0.0.0-20251116210614-0523de9492>
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: runtime.goexit
Nov 20 17:05:25 2ccf67d388ab pritunl-client-service[48343]: /usr/local/go/src/runtime/asm_arm64.s:1223 +0x89803
Hoping I can get some help on this as to why it’s erroring for me in my raspberry pi for Wireguard
Run the commands below to get the contents of the wg-quick configuration. Then start the connection. Verify there are no issues with the configuration. Then recreate the configuration file and manually run sudo wg-quick /etc/wireguard/wg0.conf.
sudo -s
while true; do
if cat /etc/wireguard/*.conf 2>/dev/null; then
break
fi
done
Oh actually @zach, it seems I get this error. I use NetworkManager in my raspberry pis with /etc/resolv.conf . Wondering what I can do to resolve this issue:
Nov 21 10:54:12 2ccf672b787d pritunl-client-service[673]: [2025-11-21 10:54:12][ERRO] ▶ utils: Process exec error ◆ arg=[]string{"up", "wg0"} ◆ cmd="/usr/bin/wg-quick" ◆ output="[#] ip link add wg0 type wireguard\n[#] wg setconf wg0 /dev/fd/63\n[#] ip -4 address add 10.50.0.7/16 dev wg0\n[#] ip link set mtu 1420 up dev wg0\n[#] resolvconf -a tun.wg0 -m 0 -x\n/etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf\n[#] ip -4 route add 10.10.0.2/32 dev wg0\nRTNETLINK answers: File exists\n[#] resolvconf -d tun.wg0 -f\n/etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf\n[#] ip link delete dev wg0\n"
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5080] device (wg0): state change: unmanaged -> unavailable (reason 'connection-assumed', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5087] device (wg0): state change: unavailable -> disconnected (reason 'connection-assumed', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5095] device (wg0): Activation: starting connection 'wg0' (990f3d28-22f8-40c8-b2e6-fd43ae324715)
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5096] device (wg0): state change: disconnected -> prepare (reason 'none', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5102] device (wg0): state change: prepare -> config (reason 'none', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5106] device (wg0): state change: config -> ip-config (reason 'none', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5110] device (wg0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d dbus-daemon[669]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' requested by ':1.48' (uid=0 pid=2772 comm="/usr/sbin/NetworkManager --no-daemon")
Nov 21 10:54:12 2ccf672b787d systemd[1]: Starting NetworkManager-dispatcher.service - Network Manager Script Dispatcher Service...
Nov 21 10:54:12 2ccf672b787d dbus-daemon[669]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Nov 21 10:54:12 2ccf672b787d systemd[1]: Started NetworkManager-dispatcher.service - Network Manager Script Dispatcher Service.
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5419] device (wg0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5421] device (wg0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'external')
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.5429] device (wg0): Activation: successful, device activated.
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <warn> [1763740452.6111] device (wg0): could not get wireguard properties
Nov 21 10:54:12 2ccf672b787d NetworkManager[2772]: <info> [1763740452.6116] device (wg0): state change: activated -> unmanaged (reason 'connection-assumed', sys-iface-state: 'external')
I don’t think Ubuntu uses resolvconf by default. But installing resolvconf then manually managing the resolve.conf file is incorrect. That file would be managed by resolvconf. Installing it may also interfere with systemd-resolved. The system should have systemd-resolved and the systemd-resolved.service running.
Another option may be to remove the DNS Server and DNS Search Domain from the Pritunl server settings. This will prevent the VPN client from attempting to modify the DNS.
Thanks for the reply @zach. We don’t want to remove the DNS server since we use that to map our devices which works. We have it working just fine for OpenVPN but when it comes to Wireguard, these errors pops up.
I’ll continue digging into this to get this working.
I was able to get this working with Raspberry Pi 4s which do not use NetworkManager. The following errors are on Raspberry Pi 5. I was able to resolve the issue by installing sudo apt install resolvconf which stopped the following errors:
\n/usr/bin/wq-quick: line 32: resolvconf: command not found\n[#] ip link delete dev wg0\n"
From here, I began having new errors of my DNS server. I was able to resolve the following by modifying the /etc/resolv.conf with nameserver 8.8.8.8 and nameserver 1.1.1.1, I reran pritunl-client and then it began working. I just need to temporarily add the nameservers to communicate to my server which then pull the configs using pritunl-client:
POST "https://pritunl-0.foo.com/key/wg/234234l;ikj34l3k4j3l4kj34/j23l4kj3l4kj3k3k3k3kjkjj": dial tcp: lookup pritunl-0.foo.com on [::1]:53: read udp [::1]:44154->[::1]:53: read: connection refused
The error indicates it’s attempting to do a DNS query with systemd-resolve but systemd-resolve isn’t running. The resolv.conf file shouldn’t be modifed on a system using systemd-resolve. You need to configure one DNS system and correct the DNS configuration.