1
🔄 Update System
Always start by updating your system packages to ensure you have the latest security patches and dependencies:
sudo apt update && sudo apt upgrade -y
💡 Tip: The -y flag automatically confirms the upgrade prompt. Remove it if you want to review packages before upgrading.
2
📦 Install WireGuard
Install WireGuard and required tools:
sudo apt install wireguard wireguard-tools -y
For Ubuntu 18.04 and earlier, you may need to add the PPA first:
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update
sudo apt install wireguard wireguard-tools -y
3
🔑 Generate Keys
Generate private and public key pairs:
wg genkey | sudo tee /etc/wireguard/private.key
sudo chmod 600 /etc/wireguard/private.key
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
⚠️ Security Note: Keep your private key secure! The chmod 600 command ensures only root can read the private key.
4
⚙️ Configure WireGuard
Create and edit the WireGuard configuration file:
sudo nano /etc/wireguard/wg0.conf
Add the following configuration (example for server):
[Interface]
# Server configuration
PrivateKey = <your_server_private_key>
Address = 10.8.0.1/24
ListenPort = 51820
SaveConfig = true
# Enable IP forwarding (for server/gateway setups)
PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Client 1
PublicKey = <client_1_public_key>
AllowedIPs = 10.8.0.2/32
# Optional: PresharedKey for additional security
# PresharedKey = <preshared_key>
[Peer]
# Client 2
PublicKey = <client_2_public_key>
AllowedIPs = 10.8.0.3/32
📝 Configuration Notes:
- Address: The VPN IP address for this interface
- ListenPort: UDP port WireGuard listens on (default: 51820)
- SaveConfig: Automatically save runtime configuration
- AllowedIPs: IP ranges that can be routed through this peer
5
🌐 Enable IP Forwarding (Server Only)
For server/gateway setups, permanently enable IP forwarding:
sudo nano /etc/sysctl.conf
Uncomment or add this line:
net.ipv4.ip_forward=1
Apply the changes:
sudo sysctl -p
6
🎮 Manage WireGuard
Start WireGuard:
sudo wg-quick up wg0
Stop WireGuard:
sudo wg-quick down wg0
Enable on Boot:
sudo systemctl enable wg-quick@wg0
Disable Autostart:
sudo systemctl disable wg-quick@wg0
Check Status:
sudo systemctl status wg-quick@wg0
sudo wg show
Restart After Config Changes:
sudo wg-quick down wg0 && sudo wg-quick up wg0
7
🔥 Configure Firewall
If using UFW (Ubuntu's default firewall), allow WireGuard port:
sudo ufw allow 51820/udp
Allow forwarding (if acting as server):
sudo nano /etc/ufw/before.rules
Add these lines at the beginning (after the header comments):
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
Also edit UFW's sysctl settings:
sudo nano /etc/ufw/sysctl.conf
Ensure this line is uncommented:
net/ipv4/ip_forward=1
Reload UFW:
sudo ufw reload
🔧
Troubleshooting
Check Logs:
sudo journalctl -xe | grep wireguard
Verify Interface:
ip a show wg0
Test Connectivity:
ping 10.8.0.1
Check Active Connections:
sudo wg show wg0 latest-handshakes
✅ Quick Command Reference
🚀 Start/Stop
wg-quick up wg0
wg-quick down wg0
💾 Auto-start
systemctl enable wg-quick@wg0
systemctl disable wg-quick@wg0
📊 Monitor
wg show
systemctl status wg-quick@wg0
⚙️ Configure
nano /etc/wireguard/wg0.conf
wg-quick down wg0 && wg-quick up wg0
🎉 Setup Complete! Your WireGuard VPN is now configured. Remember to:
- Keep your private keys secure
- Regularly update your system
- Monitor connection logs for unusual activity
- Document your peer configurations