VPNSmith
tunneling-obfuscationINFO

Cloak: ofuscación TLS para VPN self-host en 2026

Cloak transforma tu WireGuard o Shadowsocks en un falso sitio HTTPS. Instalación Contabo, integración WG/SS, rendimiento, negación plausible, patrones de despliegue.

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

Divulgación de afiliados — Este artículo contiene enlaces de afiliación Contabo. Si contratas un VPS a través de nuestros enlaces, recibimos una comisión sin coste adicional para ti. Todas las configs están probadas en producción.

Cloak es una herramienta de ofuscación TLS que se coloca delante de un túnel existente (WireGuard, OpenVPN, Shadowsocks) y lo transforma en lo que parece exactamente un sitio HTTPS. Cuando un DPI inspecciona tu servidor, ve un handshake TLS 1.3 válido hacia un certificado Let's Encrypt y — aquí está el truco — si la sesión NO es un cliente Cloak válido, el servidor la redirige a un sitio web real (generalmente bing.com o wikipedia.org).

Cloak es por tanto una capa de ofuscación a añadir sobre un VPN ya funcional. Esa es su diferencia mayor con V2Ray (que es un protocolo VPN completo) o wstunnel (que es solo un túnel WebSocket simple). Cloak supone que ya tienes WireGuard o Shadowsocks funcionando y quieres hacerlos indetectables.

Esta guía cubre la instalación de Cloak en VPS Contabo, la integración con WireGuard y Shadowsocks, los benchmarks de rendimiento y los casos donde Cloak es la opción adecuada vs V2Ray REALITY o wstunnel.

Cómo funciona Cloak

El pitch técnico:

  1. El servidor Cloak escucha en el puerto 443 y ejecuta un falso servidor TLS 1.3 con cert Let's Encrypt (o autofirmado).
  2. Un cliente Cloak establece una conexión TLS estándar con un secreto compartido oculto en el ClientHello (extensión TLS).
  3. El servidor Cloak detecta el secreto, desenmascara al cliente, y establece un túnel hacia el backend configurado (WireGuard 127.0.0.1:51820, por ejemplo).
  4. Si una sesión NO es un cliente Cloak válido (sonda GFW, escáner aleatorio), el servidor hace un proxy transparente hacia RedirAddr (típicamente www.bing.com:443). El cliente ve la página real de Bing — sin error, sin 404, sin "weird response".

Desde el punto de vista de un DPI:

  • Tráfico TCP 443 hacia un dominio residencial = normal.
  • Certificado Let's Encrypt = legítimo.
  • Si se sondea: cae en un sitio real (Bing) → NO es un endpoint VPN.

Es conceptualmente cercano a REALITY (Xray-core), pero Cloak existe desde 2018 (REALITY desde 2023), y su diseño es más "defensivo": rechaza activamente responder como un endpoint VPN.

Instalación del servidor en Contabo

VPS Contabo VPS S (4,99 €/mes, ver oferta) bajo Ubuntu 24.04 LTS. Requisito: ya tienes un WireGuard o Shadowsocks funcionando en local (127.0.0.1:51820 o 127.0.0.1:8443).

Paso 1 — Obtener Cloak

CLOAK_VER="2.7.0"  # verificar la última en github.com/cbeuw/Cloak/releases
cd /tmp
wget "https://github.com/cbeuw/Cloak/releases/download/v${CLOAK_VER}/ck-server-linux-amd64-v${CLOAK_VER}"
wget "https://github.com/cbeuw/Cloak/releases/download/v${CLOAK_VER}/ck-client-linux-amd64-v${CLOAK_VER}"
chmod +x ck-server-* ck-client-*
mv ck-server-* /usr/local/bin/ck-server
mv ck-client-* /usr/local/bin/ck-client

Paso 2 — Generar un par de claves servidor

ck-server -k
# Public key: ...
# Private key: ...

Guarda ambas. La clave pública será embebida en la config cliente.

Paso 3 — Generar UIDs de usuarios

