Guies de LinuxLinuxOtros mundosProgramas y Herramientas

Com instal·lar i configurar OpenVPN a Linux pas a pas



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:

DirectivaQuè fa
port / protoPort i protocol on escolta. UDP és més ràpid; TCP només si UDP està bloquejat
dev tunTúnel de nivell IP (encaminat)
ca, cert, keyCertificat de la CA, del servidor i clau privada del servidor
dh noneIntercanvi de claus amb corbes el·líptiques, sense fitxer DH
tls-cryptProtegeix el canal de control amb la clau compartida
serverXarxa 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 120Envia un ping cada 10 segons i considera caiguda la connexió als 120
user / groupDeixa 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

  1. Baixa el client des de la web oficial: OpenVPN Connect o l’OpenVPN GUI de la comunitat.
  2. Instal·la’l seguint les instruccions de la pantalla.
  3. 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).
  4. 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.

Articles relacionats