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 wireguardPaso 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 publickeyAnote 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 = 2510.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 = 25PersistentKeepalive = 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/udpPaso 6 — Levantar el túnel
En ambos servidores:
wg-quick up wg0
# Enable on boot
systemctl enable wg-quick@wg0Paso 7 — Probar la conectividad
Desde el Servidor A, haga ping a la IP del túnel del Servidor B:
ping 10.10.0.2Y verifique el estado del túnel:
wg showDeberí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/24Y habilite el reenvío de IP en el Servidor B:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -pAgregue 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 MASQUERADECasos 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.