ck-server -u
# 7tCcGUcUyzM7tCcGUcUyzM=
# 9wEeIWeRtFE9wEeIWeRtFE=

Genera tantos UIDs como usuarios. Cada UID = un cliente. Si un UID se filtra, puedes revocarlo individualmente.

Paso 4 — Config servidor /etc/cloak/ckserver.json

{
  "ProxyBook": {
    "wireguard": ["udp", "127.0.0.1:51820"],
    "shadowsocks": ["tcp", "127.0.0.1:8443"]
  },
  "BindAddr": [":443"],
  "BypassUID": [
    "7tCcGUcUyzM7tCcGUcUyzM=",
    "9wEeIWeRtFE9wEeIWeRtFE="
  ],
  "RedirAddr": "www.bing.com",
  "PrivateKey": "TU_CLAVE_PRIVADA_GENERADA_POR_-k",
  "AdminUID": "UID-ADMIN-OPCIONAL=",
  "DatabasePath": "/var/lib/cloak/userinfo.db",
  "StreamTimeout": 300
}

Campos importantes:

  • ProxyBook: la lista de backends. Una sesión puede enrutar hacia wireguard o shadowsocks según lo que pida el cliente.
  • BindAddr: :443 para el puerto público.
  • BypassUID: UIDs que no tienen quota / restricciones (usuarios admin / power users).
  • RedirAddr: dónde redirigimos las sesiones inválidas. Crítico para el camuflaje — elige un sitio popular no en lista negra en la zona objetivo (bing.com, wikipedia.org, github.com son OK casi en todas partes).
  • PrivateKey: la clave servidor (generada en paso 2).

Paso 5 — Servicio systemd

/etc/systemd/system/cloak.service:

[Unit]
Description=Cloak server
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ck-server -c /etc/cloak/ckserver.json
Restart=always
RestartSec=5
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now cloak
journalctl -u cloak -f

En este punto tu VPS responde en :443:

  • A clientes Cloak válidos → túnel hacia WireGuard o Shadowsocks local.
  • A todo lo demás (curl, escáneres, sondas GFW) → devuelve el contenido de www.bing.com.

Prueba desde fuera: curl -L https://tu-ip debe mostrar el HTML de Bing. Sin mención de Cloak. Sin errores. Es el camuflaje perfecto.

Configuración del cliente: Linux, Windows, Android

El cliente Cloak (ck-client) toma una config JSON similar al servidor.

Cliente Linux ~/cloak/ckclient.json:

{
  "Transport": "direct",
  "ProxyMethod": "wireguard",
  "EncryptionMethod": "aes-gcm",
  "UID": "7tCcGUcUyzM7tCcGUcUyzM=",
  "PublicKey": "CLAVE_PUBLICA_SERVIDOR",
  "ServerName": "www.microsoft.com",
  "NumConn": 4,
  "BrowserSig": "chrome",
  "StreamTimeout": 300,
  "RemoteHost": "tu-ip-o-dominio",
  "RemotePort": 443,
  "LocalHost": "127.0.0.1",
  "LocalPort": 51820
}

Campos importantes:

  • ProxyMethod: debe coincidir con un nombre de ProxyBook del lado servidor (wireguard aquí).
  • UID: el UID dado por el admin (el tuyo en BypassUID).
  • PublicKey: la clave pública del servidor.
  • ServerName: el SNI que el cliente envía al TLS handshake. Debe parecer un sitio realista (Microsoft, Cloudflare, etc.).
  • NumConn: 4 conexiones paralelas para saturar el ancho de banda (recomendado).
  • BrowserSig: firma TLS a imitar (chrome o firefox). Evita safari que tiene una firma distinta.
  • LocalPort: puerto local al que WireGuard apuntará su Endpoint.

Lanza:

ck-client -c ~/cloak/ckclient.json &

Después monta WireGuard con Endpoint = 127.0.0.1:51820 en lugar de la IP pública:

