334.4 Redes Privadas Virtuales (VPN)

Introduccion

Las VPN crean tuneles cifrados sobre redes publicas, permitiendo comunicacion segura entre redes o hosts remotos. Las principales tecnologias VPN en Linux son IPsec (strongSwan/Libreswan), OpenVPN y WireGuard.

Para el examen: Conoce las diferencias entre IPsec, OpenVPN y WireGuard. Domina la configuracion basica de cada uno, los modos de IPsec (tunnel vs transport), y la generacion de claves de WireGuard.


IPsec

IPsec opera en la capa de red (capa 3) y es un estandar IETF para comunicacion segura.

Protocolos de IPsec

ProtocoloFuncion
IKE (Internet Key Exchange)Negociacion de claves y parametros de seguridad
ESP (Encapsulating Security Payload)Cifrado + autenticacion de datos
AH (Authentication Header)Solo autenticacion (sin cifrado, obsoleto)

IKEv1 vs IKEv2

CaracteristicaIKEv1IKEv2
Mensajes para establecer SA6-94
NAT traversalExtension opcionalIntegrado
Movilidad (MOBIKE)NoSi
EAP autenticacionNoSi
RecomendacionEvitar si posiblePreferido

Modos de IPsec

ModoDescripcionUso tipico
TunnelEncapsula el paquete IP completoVPN site-to-site
TransportSolo cifra el payloadHost-to-host

strongSwan

strongSwan es la implementacion IPsec mas utilizada en Linux moderno.

# Instalacion
yum install strongswan
apt install strongswan
 
# Archivos de configuracion principales
# /etc/strongswan/ipsec.conf - configuracion de conexiones
# /etc/strongswan/ipsec.secrets - credenciales
# /etc/strongswan/strongswan.conf - configuracion del demonio

Configuracion Site-to-Site con PSK

# /etc/strongswan/ipsec.conf (Lado A - 203.0.113.1)
config setup
    charondebug="ike 2, net 2"
 
conn site-to-site
    type=tunnel
    authby=secret
    auto=start
    keyexchange=ikev2
    left=203.0.113.1
    leftsubnet=192.168.1.0/24
    right=203.0.113.2
    rightsubnet=192.168.2.0/24
    ike=aes256-sha256-modp2048!
    esp=aes256-sha256!
# /etc/strongswan/ipsec.secrets
203.0.113.1 203.0.113.2 : PSK "clave-compartida-muy-larga-y-segura"

Configuracion con Certificados

# /etc/strongswan/ipsec.conf
conn vpn-certs
    type=tunnel
    authby=rsasig
    auto=start
    keyexchange=ikev2
    left=203.0.113.1
    leftcert=servidor.pem
    leftsubnet=192.168.1.0/24
    right=203.0.113.2
    rightcert=cliente.pem
    rightsubnet=192.168.2.0/24
    ike=aes256-sha384-ecp384!
    esp=aes256-sha384!
 
# /etc/strongswan/ipsec.secrets
: RSA servidor-key.pem
# Comandos de gestion
ipsec start         # Iniciar strongSwan
ipsec stop          # Detener
ipsec restart       # Reiniciar
ipsec status        # Ver estado de conexiones
ipsec statusall     # Estado detallado
ipsec up site-to-site    # Levantar conexion
ipsec down site-to-site  # Cerrar conexion
ipsec reload        # Recargar configuracion
ipsec listcerts     # Listar certificados

Para el examen: Conoce los parametros left (local) y right (remoto) en ipsec.conf. leftsubnet/rightsubnet definen las redes protegidas. authby=secret usa PSK, authby=rsasig usa certificados.


OpenVPN

OpenVPN opera en espacio de usuario sobre TLS/SSL, usando la capa de transporte (TCP/UDP).

Interfaces tun vs tap

InterfazCapaDescripcion
tunCapa 3 (IP)Tunel punto a punto, mas eficiente
tapCapa 2 (Ethernet)Puente Ethernet, soporta broadcast

Configuracion del Servidor

# Generar PKI con easy-rsa
cd /etc/openvpn/easy-rsa/
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req servidor nopass
./easyrsa sign-req server servidor
./easyrsa gen-dh
./easyrsa gen-req cliente1
./easyrsa sign-req client cliente1
 
# Generar clave TLS adicional
openvpn --genkey secret /etc/openvpn/ta.key
# /etc/openvpn/server.conf
port 1194
proto udp
dev tun
 
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/servidor.crt
key /etc/openvpn/pki/private/servidor.key
dh /etc/openvpn/pki/dh.pem
 
# tls-auth para proteccion adicional contra DoS
tls-auth /etc/openvpn/ta.key 0
# o tls-crypt (mas moderno, tambien cifra el canal de control)
# tls-crypt /etc/openvpn/ta.key
 
server 10.8.0.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"
 
keepalive 10 120
cipher AES-256-GCM
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3

Configuracion del Cliente

# /etc/openvpn/client.conf
client
dev tun
proto udp
remote vpn.ejemplo.com 1194
resolv-retry infinite
nobind
 
ca ca.crt
cert cliente1.crt
key cliente1.key
tls-auth ta.key 1
 
cipher AES-256-GCM
auth SHA256
verb 3

tls-auth vs tls-crypt

Caracteristicatls-authtls-crypt
Autenticacion HMACSiSi
Cifrado canal de controlNoSi
Proteccion DoSSiSi
Ocultacion de traficoNoSi
Parametro servidor0Sin direccion
Parametro cliente1Sin direccion

WireGuard

