VPNSmith
self-host-vpnINFO

Configuración VPN Contabo VPS paso a paso (Ubuntu 22.04) — Guía 2026

Tutorial completo: contratar Contabo VPS S, endurecer SSH + UFW, instalar WireGuard, generar peers, probar fugas. 20 minutos, scripts incluidos.

Por Eric Gerard · Fondateur · VPNSmith — Spécialiste self-host VPN & VPS GDPR6 min de lecturaFoto vía Unsplash

Quieres un VPN que sea tuyo. Sin auditoría "no-logs" anual, sin IP compartida con 4.000 desconocidos, sin precio que se duplica al acabar la promo. Esta guía monta WireGuard en un VPS Contabo en 20 minutos cronometrados, desde el registro hasta el primer curl ifconfig.me que devuelve la IP de tu VPS alemán.

Usamos esta misma config en producción desde hace 14 meses. Cero incidente de túnel no planificado, ~200 Mbps estables, ~24 ms de latencia París ↔ Núremberg.

Paso 1 — Contratar el VPS Contabo

Ve a contabo.com vía nuestro enlace /go/contabo y elige:

  • Plan: VPS S Cloud (4 vCPU AMD EPYC, 8 GB RAM, 50 GB NVMe, 200 Mbps garantizados, 32 TB/mes tráfico)
  • Compromiso: 24 meses (bloquea el precio en 4,99 €/mes, mensual 8,49 €)
  • OS: Ubuntu 22.04 LTS (24.04 también funciona, pero 22.04 sigue siendo más estable para paquetes WireGuard)
  • Datacenter: Núremberg (DE) — mejor latencia Francia/Europa + jurisdicción Alemania GDPR
  • Contraseña root: genera una fuerte, guarda temporal en password manager (la borras tras crear usuario no-root)
  • Add-ons: desmarca todo (backups Contabo no necesarios, hacemos los nuestros)

Total upfront ~119 € sobre 24 meses. Al activarse recibes email con IP pública y contraseña root. Calcula 5 minutos a 4 horas según hora. Las horas punta (18h-22h CET, martes/miércoles) son las más lentas.

Disclosure: /go/contabo es un enlace patrocinado. Si contratas el VPS, ganamos una comisión sin coste para ti. Nuestro tarifa no se ve afectada. No escribiríamos esta guía si no usáramos Contabo nosotros.

Paso 2 — Primer SSH y endurecimiento

En tu terminal local:

ssh root@TU.IP.PUBLICA
# Aceptar fingerprint, pegar contraseña root

Una vez conectado, actualizar primero:

apt update && apt upgrade -y
apt install -y curl wget unzip fail2ban

Crear usuario no-root (root SSH va a ser desactivado):

adduser eric
# Seguir prompts (contraseña fuerte, nombre completo opcional)
usermod -aG sudo eric

Copiar tu clave SSH pública desde tu MacBook local (en otro terminal):

ssh-copy-id eric@TU.IP.PUBLICA
# Si ssh-copy-id no existe: cat ~/.ssh/id_ed25519.pub | ssh root@IP "mkdir -p /home/eric/.ssh && cat >> /home/eric/.ssh/authorized_keys && chown -R eric:eric /home/eric/.ssh && chmod 700 /home/eric/.ssh && chmod 600 /home/eric/.ssh/authorized_keys"

Probar conexión no-root en nuevo terminal sin cerrar el primero:

ssh eric@TU.IP.PUBLICA
# Debes entrar solo con passphrase de tu clave SSH

Si funciona, desactiva SSH root y auth password en /etc/ssh/sshd_config (desde shell root):

sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd

A este punto el puerto 22 sigue accesible pero solo vía clave SSH y solo para eric. No más riesgo de brute-force root.

Paso 3 — Firewall UFW

# Aún como root
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 51820/udp comment 'WireGuard'
ufw enable
# Responder y
ufw status verbose

UFW activo. Puedes desconectarte de la sesión root y seguir desde eric con sudo.

Paso 4 — Instalar WireGuard

# Conectado como eric con sudo
sudo apt install -y wireguard qrencode iptables-persistent

Generar claves servidor:

sudo bash -c 'umask 077 && wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub'
sudo cat /etc/wireguard/server.pub
# Anota la pubkey, la necesitarás para clientes

Identificar la interfaz pública (puede ser eth0, ens3, ens18):

ip route | awk '/default/ {print $5}'
# En Contabo suele ser eth0 o ens18

Paso 5 — Configurar /etc/wireguard/wg0.conf

Edita (ajusta eth0 si difiere arriba):

sudo nano /etc/wireguard/wg0.conf

