Conectar la sonda al CMS por WireGuard
La sonda que detecta los bloqueos de Cloudflare tiene que poder hablar con tu MuseDock CMS justo cuando Cloudflare falla. Si la sonda llega a tu CMS a través de internet y la IP de Cloudflare de tu propio CMS está bloqueada, la sonda no podría avisar. La forma recomendada de evitarlo es unir la sonda y el servidor del CMS con una VPN privada WireGuard. Esta guía explica cómo hacerlo paso a paso.
Por qué WireGuard
- No depende de Cloudflare: la sonda llega a tu servidor por su IP real, por un túnel cifrado.
- Es privado: las llamadas de la sonda (lista de IPs e informes) no pasan por internet en claro.
- Funciona aunque la sonda esté detrás de un router (oficina, casa, NAT): es la sonda quien abre el túnel.
- Es ligero: viene en el núcleo de Linux y apenas consume recursos.
Antes de empezar
- Acceso root al servidor del CMS y a la máquina de la sonda (Debian o Ubuntu en los ejemplos).
- La IP pública real del servidor del CMS. No la de Cloudflare: la del servidor. La ves con
curl -4 https://api.ipify.orgdesde el propio servidor. - Un puerto UDP libre en el servidor del CMS (en los ejemplos,
51820). - Una red privada que no uses ya. En los ejemplos:
10.66.0.0/24, con el servidor en10.66.0.1y la sonda en10.66.0.2.
Si tus servidores ya están unidos por WireGuard (por ejemplo, en un clúster), no hace falta otra VPN: añade la sonda a la que ya tienes y usa la IP privada del servidor del CMS.
1. Instalar WireGuard en los dos equipos
apt install wireguard
2. Crear las claves
En cada equipo, crea su par de claves. La privada no sale nunca de esa máquina; solo se intercambian las públicas.
umask 077
wg genkey | tee /etc/wireguard/privada.key | wg pubkey > /etc/wireguard/publica.key
cat /etc/wireguard/publica.key # esta es la que le pasas al otro equipo
3. Configurar el servidor del CMS
Crea /etc/wireguard/wg0.conf:
[Interface]
Address = 10.66.0.1/24
ListenPort = 51820
PrivateKey = (contenido de /etc/wireguard/privada.key del servidor)
[Peer]
# La sonda
PublicKey = (clave pública de la sonda)
AllowedIPs = 10.66.0.2/32
Abre el puerto UDP en el cortafuegos del servidor. Si puedes, ábrelo solo a la IP pública de la sonda:
ufw allow 51820/udp
# o, solo para la sonda: ufw allow from IP_PUBLICA_SONDA to any port 51820 proto udp
4. Configurar la sonda
Crea /etc/wireguard/wg0.conf en la máquina de la sonda:
[Interface]
Address = 10.66.0.2/24
PrivateKey = (contenido de /etc/wireguard/privada.key de la sonda)
[Peer]
# El servidor del CMS
PublicKey = (clave pública del servidor)
Endpoint = IP_PUBLICA_REAL_DEL_SERVIDOR:51820
AllowedIPs = 10.66.0.1/32
PersistentKeepalive = 25
AllowedIPs debe ser solo la IP privada del servidor (10.66.0.1/32). Nunca pongas 0.0.0.0/0: todo el tráfico de la sonda saldría por el servidor (que puede estar en otro país) y la sonda dejaría de ver los bloqueos de tus operadoras.5. Arrancar y comprobar
En los dos equipos:
systemctl enable --now wg-quick@wg0
wg show
Desde la sonda, comprueba que llegas al servidor por la VPN:
ping -c 3 10.66.0.1
curl -s -o /dev/null -w "%{http_code}\n" --resolve tu-cms.example:443:10.66.0.1 https://tu-cms.example/api/v1/edge-guard/targets
Si el último comando responde 401, todo va bien: has llegado a la API del CMS por la VPN y solo falta el token. Si responde 000, el servidor web no escucha en la IP de la VPN o el cortafuegos la bloquea: revisa que tu servidor web (Caddy, Nginx…) escuche en todas las interfaces y que el cortafuegos permita el puerto 443 desde 10.66.0.0/24.
6. Decirle a la sonda que use la VPN
En /etc/musedock-edge-probe.conf añade la IP privada del servidor:
URL=https://tu-cms.example
TOKEN_FILE=/etc/musedock-edge-probe.token
RESOLVE=10.66.0.1
La sonda seguirá usando el nombre de tu CMS (así el certificado es válido), pero conectará por la VPN. Pruébalo con:
python3 -I /usr/local/bin/musedock-edge-probe.py -v
Al final debe decir «Informe entregado al CMS». Las pruebas de las IPs de Cloudflare siguen saliendo por tus operadoras (las interfaces de PATHS), no por la VPN.
Solución de problemas
| Síntoma | Causa probable y solución |
|---|---|
wg show no muestra «latest handshake» | El túnel no se ha establecido. Revisa que Endpoint sea la IP real del servidor (no la de Cloudflare), que el puerto UDP esté abierto y que las claves públicas estén cruzadas (cada equipo lleva la del otro). |
ping 10.66.0.1 no responde | Revisa AllowedIPs en los dos lados y que la red privada no choque con otra que ya uses. |
El curl a la API da 000 | El servidor web no escucha en la IP de la VPN, o el cortafuegos bloquea el 443 en la interfaz wg0. |
| La sonda dice «HTTP 401» | El túnel funciona; el token es incorrecto o se revocó. Crea la sonda de nuevo en Ajustes → Bloqueos Cloudflare. |
| La sonda ya no detecta bloqueos | Probablemente AllowedIPs de la sonda es 0.0.0.0/0 y todo sale por el servidor. Déjalo solo en la IP privada del servidor. |
Preguntas frecuentes
¿Es obligatorio usar WireGuard?
No. La sonda funciona por internet sin RESOLVE. Pero si la IP de Cloudflare de tu propio CMS queda bloqueada, la sonda no podrá entregar sus informes justo cuando más falta hace. Con WireGuard ese riesgo desaparece.
¿Puedo usar otra VPN?
Sí. Vale cualquier VPN o red privada que permita a la sonda llegar al servidor del CMS por una IP privada: RESOLVE solo necesita esa IP.
¿Varias sondas?
Añade un bloque [Peer] por sonda en el servidor, cada una con su IP (10.66.0.3/32, 10.66.0.4/32…), y crea un token distinto para cada una en el CMS.