Setup Wireguard VPN for Mobile Clients

Wireguard is a modern, sleek, VPN that promises to be super easy to install and setup, as well as being faster than IPSec. With pretty much a client for every device, it’s a great option for running on a home or office network VPN. This guide outlines how to setup and configure the VPN server and mobile (Android, but iOS should be the same) client.

 

#get the interface
ip address

#escalate privilege
sudo su

#install wireguard + tools
apt update
apt install wireguard wireguard-tools qrencode

#generate keys
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey | tee /etc/wireguard/server_public.key
wg genkey | tee /etc/wireguard/android-private.key | wg pubkey > /etc/wireguard/android-public.key

#create server configuration file
nano /etc/wireguard/wg0.conf

[Interface]
# Set the IP range that client devices will receive an IP in
Address = 10.220.0.1/24
Address = fd86:ea04:1115::1/64

# The port that will be used to listen to connections. 51820 is the default.
ListenPort = 51820

# server's private key.
PrivateKey = VPN_SERVER_PRIVATE_KEY

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
#android phone
PublicKey = MOBILE_PUBLIC_KEY
# The IP address that will be assigned to this client
AllowedIPs = 10.220.0.2/32, fd86:ea04:1115::2/128

#secure the wireguard folder
chown -R root:root /etc/wireguard/
chmod -R og-rwx /etc/wireguard/*

#enable ip forwarding
nano /etc/sysctl.conf

#add to end of file
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding=1

sysctl -p

#wireguard service commands
systemctl enable [email protected]
systemctl start [email protected]
systemctl stop [email protected]


#wireguard status
wg show

#create client configuration file
nano /etc/wireguard/android.conf

[Interface]
PrivateKey = MOBILE_PRIVATE_KEY
Address = 10.220.0.2/32, fd86:ea04:1115::2/128
DNS = 9.9.9.9

[Peer]
PublicKey = VPN_SERVER_PUBLIC_KEY
Endpoint = publicipaddressofwireguardserver:51820
AllowedIPs = 0.0.0.0/0, ::/0

#generate the QR code
qrencode -t ansiutf8 < /etc/wireguard/android.conf