Pega esto (reemplazando SERVER_PRIVATE_KEY por el contenido de /etc/wireguard/server.key):

[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.66.66.1/24
ListenPort = 51820
MTU = 1420

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

Activar ip_forward:

sudo bash -c 'echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf'
sudo sysctl -p
# Verificar: sysctl net.ipv4.ip_forward (debe decir 1)

Arrancar WireGuard:

sudo systemctl enable --now wg-quick@wg0
sudo wg show
# Debes ver interfaz wg0, public key, listening port

Paso 6 — Crear el primer peer (cliente)

En el servidor, genera clave cliente:

sudo mkdir -p /etc/wireguard/clients
sudo bash -c 'umask 077 && wg genkey | tee /etc/wireguard/clients/mac.key | wg pubkey > /etc/wireguard/clients/mac.pub'
sudo cat /etc/wireguard/clients/mac.pub
# Anota esta pubkey

Añadir el peer en wg0.conf servidor:

sudo bash -c 'cat >> /etc/wireguard/wg0.conf <<EOF

[Peer]
# MacBook
PublicKey = CLIENT_MAC_PUBKEY
AllowedIPs = 10.66.66.2/32
EOF'

Recargar sin parar:

sudo wg syncconf wg0 <(wg-quick strip wg0)

Generar el fichero cliente (transferir de forma segura al MacBook/iPhone):

sudo bash -c 'cat > /etc/wireguard/clients/mac.conf <<EOF
[Interface]
PrivateKey = $(cat /etc/wireguard/clients/mac.key)
Address = 10.66.66.2/24
DNS = 9.9.9.9, 149.112.112.112
MTU = 1420

[Peer]
PublicKey = $(cat /etc/wireguard/server.pub)
Endpoint = TU.IP.PUBLICA:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF'

Para iPhone / Android, codifica en QR:

sudo qrencode -t ansiutf8 < /etc/wireguard/clients/mac.conf

Escaneas el QR desde la app WireGuard (App Store, Play Store) y el túnel queda configurado.

Para macOS / Linux desktop, descarga el .conf localmente:

# En tu Mac
scp eric@TU.IP.PUBLICA:/etc/wireguard/clients/mac.conf ~/Downloads/
# Luego Import desde la app WireGuard oficial

Paso 7 — Probar contra fugas

Activa el túnel en cliente, luego en navegador:

  1. ipleak.net: tu IP pública debe ser la del VPS Contabo Núremberg. Geo = Alemania. Si ves tu IP original → el túnel no enruta, verifica AllowedIPs cliente.
  2. dnsleaktest.com → botón "Extended test": los DNS devueltos deben ser Quad9 (9.9.9.9) o los del VPS. Si ves DNS de tu ISP → DNS leak, verifica DNS = 9.9.9.9 en .conf cliente.
  3. browserleaks.com/webrtc: ninguna IP local debe filtrarse vía WebRTC. Si fuga → desactiva WebRTC en navegador (uBlock Origin → opción "Prevent WebRTC from leaking").
  4. curl ifconfig.me desde terminal cliente: debe devolver IP del VPS.

Si todo verde: tu VPN self-host funciona. Bienvenido.

Paso 8 — Backups y mantenimiento

El túnel funciona. Algunos buenos hábitos:

Coste total en 5 años

Para comparar honestamente con un servicio VPN comercial:

OpciónCoste 24 mesesCoste 5 años (extrapolado)Ancho de banda
Contabo VPS S Cloud (self-host)119 €~298 €200 Mbps, 32 TB/mes
NordVPN 2 años + renovación anual72 €~600 €"Ilimitado" compartido
ExpressVPN 1 año + renovación100 €~750 €"Ilimitado" compartido

Y en el VPS Contabo puedes además alojar: Pi-hole DNS, Nextcloud, Vaultwarden, bot Discord, Mastodon personal. El VPN solo usa ~1% de CPU y RAM en uso personal normal.

Veredicto tras 14 meses en prod

WireGuard sobre Contabo VPS S a 4,99 €/mes sigue siendo nuestra opción #1 para VPN self-host. Setup en 20 min, ~200 Mbps estables, ~24 ms latencia desde París, jurisdicción Alemania GDPR. La única pega real: soporte solo por email (respuesta 3-6 h media), no ideal en avería urgente.

Para arrancar: Contabo VPS S Cloud vía nuestro enlace /go/contabo. Puedes cancelar en los primeros 30 días si la config no encaja (verificado en cuenta de prueba).

Nuestra reseña completa de Contabo VPS detalla fortalezas y debilidades en 5 categorías (perf, precio, RAM/CPU, soporte, dashboard) con desglose de score.

★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis

Probar Contabo30 jours satisfait ou remboursé