Per què muntar la teva pròpia VPN?

Les VPNs comercials tenen el seu lloc, però si ja tens un servidor o VPS (encara que sigui de 5€/mes), muntar la teva pròpia té avantatges clars:

  • Confies en tu mateix, no en una empresa VPN la política de registres de la qual desconèixes
  • Accés a la teva xarxa domèstica o de servidors des de qualsevol lloc
  • Sense límits de velocitat ni de dispositius
  • Cost gairebé zero si ja tens el servidor

Per què WireGuard i no OpenVPN?

OpenVPN porta anys sent l'estàndard però WireGuard el supera en:

  • Velocitat: protocol més eficient, menys latència
  • Simplicitat: ~4.000 línies de codi vs ~400.000 d'OpenVPN
  • Configuració: de debò, 15 minuts i funciona
  • Seguretat: criptografia moderna (ChaCha20, Curve25519, BLAKE2)

Requisits

  • Un servidor Linux amb IP pública (VPS de qualsevol proveïdor, o el teu homelab amb port forwarding)
  • Ubuntu 22.04 o Debian 12 (les comandes que faig servir aquí)
  • Port UDP lliure (per defecte el 51820)

Instal·lació al servidor

# Instal·lar WireGuard
sudo apt update && sudo apt install wireguard -y

# Generar claus del servidor
wg genkey | sudo tee /etc/wireguard/server_private.key | \
  wg pubkey | sudo tee /etc/wireguard/server_public.key

# Veure les claus (les necessitaràs)
sudo cat /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_public.key

Configuració del servidor

Crea el fitxer /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <ENGANXA_AQUÍ_server_private.key>
Address = 10.0.0.1/24
ListenPort = 51820

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

# Client 1 (el teu PC de casa)
[Peer]
PublicKey = <PUBLIC_KEY_DEL_CLIENT>
AllowedIPs = 10.0.0.2/32
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

sudo systemctl enable --now wg-quick@wg0
sudo wg show

Configuració del client

wg genkey | tee client_private.key | wg pubkey > client_public.key

Fitxer de configuració del client (wg-client.conf):

[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <IP_DEL_TEU_SERVIDOR>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Clients mòbils

L'app oficial de WireGuard a Android i iOS pot importar la configuració com a fitxer o com a codi QR:

sudo apt install qrencode
qrencode -t ansiutf8 < wg-client.conf

Eina alternativa: wg-easy

Si prefereixes una interfície web per gestionar-ho tot, wg-easy s'instal·la amb Docker i ofereix generació de QR i gestió de clients des del navegador.