WireGuard es la forma más rápida y sencilla de construir un túnel cifrado entre dos servidores — una VPN sitio a sitio para tráfico privado entre sus nodos de origen y de borde, replicación de bases de datos o una red de gestión. Esta guía conecta dos servidores Hostfory (o una máquina Hostfory y su oficina) con un túnel WireGuard persistente.

Requisitos previos

  • Dos servidores Linux con acceso root e IPs públicas (llámelos Servidor A y Servidor B)
  • Ubuntu 22.04 (WireGuard está en el kernel desde la versión 5.6)
  • Un puerto UDP abierto entre ellos (por defecto 51820)

Paso 1 — Instalar WireGuard en ambos servidores

apt update
apt install -y wireguard

Paso 2 — Generar claves en ambos servidores

En cada servidor, genere un par de claves privada/pública:

cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey publickey

Anote la clave pública de cada servidor — las cruzará. Mantenga las claves privadas en secreto.

Paso 3 — Configurar el Servidor A

Cree /etc/wireguard/wg0.conf en el Servidor A:

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_A_PRIVATE_KEY>

[Peer]
# Server B
PublicKey = <SERVER_B_PUBLIC_KEY>
Endpoint = <SERVER_B_PUBLIC_IP>:51820
AllowedIPs = 10.10.0.2/32
PersistentKeepalive = 25

10.10.0.1/24 es la IP privada del túnel para el Servidor A. AllowedIPs indica "enrutar el tráfico para 10.10.0.2 a través de este par."

Paso 4 — Configurar el Servidor B

Cree /etc/wireguard/wg0.conf en el Servidor B (imagen espejo):

[Interface]
Address = 10.10.0.2/24
ListenPort = 51820
PrivateKey = <SERVER_B_PRIVATE_KEY>

[Peer]
# Server A
PublicKey = <SERVER_A_PUBLIC_KEY>
Endpoint = <SERVER_A_PUBLIC_IP>:51820
AllowedIPs = 10.10.0.1/32
PersistentKeepalive = 25

PersistentKeepalive = 25 mantiene el túnel activo a través de NAT/firewalls enviando un keepalive cada 25 segundos — importante si cualquiera de los lados está detrás de NAT.

Paso 5 — Abrir el firewall

En ambos servidores, permita el puerto UDP de WireGuard:

ufw allow 51820/udp

Paso 6 — Levantar el túnel

En ambos servidores:

wg-quick up wg0
# Enable on boot
systemctl enable wg-quick@wg0

Paso 7 — Probar la conectividad

Desde el Servidor A, haga ping a la IP del túnel del Servidor B:

ping 10.10.0.2

Y verifique el estado del túnel:

wg show

Debería ver un handshake reciente (latest handshake: X seconds ago) y los contadores de tráfico aumentando. Si el handshake nunca ocurre, el puerto UDP no está llegando al par — verifique los firewalls en ambos extremos y cualquier ACL de red upstream.

Paso 8 — Enrutar una subred completa (opcional)

Para enrutar todo el tráfico de una subred (por ejemplo, la red privada del Servidor B 192.168.50.0/24) a través del túnel, expanda AllowedIPs en el bloque de pares del Servidor A:

AllowedIPs = 10.10.0.2/32, 192.168.50.0/24

Y habilite el reenvío de IP en el Servidor B:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Agregue una regla NAT en el Servidor B para que el tráfico de retorno encuentre su camino de vuelta:

iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE

Casos de uso comunes en la infraestructura de Hostfory

  • Enlace privado origen ↔ borde: mantenga oculta la IP real de su origen de streaming; los bordes extraen a través del túnel, solo las IPs de borde son públicas.
  • Replicación de bases de datos: ejecute la replicación de Postgres/MySQL sobre el túnel cifrado en lugar de exponer el puerto de la base de datos públicamente.
  • Red de gestión: SSH, monitorización (scraping de Prometheus) y copias de seguridad sobre 10.10.0.0/24 — nunca sobre la interfaz pública.
  • Malla Multi-PoP: conecte nuestros cuatro PoPs (Ámsterdam, Kiev, Varsovia, Miami) en una malla WireGuard para tráfico privado entre PoPs.

Solución de problemas

Handshake pero sin ping: Desajuste de AllowedIPs. Cada par debe listar la IP del túnel del otro. Un error común es 0.0.0.0/0 en ambos lados, lo que crea un bucle de enrutamiento.

El túnel se cae después de un tiempo: agregue o reduzca PersistentKeepalive. Las tablas NAT agotan el tiempo de espera de los flujos UDP; el keepalive lo evita.

Funciona hasta el reinicio: olvidó systemctl enable wg-quick@wg0.

Próximos pasos

Para una configuración de gestión reforzada, restrinja SSH para que solo escuche en la IP del túnel (ListenAddress 10.10.0.1 en sshd_config) para que la interfaz pública nunca exponga SSH. Combine con Fail2ban para una defensa en profundidad.