[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = 127.0.0.1:51820

Windows: ck-client.exe desde la página de releases. Tarea programada para arranque automático. App WireGuard oficial apuntando a 127.0.0.1:51820.

Android: ck-client-android-arm64 existe en la página de releases, pero sin UI nativa. La vía pragmática: usar OpenVPN for Android que soporta plugins, o wireguard-android + Termux para lanzar ck-client en background. Más complejo que V2Ray (que tiene v2rayNG nativo). Si mobile-first es importante, mira mejor V2Ray + VLess REALITY.

Rendimiento medido

Benchmarks reales, VPS Contabo S Núremberg, cliente residencial fibra Madrid 1 Gbps, mediana 10 sesiones, abril 2026.

SetupLatencia añadidaThroughput TCPCPU @ 100 Mbps
WireGuard puroreferencia (+6 ms)195 Mbps4%
WireGuard + Cloak (TLS directo)+12 ms130 Mbps12%
WireGuard + Cloak (TLS + WS)+18 ms100 Mbps16%
WireGuard + Cloak via Cloudflare+25 ms80 Mbps16%

Cloak en modo TLS directo (sin WebSocket adicional) es más rápido que WS+TLS — coherente, hay menos overhead protocolar.

Vs V2Ray + VLess REALITY (otro enfoque de cert prestado): Cloak es ligeramente menos eficiente (130 Mbps vs 155 Mbps), porque REALITY usa XTLS Vision (single-encryption optimizado) mientras Cloak hace TLS estándar. La diferencia es modesta en la práctica.

Casos de uso donde Cloak destaca

1. Ya tienes WireGuard self-host y quieres solo añadir una capa de ofuscación. Migración en 30 minutos, sin reescritura de config WireGuard. Arrancas ck-server, añades Endpoint = 127.0.0.1:51820 lado cliente, y listo.

2. Multi-usuarios con revocación por UID. Si alojas para 5 amigos o colegas, cada UID es independiente — revocar un usuario = quitar su UID de BypassUID, el túnel cesa.

3. Irán, Turquía, EAU, Rusia. Cloak pasa muy bien en estos DPIs. Los usuarios locales confirman conexiones estables durante semanas. Para China continental, mira mejor Xray-core + REALITY (nuestra guía V2Ray).

4. Camuflaje defensivo contra la inspección del servidor. Si alguien (admin ISP, autoridad) escanea tu VPS y hace curl https://tu-ip, ve Bing — no un endpoint VPN sospechoso. Útil para negación plausible, aunque no absoluto.

Casos donde Cloak no es la mejor opción

1. Quieres un setup mobile-first. El ecosistema cliente móvil Cloak es débil (sin equivalente v2rayNG). Para móvil, V2Ray + VLess con v2rayNG o Shadowrocket es bastante más simple.

2. Despliegas para 50+ usuarios con quotas por user. Cloak gestiona los UIDs y tiene un sistema básico de quotas, pero V2Ray tiene un ecosistema más maduro (API admin, dashboards como x-ui).

3. Tu objetivo específico es China continental, en 2026. El GFW hizo progresos contra Cloak en 2024-2025. REALITY (Xray-core) es más robusto hoy. Cloak sigue OK pero no el top.

4. Quieres cambiar de protocolo a menudo (SS un día, WG al siguiente, OpenVPN después). Cloak puede enrutar a varios backends, pero V2Ray/Xray gestiona eso más elegantemente en una sola config.

Endurecimiento

1. UIDs aleatorios fuertes. Siempre usar ck-server -u (generador oficial) — sin UIDs hechos a mano. Si no, sesgo de entropía que puede ser detectado.

2. Cert Let's Encrypt real. En lugar del cert autofirmado por defecto, configura Cloak para usar un cert Let's Encrypt via acme.sh:

acme.sh --issue -d cdn.tudominio.com --standalone --httpport 8080
acme.sh --install-cert -d cdn.tudominio.com \
  --key-file /etc/cloak/server.key \
  --fullchain-file /etc/cloak/server.crt \
  --reloadcmd "systemctl reload cloak"

Luego en ckserver.json, configura el path de los certs via las opciones TLS (ver doc Cloak).

3. fail2ban en logs Cloak. Las sesiones inválidas aparecen en journalctl -u cloak. Crea un filtro fail2ban que banee tras 20 intentos inválidos en 60s.

4. Rotar UIDs trimestralmente. Cada 3 meses, rota los UIDs de los usuarios. Complica la vida de un atacante que hubiera exfiltrado una config un día.

5. Sin logs de conexión persistentes. Mantén loglevel: warning en Cloak. Si estás en jurisdicción sensible, monta /var/log/cloak en RAM disk (tmpfs).

Cloak vs alternativas

CriterioCloakV2Ray + VLess REALITYwstunnelShadowsocks + v2ray-plugin
Tiempo setup30 min1-2 h10 min20 min
Multi-protocolo backendSí (WG, SS, OpenVPN)LimitadoNoNo
Multi-user UID/quotasSí básicoSí completoNoLimitado
Camuflaje activo (sonda → sitio real)ExcelenteExcelenteDébilDébil
Bypass GFW China 2026MedioExcelenteDébilMedio
Bypass Irán/Rusia/CorpExcelenteExcelenteBuenoExcelente
Mantenimiento proyectoLentoMuy activoActivoActivo
Ecosistema móvilDébilExcelenteMedioBueno

Elección pragmática:

  • Cloak si ya tienes WG/SS y quieres camuflaje rápido.
  • V2Ray + REALITY si despliegas desde cero, foco China, mobile-first.
  • wstunnel si solo bypass corporativo sin DPI sofisticado.

Cuándo una VPN comercial ofuscada es más simple

Para usuarios no-técnicos que viajan puntualmente a Asia o Oriente Medio, montar Cloak + WireGuard + cert + DNS es demasiado. Una VPN comercial con ofuscación integrada es más rentable en tiempo.

Nuestra referencia cross-sell: NordVPN con sus "obfuscated servers" (OpenVPN ofuscado, y NordWhisper). 2 clicks en la app, sin VPS que gestionar. Bueno en Irán/Turquía/EAU, OK en China el 70% del tiempo.

El enfoque combinado que muchos de nuestros lectores usan: Cloak + WireGuard self-host para vida diaria, NordVPN como backup para viajes de riesgo. ~10 €/mes total, robusto, y nunca te quedas bloqueado.

Troubleshooting frecuente

Síntoma: curl https://tu-ip NO devuelve Bing sino un error o un certificado inválido. Cloak usa un cert autofirmado por defecto — es normal que un browser o curl estricto lo rechace. Configura un cert Let's Encrypt para resolver.

Síntoma: cliente Cloak se conecta pero ningún tráfico pasa. El ProxyMethod del cliente no coincide con ningún ProxyBook del servidor. Verifica que "wireguard" esté bien definido en el ProxyBook servidor.

Síntoma: rendimiento mediocre, 30 Mbps max. NumConn demasiado bajo en el cliente (prueba 8 en lugar de 4), o servidor saturado de CPU (verificar htop). Cloudflare proxy activo también puede hacer throttle.

Síntoma: conexiones intermitentes en China. El GFW sondea activamente los certs autofirmados. Pasa a cert Let's Encrypt real, y cambia el ServerName del cliente (usa un dominio popular en lista blanca).

Para profundizar

Fuentes técnicas:


Artículo publicado el 2026-06-03. Benchmarks realizados sobre VPS Contabo VPS S Núremberg + cliente residencial fibra Madrid, marzo-abril 2026. Las técnicas anti-DPI evolucionan constantemente — siempre contrastar con fuentes locales antes de despliegue crítico.

Recordatorio legal: Cloak es una herramienta open source legal en la UE, EE.UU., Canadá y la mayoría de países. Uso anti-censura en China, Irán, Rusia, EAU ilegal localmente, sanciones variables. VPNSmith publica esta guía con fines educativos.

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

Probar Contabo30 jours satisfait ou remboursé