~/arena-tunnel

WireGuard sobre WebSocket. Un binario Go. Ingreso público gratuito a través de cualquier CDN — sin arrendar VPS, sin Cloudflare Spectrum, sin dependencia de terceros.

Build Release Licencia Go Report
Entrar a ARENA Ver guía Descargar Última Versión

Por qué existe

WireGuard usa UDP. La mayoría de los CDN gratuitos (Cloudflare Free, Fastly, Bunny) solo hacen proxy de HTTP/WS. Las alternativas costosas —Cloudflare Spectrum, un relay UDP en Hetzner, los servidores DERP de Tailscale— implican pago mensual o dependencia de un proveedor.

arena-tunnel lo resuelve encapsulando cada datagrama UDP de WireGuard dentro de un frame binario de WebSocket. El servidor desempaqueta los frames en paquetes UDP y los entrega a una interfaz WireGuard local. El CDN ve lo que parece una sesión WSS de larga duración — tráfico perfectamente normal para un chat o un servicio de notificaciones.

Resultado: un túnel estable, cifrado y traversal de NAT que cuesta $0/mes, que sobrevive redes hostiles (proxies corporativos, portales cautivos, CGNAT). Latencia adicional: ~80–150 ms en el tramo CDN desde la mayor parte de LATAM.

Cómo funciona

   Lado cliente                     CDN público                        Lado servidor
─────────────────────         ────────────────────────         ──────────────────────────
arena-byoc                                                     arena-tunnel-server
   ├─ wireguard-go (TUN)                                            ↑
   └─ WSS dialer ──► wss://tu-host/... ──► cloudflared ──►          │  WS upgrade
                         (free tier)                                ▼
                                                              Interfaz WireGuard kernel
                                                                    │
                                                                    ▼
                                                              MASQUERADE / ruteo
                                                                    │
                                                                    ▼
                                                              Tu red interna

Protocolo de transporte: un frame binario WS ↔ un datagrama UDP. Sin framing adicional. Nada que reverse-engineerear. ~50 líneas de glue en cada dirección. Leer ARCHITECTURE.md completo →

$0/mes

Sin VPS, sin Spectrum, sin suscripción a Tailscale. El free tier de Cloudflare carga todo el tráfico.

Un solo binario estático

~6 MB por plataforma. Sin instalador, sin runtime, sin archivo de configuración.

Cifrado extremo a extremo

WireGuard ChaCha20-Poly1305 por dentro. TLS 1.3 por fuera. El CDN solo ve frames WSS opacos.

Funciona en redes hostiles

WiFi de hotel, proxies corporativos, portales cautivos. WSS:443 pasa donde UDP no puede.

Credenciales por usuario

El plano de control embebe las claves WG en el binario de cada usuario vía -ldflags. Sin pegar claves manualmente.

AGPL-3.0

Los forks deben quedar abiertos. Estándar para infraestructura de seguridad.

Guía para estudiantes

Tú traes tu propio C2. ARENA te presta un redirector y este túnel para que tu team server nunca toque la internet pública — el escenario solo ve el redirector. Aquí está el camino completo, desde la cuenta hasta el primer beacon.

1 · Iniciar sesión en ARENA

Entra en arena.adversario.cl con tu cuenta. Abre la pestaña Weapons.

2 · Descargar tu cliente

La pestaña Weapons te entrega una descarga por OS — el mismo binario que aparece en Descargar. Sin compilar. Elige tu plataforma y guárdalo.

3 · Vincular el túnel

Ejecuta el binario como root / Administrador (crea un dispositivo TUN — el mismo requisito que WireGuard o Tailscale). Abre tu navegador; autoriza como tu usuario de ARENA. Las claves se gestionan server-side — nunca pegas una clave privada.

# Linux / macOS — renombrar a arena-byoc para mayor comodidad en la shell
chmod +x arena-tunnel-client-linux-amd64
sudo mv arena-tunnel-client-linux-amd64 /usr/local/bin/arena-byoc

