OpenVPN és un programari de xarxa privada virtual (VPN) lliure i de codi obert que crea un túnel xifrat entre dues màquines o xarxes. Serveix per connectar-te a la xarxa de casa o de la feina des de fora, per protegir el trànsit quan fas servir wifis públiques o per unir oficines.
En aquest article t’explico pas a pas com muntar un servidor OpenVPN en un servidor Debian o Ubuntu i com connectar-t’hi des de Linux i Windows.
Abans de començar
Necessites:
- Un servidor Linux amb una adreça IP pública (o un port redirigit des del router). Els exemples són per a Debian 13 i Ubuntu 24.04; a Rocky, Alma o Fedora els paquets es diuen igual i s’instal·len amb
dnf(a Rocky/Alma, des d’EPEL). - Accés amb
sudo. - El port 1194/UDP obert al tallafoc i, si cal, redirigit al router.
Una nota sobre l’original: la primera versió d’aquest article tenia diversos errors (comandes d’Easy-RSA que no existeixen, una directiva server mal feta, rutes de certificats equivocades i cap certificat per als clients). Aquesta versió està revisada i corregida.
Pas 1: actualitzar el sistema
sudo apt update
sudo apt upgrade
Pas 2: instal·lar OpenVPN i Easy-RSA
Easy-RSA és el conjunt d’scripts que fa servir OpenVPN per crear la infraestructura de claus (PKI): l’autoritat de certificació (CA) i els certificats del servidor i dels clients.
sudo apt install openvpn easy-rsa
Pas 3: crear la infraestructura de claus
Crea un directori de treball per a la CA amb make-cadir (de Debian i Ubuntu). Fes-ho com a usuari normal, fora de /etc/openvpn, i protegeix-lo bé: qui tingui la clau de la CA pot crear certificats vàlids per a la teva VPN.
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
Inicialitza la PKI i crea la CA:
./easyrsa init-pki
./easyrsa build-ca
build-ca et demana una contrasenya per a la clau de la CA i un nom (per exemple, ca-vpn). Després crea el certificat i la clau del servidor, i un per a cada client:
./easyrsa build-server-full servidor nopass
./easyrsa build-client-full joan nopass
nopass deixa la clau sense contrasenya, perquè el servei pugui arrencar sol. Cada comanda et demana la contrasenya de la CA per signar el certificat. Al final tindràs:
pki/ca.crt # certificat de la CA (públic)
pki/issued/servidor.crt # certificat del servidor
pki/private/servidor.key # clau privada del servidor
pki/issued/joan.crt # certificat del client
pki/private/joan.key # clau privada del client
Finalment, genera una clau compartida tls-crypt, que xifra i autentica els paquets de control i fa que el servidor ignori qualsevol connexió que no la tingui:
openvpn --genkey tls-crypt ta.key
Copia al directori del servidor el que necessita:
sudo cp pki/ca.crt pki/issued/servidor.crt pki/private/servidor.key ta.key /etc/openvpn/server/
Amb OpenVPN 2.6 o posterior no cal el fitxer Diffie-Hellman (gen-dh) si fas servir dh none, perquè l’intercanvi de claus es fa amb corbes el·líptiques.
Pas 4: configurar el servidor
Crea el fitxer /etc/openvpn/server/server.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert servidor.crt
key servidor.key
dh none
tls-crypt ta.key
# Xarxa interna de la VPN: el servidor serà 10.8.0.1
server 10.8.0.0 255.255.255.0
topology subnet
# Envia tot el trànsit dels clients pel túnel i els dona un DNS
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 9.9.9.9"
keepalive 10 120
user nobody
group nogroup
persist-tun
status /var/log/openvpn/status.log
verb 3
Què fa cada directiva important:
| Directiva | Què fa |
|---|---|
port / proto | Port i protocol on escolta. UDP és més ràpid; TCP només si UDP està bloquejat |
dev tun | Túnel de nivell IP (encaminat) |
ca, cert, key | Certificat de la CA, del servidor i clau privada del servidor |
dh none | Intercanvi de claus amb corbes el·líptiques, sense fitxer DH |
tls-crypt | Protegeix el canal de control amb la clau compartida |
server | Xarxa que es repartirà als clients (no és l’IP pública del servidor) |
push "redirect-gateway…" | Fa que tot el trànsit dels clients passi per la VPN. Treu-la si només vols accedir a la xarxa interna |
keepalive 10 120 | Envia un ping cada 10 segons i considera caiguda la connexió als 120 |
user / group | Deixa de ser root un cop ha arrencat (a Rocky/Fedora, el grup és nobody) |
El xifratge no cal configurar-lo: OpenVPN 2.5 i posteriors negocien AES-256-GCM o ChaCha20-Poly1305 automàticament (directiva data-ciphers). Les directives cipher i auth de les guies antigues ja no són necessàries.
Pas 5: activar el reenviament de paquets i el NAT
Perquè els clients puguin sortir a Internet o arribar a la xarxa interna a través del servidor, cal activar el reenviament IP:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-openvpn.conf
sudo sysctl --system
I fer NAT del trànsit de la VPN cap a la interfície de sortida (mira’n el nom amb ip route; aquí, eth0):
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Aquesta regla es perd en reiniciar: fes-la persistent amb el paquet iptables-persistent, amb les regles d’ufw o amb nftables, segons el tallafoc que facis servir. Si tens ufw, obre també el port:
sudo ufw allow 1194/udp
Pas 6: arrencar el servidor
Per provar-lo en primer pla (veuràs els missatges i els errors):
cd /etc/openvpn/server
sudo openvpn --config server.conf
Quan funcioni, atura’l amb Ctrl+C i arrenca’l com a servei amb systemd, perquè s’iniciï automàticament amb el sistema. El nom després de l’@ és el del fitxer sense .conf:
sudo systemctl enable --now openvpn-server@server
sudo systemctl status openvpn-server@server
Comprova que escolta i que s’ha creat la interfície del túnel:
sudo ss -ulpn | grep 1194
ip addr show tun0
Pas 7: preparar el fitxer del client
El més pràctic és un sol fitxer .ovpn amb els certificats a dins. Crea joan.ovpn amb aquesta configuració (canvia vpn.exemple.cat per l’IP pública o el domini del servidor):
client
dev tun
proto udp
remote vpn.exemple.cat 1194
resolv-retry infinite
nobind
persist-tun
remote-cert-tls server
verb 3
I afegeix-hi al final el contingut dels fitxers entre etiquetes:
<ca>
(contingut de pki/ca.crt)
</ca>
<cert>
(contingut de pki/issued/joan.crt)
</cert>
<key>
(contingut de pki/private/joan.key)
</key>
<tls-crypt>
(contingut de ta.key)
</tls-crypt>
Envia aquest fitxer al client per un canal segur (per exemple, amb scp o sftp): conté la seva clau privada. Fes un certificat diferent per a cada persona o dispositiu, i així en podràs revocar un sense afectar els altres (./easyrsa revoke-issued joan i ./easyrsa gen-crl, i la directiva crl-verify al servidor).
Pas 8: connectar-se des dels clients
Des de Linux
Instal·la OpenVPN i connecta’t amb el fitxer:
sudo apt install openvpn
sudo openvpn --config joan.ovpn
Si vols que es connecti en arrencar, copia’l a /etc/openvpn/client/joan.conf i activa openvpn-client@joan. En escriptoris amb NetworkManager, instal·la network-manager-openvpn-gnome (o l’equivalent del teu escriptori) i importa el fitxer .ovpn des de la configuració de xarxa.
Des de Windows
- Baixa el client des de la web oficial: OpenVPN Connect o l’OpenVPN GUI de la comunitat.
- Instal·la’l seguint les instruccions de la pantalla.
- Importa el fitxer
joan.ovpn(a OpenVPN Connect, Import Profile; a l’OpenVPN GUI, clic dret a la icona de la safata i Import file). - Fes clic a Connectar.
Amb aquesta configuració no et demanarà usuari ni contrasenya: l’autenticació es fa amb el certificat del fitxer. Als mòbils (Android, iOS) OpenVPN Connect importa el mateix fitxer.
Un cop connectat, el trànsit va xifrat pel túnel. Ho pots comprovar al servidor amb cat /var/log/openvpn/status.log, que llista els clients connectats.
Consells finals
- Protegeix la CA: la clau
pki/private/ca.keyés la més important. L’ideal és tenir la CA en una màquina diferent del servidor VPN. - Un certificat per client i revoca els que ja no facin falta.
- Mantén OpenVPN actualitzat, com qualsevol servei exposat a Internet.
- Mira els registres si alguna cosa falla:
journalctl -u openvpn-server@server. - Alternativa moderna: si comences de zero, val la pena conèixer WireGuard, inclòs al nucli de Linux, més senzill de configurar i molt ràpid. OpenVPN continua sent útil quan necessites TCP, travessar tallafocs restrictius o integrar-lo amb sistemes que ja el fan servir.
Tens més informació a la documentació oficial d’OpenVPN.