WireGuard es un protocolo VPN moderno, simple y de alto rendimiento integrado en el kernel Linux.

Generacion de Claves

# Generar par de claves
wg genkey | tee privatekey | wg pubkey > publickey
 
# Generar clave preshared (opcional, post-quantum)
wg genpsk > presharedkey
 
# Generar todo en una linea
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
chmod 600 /etc/wireguard/private.key

Configuracion del Servidor

# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = clave_privada_del_servidor
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
 
[Peer]
# Cliente 1
PublicKey = clave_publica_del_cliente1
PresharedKey = clave_preshared_opcional
AllowedIPs = 10.0.0.2/32

Configuracion del Cliente

# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = clave_privada_del_cliente
Address = 10.0.0.2/24
DNS = 192.168.1.1
 
[Peer]
PublicKey = clave_publica_del_servidor
PresharedKey = clave_preshared_opcional
Endpoint = vpn.ejemplo.com:51820
AllowedIPs = 0.0.0.0/0, ::/0     # Todo el trafico por VPN
PersistentKeepalive = 25          # Para NAT traversal

Comandos WireGuard

# Levantar interfaz
wg-quick up wg0
 
# Apagar interfaz
wg-quick down wg0
 
# Habilitar al inicio
systemctl enable wg-quick@wg0
 
# Ver estado
wg show
wg show wg0
 
# Configuracion manual (sin wg-quick)
ip link add wg0 type wireguard
wg setconf wg0 /etc/wireguard/wg0.conf
ip addr add 10.0.0.1/24 dev wg0
ip link set wg0 up
 
# Añadir peer dinamicamente
wg set wg0 peer CLAVE_PUBLICA allowed-ips 10.0.0.3/32

Para el examen: WireGuard usa UDP exclusivamente (por defecto puerto 51820). AllowedIPs funciona como tabla de enrutamiento Y ACL: define que IPs se enrutan por el tunel y que IPs se aceptan del peer.


Comparacion de Tecnologias VPN

CaracteristicaIPsecOpenVPNWireGuard
Capa3 (red)4 (transporte/TLS)3 (red, kernel)
ProtocoloUDP (500, 4500)TCP/UDP (1194)UDP (51820)
CifradoConfigurableTLS + cifrado simetricoChaCha20, Curve25519
CodigoGrande y complejoMedianoMuy pequeño (~4000 lineas)
RendimientoAltoMedio (userspace)Muy alto (kernel)
CompatibilidadAmplia (RFC)Necesita clienteCreciente
ConfiguracionComplejaMediaSimple
NAT traversalIKEv2 nativoNativo (UDP)Nativo
En kernel LinuxSi (XFRM)No (userspace)Si (desde 5.6)

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • IPsec tunnel vs transport mode — tunnel mode encapsula el paquete IP completo (se usa en VPN site-to-site); transport mode solo cifra el payload (se usa en host-to-host). Si la pregunta menciona “site-to-site”, la respuesta es tunnel. Si menciona “comunicacion directa entre dos hosts”, es transport
  • ESP vs AH — ESP proporciona cifrado + autenticacion; AH solo proporciona autenticacion (sin cifrado, obsoleto). En la practica moderna se usa siempre ESP. Si la pregunta pide confidencialidad, AH no es suficiente
  • IKEv1 vs IKEv2 — IKEv2 es mas eficiente (4 mensajes vs 6-9), tiene NAT traversal integrado y soporte MOBIKE para movilidad. IKEv1 es obsoleto. Si el examen pregunta por la version recomendada, siempre IKEv2
  • strongSwan: left vs rightleft es siempre el lado local; right es siempre el lado remoto. leftsubnet/rightsubnet definen las redes protegidas detras de cada endpoint. authby=secret usa PSK; authby=rsasig usa certificados X.509. Confundir left/right invierte la topologia completa
  • OpenVPN: tun vs taptun opera en capa 3 (IP, punto a punto, mas eficiente); tap opera en capa 2 (Ethernet, soporta broadcast, necesario para bridging). Si la pregunta menciona broadcast o bridging de redes, la respuesta es tap. Para routing normal, tun
  • OpenVPN: tls-auth vs tls-crypttls-auth añade autenticacion HMAC al canal de control (proteccion DoS); tls-crypt añade autenticacion Y cifrado del canal de control (proteccion DoS + ocultacion de trafico). tls-auth necesita parametro direccional (0 para servidor, 1 para cliente); tls-crypt no
  • WireGuard: AllowedIPs es routing + ACLAllowedIPs no solo define que IPs se enrutan por el tunel sino tambien que IPs se aceptan del peer. 0.0.0.0/0 enruta todo el trafico (full tunnel); un CIDR especifico solo enruta ese rango (split tunnel). Confundir su funcion dual es un error comun
  • WireGuard: solo UDP — WireGuard usa exclusivamente UDP (puerto por defecto 51820). No soporta TCP. Si un firewall bloquea UDP, WireGuard no funciona. OpenVPN puede usar TCP como alternativa en redes restrictivas
  • WireGuard: PersistentKeepalive — se configura en el peer del CLIENTE (no del servidor) para mantener el tunel abierto a traves de NAT. Sin el, el mapeo NAT puede expirar y el servidor no podra enviar paquetes al cliente. Valor tipico: 25 segundos
  • OpenVPN opera en userspace, WireGuard en kernel — OpenVPN corre como proceso de espacio de usuario (usa libssl); WireGuard esta integrado en el kernel Linux desde la version 5.6. Esto da a WireGuard mejor rendimiento y menor latencia. IPsec tambien opera en el kernel via framework XFRM