# Ejecutar una vez — vincula en el primer arranque, luego levanta el túnel
sudo arena-byoc

# → abre https://arena.adversario.cl/byoc2/connect?code=XXXXXX
# → autorizas en el navegador
# → la interfaz "arena-byoc" sube (10.201.x.x)
# → ruta 10.128.0.0/9 (todas las VMs del escenario) instalada automáticamente
# → el banner de conexión muestra: IP del túnel · IP edge · listener · SNI · cookie de atribución

arena-byoc status              # identidad + estado del túnel
sudo arena-byoc logout         # detener túnel + revocar dispositivo server-side
sudo arena-byoc pair --force   # forzar re-vinculación (nuevo dispositivo o peer revocado)

¿SSH / sin navegador? Agrega --no-browser — el código y la URL se imprimen en stdout, ábrela desde cualquier dispositivo con navegador.

Windows: descomprime y ejecuta el .exe como Administrador (incluye wintun.dll). El paso de vinculación en el navegador es idéntico.

4 · Apuntar tu C2 al redirector

Levanta tu team server — Adaptix (compilado desde upstream), Cobalt Strike, lo que uses. El panel de Bring-Your-Own muestra tu redirector host, puerto de listener y la cookie de atribución __arena_tenant. Configura tu listener HTTP / malleable profile para:

5 · Soltar un payload y jugar

Genera tu payload y ejecútalo en un host del escenario. Los beacons viajan:

host del escenario  →  redirector  →  arena-tunnel  →  tu TeamServer

Tu team server permanece privado durante todo el ejercicio.

6 · Ver el puntaje

La página de Estado muestra la accesibilidad del redirector y tus beacons recientes. Mientras tanto, el motor OPSEC de ARENA evalúa tu tradecraft — movimientos ruidosos (Kerberoasting, DCSync, sweeps de SharpHound, egreso C2 masivo) cuestan puntos. Mantén el ruido bajo.

Avanzado — auto-hospedaje / manual

¿No estás en ARENA o prefieres usar tu propio endpoint? El mismo binario se vincula con cualquier servidor WireGuard detrás de un CDN que haga proxy de WS, usando flags explícitos en lugar del flujo de navegador.

Servidor (tu red)

Ejecútalo junto a un servidor WireGuard en el mismo host. Expón el puerto HTTP a través de Cloudflare Tunnel (o cualquier CDN que haga proxy de WS).

# 1. Configuración estándar de servidor WireGuard
[Interface]
PrivateKey = <server-priv>
ListenPort = 51820
Address    = 10.201.0.1/16

[Peer]
PublicKey  = <client-pub>
AllowedIPs = 10.201.0.2/32

# 2. Lanzar el servidor arena-tunnel
arena-tunnel-server --listen 127.0.0.1:8888 --wg 127.0.0.1:51820

# 3. Regla de ingress en cloudflared
#    wss://wg.ejemplo.com → http://127.0.0.1:8888

Cliente (flags explícitos)

# Linux / macOS — requiere root para /dev/net/tun
sudo arena-byoc \
  -priv <peer-priv-b64> \
  -pub  <server-pub-b64> \
  -ip   10.201.0.2 \
  -host wg.ejemplo.com

O embebe las credenciales en tiempo de compilación vía build.sh para una UX de cero configuración, un solo binario (así es como ARENA genera la descarga de cada estudiante).

Descargar

Descarga el binario de la última versión según tu plataforma:

Modelo de confianza

Qué está protegidoCómo
Payload del túnel (tu tráfico)WireGuard ChaCha20-Poly1305 — extremo a extremo
El tramo de transporteTLS 1.3 entre cliente/servidor y Cloudflare
Claves privadas WGGeneradas server-side, embebidas en el binario, nunca en JSON
Autenticidad del peerHandshake noise de WireGuard; pubkeys estáticas

El CDN ve metadatos de conexión pero no el contenido. Lee SECURITY.md para el modelo de amenaza completo.