Volver al Blog
42 min Copiar como Markdown

Ejecutando un Bridge Tor en Linux: Guía Completa obfs4 y WebTunnel

Un mismo puente ejecutando obfs4 y WebTunnel a la vez, con Nginx haciendo que la mitad WebTunnel sea indistinguible de HTTPS normal. Running y Valid llegan en menos de una hora; Stable y Guard tardaron aquí alrededor de una semana, porque se puntúan por fiabilidad sostenida y no por un contador de uptime.

Imagen de portada de Ejecutando un Bridge Tor en Linux: Guía Completa obfs4 y WebTunnel

En 2026, más de 2,5 millones de personas al día llegan a una Internet libre y abierta a través de la red Tor conectando directamente a un relé — Tor Metrics sitúa esa estimación diaria por encima de los tres millones durante la mayor parte del año, y solo cuenta conexiones directas: quien entra por un bridge, que es de lo que trata esta guía, se contabiliza aparte y no está en esa cifra. Periodistas en regímenes autoritarios, activistas que organizan protestas, denunciantes que destapan casos de corrupción y ciudadanos corrientes que protegen su privacidad: todos ellos dependen de una red operada íntegramente por voluntarios.

¿El problema? Solo hay unos 2.600 bridges dando servicio a esos millones de usuarios. Los bridges son el recurso más crítico y escaso en el ecosistema Tor — son el primer punto de contacto para usuarios en países censurados, y cada nuevo bridge ayuda directamente a alguien a acceder a la información libremente.

Esta guía te enseñará todo lo que necesitas saber sobre la red Tor, el enrutamiento onion, y cómo configurar un bridge obfs4 + WebTunnel listo para producción en Linux — completo con camuflaje Nginx, endurecimiento del firewall, monitorización con Prometheus e integración con CrowdSec.

TL;DR — un puente, dos pluggable transports

6 puntos clave
  • Un mismo puente puede ejecutar obfs4 y WebTunnel a la vez, y merece la pena porque fallan en sitios distintos: obfs4 aleatoriza el tráfico para que no se parezca a ningún protocolo, mientras que WebTunnel se esconde dentro de HTTPS normal en el puerto 443 y sobrevive a los censores que bloquean de plano todo el tráfico “inclasificable”.
  • Nginx es lo que hace creíble a WebTunnel. Se pone delante del puente en el 443 y sirve un sitio web real en todas las rutas salvo la secreta, así que un censor que sondee el host ve una web normal en vez de un endpoint que responde raro.
  • Los flags del consenso tardan días, no minutos. Running y Valid llegan en menos de una hora; Stable y Guard tardaron alrededor de una semana en este despliegue. Se puntúan a partir de un tiempo medio entre fallos ponderado y, en el caso de Guard, también de ancho de banda y familiaridad —no de un contador de uptime—, así que un puente que se reinicia cada dos días no deja de reiniciar la evidencia con la que se puntúan, y puede que no llegue a obtenerlos.
  • Detrás de NAT hay que reenviar los TCP 9001, 4443 y 443 —ORPort, obfs4 y WebTunnel respectivamente— y abrirlos en el firewall del host; el autotest del ORPort falla en silencio si el router no lo hace.
  • Dile a tu IDS que deje en paz a los clientes de Tor. CrowdSec ve muchas conexiones desde muchas direcciones y banea a usuarios legítimos si no se excluyen los puertos del puente.
  • Todo corre bajo systemd, así que el stack vuelve solo tras un reinicio, que es justo lo que exigen los flags basados en uptime.

La red Tor: una introducción

¿Qué es Tor?

Tor (The Onion Router) es una red descentralizada operada por voluntarios, diseñada para proteger la privacidad de los usuarios y resistir la censura. Cuando usas Tor, tu tráfico de Internet se enruta a través de una serie de relés cifrados, lo que hace que sea extremadamente difícil para cualquiera — tu ISP, gobierno o un actor malicioso — rastrear tu actividad y asociarla contigo.

Pero Tor no es solo una herramienta de privacidad. Es una parte esencial de la infraestructura de derechos humanos. En países como China, Irán, Rusia y Myanmar, donde los gobiernos bloquean activamente el acceso a la información, Tor es a menudo la única forma para que los ciudadanos accedan a Internet sin censura.

Una breve historia

Los orígenes de Tor se remontan a los años 90 en el Laboratorio de Investigación Naval de EE.UU. (NRL), donde investigadores Paul Syverson, David Goldschlag y Michael Reed desarrollaron el concepto de enrutamiento onion — una técnica de comunicación anónima sobre una red de ordenadores. Puedes leer más sobre la historia completa de Tor en el sitio oficial.

  1. Se inventa el enrutamiento onion Hito

    Syverson, Goldschlag y Reed, en el Laboratorio de Investigación Naval de EE.UU., desarrollan el concepto de cifrado en capas para la comunicación anónima.

  2. Nace el Proyecto Tor Estándar

    Roger Dingledine y Nick Mathewson, ambos del MIT, se unen a Syverson para construir 'The Onion Router' — Tor. El código se publica como software libre con alrededor de una docena de nodos voluntarios.

  3. La EFF empieza a financiarlo Estándar

    La Electronic Frontier Foundation reconoce la importancia de Tor para los derechos digitales y aporta una financiación crítica en los primeros años. El NRL libera el código al dominio público.

  4. Se funda Tor Project, Inc. Hito

    El Proyecto Tor se convierte en una organización sin ánimo de lucro 501(c)(3) con sede en Massachusetts, lo que asegura desarrollo y gobernanza a largo plazo.

  5. Llegan los bridges Estándar

    Se desarrollan direcciones de relé secretas (bridges) para ayudar a los usuarios a esquivar firewalls en países censurados donde el directorio de Tor está bloqueado.

  6. Empieza el Navegador Tor Estándar

    Un navegador propio que empaqueta Tor en una aplicación fácil de usar y reduce drásticamente la barrera de entrada para usuarios no técnicos.

  7. Primavera Árabe Hito

    Tor desempeña un papel crítico cuando activistas de Túnez, Egipto, Libia y Siria lo usan para organizar protestas y comunicarse de forma segura pese a la censura gubernamental.

  8. Revelaciones de Snowden Obsoleto

    Las revelaciones de Edward Snowden sobre los programas de vigilancia masiva global disparan la adopción de Tor en todo el mundo.

  9. Se publica WebTunnel Estándar

    Un pluggable transport nuevo que disfraza el tráfico de Tor como HTTPS corriente, lo que lo hace casi imposible de bloquear sin daño colateral.

  10. Hoy

    ~10.000 relés, ~2.600 bridges y más de 2,5 millones de usuarios diarios en más de 200 países. La red está operada íntegramente por voluntarios.

¿Cómo funciona el enrutamiento onion?

El enrutamiento onion debe su nombre a las capas de una cebolla — tus datos se envuelven en múltiples capas de cifrado, y cada relé en el circuito “pela” una capa para revelar el siguiente destino. Ningún relé único conoce jamás tanto el origen como el destino del tráfico.

DestinationExit RelayMiddle RelayGuard RelayUserDestinationExit RelayMiddle RelayGuard RelayUserCifra con 3 capas:Capa 3 (clave Guard)Capa 2 (clave Middle)Capa 1 (clave Exit)Pela Capa 3Conoce: IP del usuarioNo conoce: DestinoPela Capa 2Conoce: Nada útil(solo relé anterior y siguiente)Pela Capa 1Conoce: DestinoNo conoce: IP del usuario🧅🧅🧅 [3 capas cifradas]🧅🧅 [2 capas cifradas]🧅 [1 capa cifrada]📄 [Texto plano o HTTPS]
Enrutamiento onion: tres capas de cifrado a través de tres relés

Esto es lo que lo hace seguro:

Lo que sabe cada relé
ReléSabeNo sabe
Guard (Entrada)Tu dirección IP realQué sitios web visitas
MiddleSolo relé anterior y siguienteNi tu IP ni tu destino
ExitEl sitio web de destinoTu dirección IP real

Detalles técnicos clave de la construcción de circuitos de Tor (ver también la descripción general del sistema en la especificación de Tor):

  • Selección de la ruta del circuito: el cliente elige los relés al azar y evita dos relés en la misma subred /16 o en el mismo país, para ganar diversidad.
  • Intercambio de claves: cada salto usa un handshake ntor (basado en Curve25519) para establecer un secreto compartido, con lo que se obtiene forward secrecy.
  • Celdas de tamaño fijo: dentro de Tor todo se transmite en celdas de 512 bytes, lo que impide el análisis de tráfico por tamaño de paquete.
  • Rotación de circuitos: los circuitos se rotan cada 10 minutos aproximadamente, para acotar la ventana de los ataques de correlación de tráfico.
  • Autoridades de directorio: nueve servidores de confianza mantienen el consenso sobre el estado de la red, las claves de relé y los flags.

El ecosistema Tor: tipos de voluntarios

La red Tor está compuesta por diferentes tipos de nodos operados por voluntarios, cada uno sirviendo un propósito distinto:

Roles de voluntario en Tor
RolQué haceNivel de riesgoImpacto
Guard RelayPrimer salto del circuito. Ve la IP del usuario, pero no el destino.BajoAlto — aporta ancho de banda
Middle RelaySalto intermedio. No ve nada útil.Muy bajoMedio — añade ancho de banda y diversidad de ruta
Exit RelayÚltimo salto. Se conecta al destino en nombre del usuario.AltoMuy alto — el recurso más necesario y escaso
BridgePunto de entrada oculto para usuarios de países censurados. No figura en el directorio público de Tor.BajoCrítico — es lo que permite eludir la censura directamente
Snowflake ProxyProxy WebRTC efímero que ayuda a los usuarios censurados a llegar a la red Tor.Muy bajoMedio — fácil de ejecutar, incluso en una pestaña del navegador
Directory AuthorityServidor de confianza que mantiene el consenso de la red.N/ACrítico — solo existen 9, operadas por el Proyecto Tor

¿Qué son los pluggable transports?

Los censores no solo bloquean Tor por IP: usan inspección profunda de paquetes (DPI) para identificar y bloquear el propio protocolo Tor. Los pluggable transports resuelven esto disfrazando el tráfico de Tor como algo completamente diferente.

Comparación de pluggable transports
TransporteMétodo de disfrazResistencia a la censuraVelocidadDespliegue
obfs4Hace que el tráfico parezca bytes aleatoriosAlta — resiste el fingerprinting por DPIRápidaMuy desplegado, fácil de configurar
WebTunnelImita tráfico HTTPS/WebSocketMuy alta — parece navegación web normalRápidaMás reciente, requiere servidor web + dominio
SnowflakeUsa WebRTC a través de proxies efímerosMuy alta — los proxies rotan constantementeVariableSolo en cliente (los voluntarios ejecutan proxies de navegador)
meekDisfraza el tráfico como peticiones a servicios en la nube (Azure, CDN)Extrema — bloquearlo implica bloquear servicios en la nubeLentaCostoso de mantener, último recurso
¿Cuál deberías ejecutar? Así se decide:
Quiero máximo impacto con mínima complejidad

Ejecuta un bridge obfs4. Es el pluggable transport más desplegado, es fácil de configurar y sirve al mayor número de usuarios. Aquí es donde el Proyecto Tor más necesita ayuda.

Ya tengo un servidor web y nombre de dominio

Ejecuta obfs4 y WebTunnel a la vez. WebTunnel disfraza el tráfico de Tor como navegación HTTPS normal, lo que lo hace casi imposible de bloquear. Combinado con obfs4, ofreces dos métodos de evasión distintos desde un único servidor.

No tengo un servidor, pero quiero ayudar ahora mismo

Instala la extensión de navegador Snowflake — se tarda 30 segundos y convierte tu navegador en un proxy temporal para usuarios censurados. No requiere mantenimiento.

Quiero contribuir el máximo ancho de banda a la red

Ejecuta un relé middle o, si te sientes cómodo con las implicaciones legales, un relé exit. Aportan ancho de banda bruto a toda la red. Plantéate levantarlos en un VPS con un ISP que permita explícitamente el tráfico Tor.

En esta guía configuraremos obfs4 y WebTunnel en el mismo servidor, para maximizar el impacto con una sola máquina.


Requisitos previos


Paso 1: instalar Tor del repositorio oficial

Instalar Tor y dependencias
  1. Instalar requisitos previos

    sudo apt update
    sudo apt install -y apt-transport-https gpg curl
  2. Añadir la clave GPG del Proyecto Tor

    curl -fsSL https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \
    | sudo gpg --dearmor -o /usr/share/keyrings/tor-archive-keyring.gpg
  3. Añadir el repositorio de Tor

    Sustituye CODENAME por el nombre en clave de tu distribución (por ejemplo, bookworm, trixie o jammy):

    CODENAME=$(lsb_release -cs)
    echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] \
    https://deb.torproject.org/torproject.org $CODENAME main" \
    | sudo tee /etc/apt/sources.list.d/tor.list
  4. Instalar Tor y obfs4proxy

    sudo apt update
    sudo apt install -y tor deb.torproject.org-keyring obfs4proxy

    Comprueba la instalación:

    tor --version
    obfs4proxy -version
    Salida esperada
    Tor version 0.4.9.6.
    obfs4proxy-0.0.14

Paso 2: instalar WebTunnel (opcional pero recomendado)

WebTunnel es un pluggable transport más reciente que disfraza las conexiones de Tor como tráfico HTTPS normal. A diferencia de obfs4 (que parece datos aleatorios), WebTunnel usa de verdad upgrades de WebSocket sobre HTTPS, lo que lo hace casi indistinguible de la navegación web legítima. El Proyecto Tor publica instrucciones de configuración oficiales y una guía para compilarlo desde el código fuente.

Compilar el servidor WebTunnel
  1. Instalar Go (si aún no está instalado)

    sudo apt install -y golang-go

    Comprueba que tienes Go 1.21 o superior, que es lo que pide WebTunnel. Ojo si sigues en Debian 12: su paquete golang-go es Go 1.19 y no llega, así que ahí hay que tirar de bookworm-backports o del tarball oficial. Debian 13 trae 1.24 y sirve tal cual:

    go version
  2. Clonar y compilar WebTunnel

    cd /tmp
    git clone https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/webtunnel.git
    cd webtunnel/main/server
    go build -o webtunnel-server .
    sudo cp webtunnel-server /usr/local/bin/
    sudo chmod +x /usr/local/bin/webtunnel-server
  3. Comprobar el binario

    /usr/local/bin/webtunnel-server --help 2>&1 | head -5

Paso 3: configurar tu bridge de Tor

Vamos con la configuración principal. El fichero torrc controla todo el comportamiento de Tor.

Sustituye el contenido de /etc/tor/torrc por:

/​etc/​tor/​torrc
# =============================================================
# Tor Bridge Configuration — obfs4 + WebTunnel
# =============================================================

# --- General Settings ---
SocksPort 0                        # Not a client — disable SOCKS
RunAsDaemon 0                      # Managed by systemd
DataDirectory /var/lib/tor
Log notice file /var/log/tor/notices.log
Log notice syslog

# --- Security Hardening ---
DisableDebuggerAttachment 1        # Prevent ptrace/debugger attachment

# --- Bridge Mode ---
BridgeRelay 1                      # This is a bridge, not a relay
PublishServerDescriptor bridge     # Publish to BridgeDB (not public directory)

# --- ORPort — IPv4 (NAT from router) + IPv6 (direct, global) ---
# IMPORTANT: Use 0.0.0.0 for NAT environments, not 127.0.0.1
ORPort 0.0.0.0:9001
ORPort [YOUR_IPV6_ADDRESS]:9001
ExtORPort auto

# --- Contact & Identity ---
ContactInfo your-email<at>example<dot>com
Nickname YourBridgeName

# --- obfs4 Transport ---
# Port 4443 must be forwarded from your router
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 0.0.0.0:4443

# --- WebTunnel Transport ---
# Listens locally; Nginx reverse-proxies HTTPS to it
ServerTransportPlugin webtunnel exec /usr/local/bin/webtunnel-server
ServerTransportListenAddr webtunnel 127.0.0.1:15000
ServerTransportOptions webtunnel url=https://YOUR-DOMAIN/YOUR-SECRET-PATH

# --- Bandwidth Limits ---
# Adjust to what your connection can sustain (example: 250 Mbps)
RelayBandwidthRate 31 MBytes       # Sustained rate
RelayBandwidthBurst 35 MBytes     # Burst allowance

# --- Memory — cap internal queue memory (OOM protection) ---
MaxMemInQueues 4096 MB

# --- Statistics ---
ConnDirectionStatistics 1          # Enable connection direction stats

# --- DoS Protection ---
DoSRefuseSingleHopClientRendezvous 1

# --- Monitoring: Prometheus Metrics ---
MetricsPort 0.0.0.0:9052
MetricsPortPolicy accept 192.168.0.0/16
MetricsPortPolicy accept 127.0.0.0/8

# --- Control Port (for Nyx monitoring tool) ---
ControlPort 9051
CookieAuthentication 1

Repasemos las secciones críticas:

Opciones de configuración clave, explicadas

BridgeRelay 1
Modo bridge Le dice a Tor que es un bridge, no un relé público. Los bridges no figuran en el directorio público de Tor.
ORPort 0.0.0.0:9001
Onion Router Port (IPv4) El puerto que Tor usa para comunicarse con otros relés. Usa 0.0.0.0 (no 127.0.0.1) si estás detrás de NAT — Tor necesita escuchar en todas las interfaces para que el autotest pase.
ORPort [IPv6]:9001
Onion Router Port (IPv6) Si tienes una dirección IPv6 global, añade una segunda línea ORPort con esa dirección entre corchetes. IPv6 no necesita NAT: la dirección es accesible directamente.
ExtORPort auto
Extended ORPort Canal de comunicación interno entre Tor y los pluggable transports. Con 'auto', Tor elige un puerto local al azar.
ServerTransportListenAddr obfs4
Dirección de escucha de obfs4 El puerto donde obfs4proxy espera las conexiones ofuscadas entrantes. Tiene que ser alcanzable desde Internet.
ServerTransportListenAddr webtunnel
Dirección de escucha de WebTunnel Escucha solo en 127.0.0.1 porque Nginx gestiona el HTTPS público y hace de proxy inverso hacia este puerto.
DisableDebuggerAttachment 1
Endurecimiento de seguridad Impide que herramientas como ptrace o gdb se enganchen al proceso de Tor. Protege las claves criptográficas en memoria frente a volcados y depuración.
MaxMemInQueues 4096 MB
Límite de memoria para colas Limita la memoria que Tor dedica a las colas de circuitos. Evita escenarios de OOM (falta de memoria) en servidores con mucha carga de tráfico.
ConnDirectionStatistics 1
Estadísticas de dirección de conexiones Habilita la recogida de estadísticas sobre el sentido de las conexiones (entrantes frente a salientes). Útil para analizar el tráfico del bridge.
DoSRefuseSingleHopClientRendezvous 1
Protección DoS Rechaza los circuitos de encuentro (rendezvous) que llegan de clientes de un solo salto. Se usan habitualmente en abusos y ataques de denegación de servicio contra servicios ocultos.
MetricsPort
Endpoint de Prometheus Expone las métricas internas de Tor en formato Prometheus. Restringe el acceso con MetricsPortPolicy.

Generar la ruta secreta de WebTunnel

El transporte WebTunnel usa una ruta de URL secreta que hace las veces de token de autenticación. Genera una cadena aleatoria de 24 caracteres:

echo $(cat /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 24)
Salida de ejemplo
7Zkw18j2NWGK9X7PiiPUQRJB

Usa ese valor en dos sitios:

  1. El torrc: ServerTransportOptions webtunnel url=https://your-domain.com/YOUR_SECRET
  2. La configuración de Nginx: location = /YOUR_SECRET

Paso 4: configurar Nginx para camuflaje WebTunnel

Lo bonito de WebTunnel es que tu servidor parece un sitio web completamente normal. Los visitantes ven una página HTML corriente; solo quien conoce la ruta secreta puede conectarse al bridge de Tor. Esto es camuflaje por ruta secreta. No es domain fronting: aquello usa un dominio en el SNI de TLS y otro distinto en la cabecera Host, mientras que aquí hay un solo dominio y lo que oculta el bridge es la ruta.

Configurar el camuflaje con Nginx
  1. Crear un sitio web de camuflaje

    Esto es lo que ven los visitantes (y los censores) cuando entran en tu dominio:

    sudo mkdir -p /var/www/tor-camouflage
    cat << 'EOF' | sudo tee /var/www/tor-camouflage/index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome</title>
    <style>
    body { font-family: system-ui, sans-serif; max-width: 800px;
    margin: 50px auto; padding: 20px; color: #333; }
    h1 { color: #2c3e50; }
    </style>
    </head>
    <body>
    <h1>Welcome</h1>
    <p>This is a personal project page. Nothing to see here.</p>
    </body>
    </html>
    EOF
  2. Obtener un certificado TLS (si todavía no tienes uno)

    sudo apt install -y certbot python3-certbot-nginx
    sudo certbot --nginx -d your-domain.com
  3. Crear el bloque de servidor de Nginx

    /​etc/​nginx/​sites-available/​tor-bridge.conf
    # Tor WebTunnel Bridge — Camouflage configuration
    # This looks like a normal HTTPS website but proxies
    # a secret path to the WebTunnel pluggable transport
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        http2 on;
    
        server_name your-domain.com;
    
        # TLS certificates
        ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_ciphers         HIGH:!aNULL:!MD5;
    
        # === Normal website (camouflage) ===
        root /var/www/tor-camouflage;
        index index.html;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        # === WebTunnel reverse proxy (secret path) ===
        # Replace YOUR_SECRET_PATH with your generated secret
        location = /YOUR_SECRET_PATH {
            proxy_pass http://127.0.0.1:15000;
            proxy_http_version 1.1;
    
            # WebSocket upgrade headers (required for WebTunnel)
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    
            # Standard proxy headers
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Accept-Encoding "";
            add_header Front-End-Https on;
    
            proxy_redirect off;
            proxy_buffering off;
            proxy_request_buffering off;
    
            # Long timeout for persistent Tor connections
            proxy_read_timeout 36000s;
            proxy_send_timeout 36000s;
    
            # Disable logging for the secret path (privacy)
            access_log off;
            error_log off;
        }
    }
    
    # HTTP to HTTPS redirect
    server {
        listen 80;
        listen [::]:80;
        server_name your-domain.com;
        return 301 https://$host$request_uri;
    }
  4. Habilitar el sitio y probarlo

    sudo ln -sf /etc/nginx/sites-available/tor-bridge.conf \
    /etc/nginx/sites-enabled/
    sudo nginx -t && sudo systemctl reload nginx
Lo que ven los censores

Sitio web HTTPS normal

Una petición GET / a tu dominio devuelve una página HTML sencilla. El DPI ve tráfico TLS 1.3 estándar hacia un dominio registrado. Nada sospechoso.

HTTP/1.1 200 OK
Content-Type: text/html
<html>Welcome...</html>
Lo que realmente sucede

Conexión del bridge de WebTunnel

Una petición GET /SECRET_PATH con una cabecera Connection: Upgrade llega al servidor WebTunnel, que abre un túnel persistente para el tráfico de Tor — todo dentro de la misma sesión TLS.

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
[El tráfico de Tor circula por el túnel]

Paso 5: configurar el reenvío de puertos

Si tu servidor está detrás de un router (lo habitual en instalaciones domésticas), tienes que reenviar estos puertos desde la IP pública del router hasta la IP local de tu servidor:

Reenvíos de puertos necesarios
PuertoProtocoloPropósito¿Necesario?
9001TCPORPort — comunicación entre relésSí (siempre)
4443TCPobfs4 — transporte ofuscadoSí (si ejecutas obfs4)
443TCPHTTPS — WebTunnel vía NginxSí (si ejecutas WebTunnel)

Los pasos exactos dependen de tu router. El proceso general es este:

Reenvío de puertos en un router genérico
  1. Entra en el panel de administración de tu router (normalmente en 192.168.0.1 o 192.168.1.1)

  2. Busca la sección de reenvío de puertos (suele estar bajo “NAT”, “Firewall” o “Port Forwarding”)

  3. Crea reglas para cada puerto:

    • Puerto externo: 9001 → IP interna: la IP de LAN de tu servidor → Puerto interno: 9001
    • Puerto externo: 4443 → IP interna: la IP de LAN de tu servidor → Puerto interno: 4443
    • Puerto externo: 443 → IP interna: la IP de LAN de tu servidor → Puerto interno: 443 (si no está ya reenviado)
  4. Guarda y aplica los cambios.

Firewall del servidor (UFW)

Si usas UFW (Uncomplicated Firewall) en tu servidor:

sudo ufw allow 9001/tcp comment "Tor ORPort"
sudo ufw allow 4443/tcp comment "Tor obfs4 Bridge"
# Port 443 is likely already open if you run Nginx
sudo ufw allow 443/tcp comment "HTTPS"
sudo ufw reload

Si usas iptables directamente:

sudo iptables -A INPUT -p tcp --dport 9001 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 4443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

IPv6: sin NAT

Comprueba que el puerto IPv6 está abierto:

# Verifica que Tor escuche en IPv6
ss -tlnp6 | grep 9001
# Prueba de accesibilidad IPv6 desde otra máquina
nc -6zv TU_DIRECCIÓN_IPV6 9001

Paso 6: configuración de AppArmor

En sistemas Debian/Ubuntu, AppArmor puede restringir lo que Tor y obfs4proxy tienen permitido hacer. Hay que asegurarse de que el perfil de obfs4proxy permite la ejecución:

# Check if the profile exists
sudo aa-status 2>/dev/null | grep obfs4proxy
# If restricted, set to complain mode
sudo aa-complain /usr/bin/obfs4proxy 2>/dev/null
# Or create an explicit allow rule
echo "/usr/bin/obfs4proxy mr," | sudo tee -a /etc/apparmor.d/local/system_tor
sudo apparmor_parser -r /etc/apparmor.d/system_tor

Paso 7: iniciar y verificar

Arrancar el puente
  1. Inicia Tor

    sudo systemctl restart tor
  2. Mira los logs para confirmar que el bootstrap ha ido bien

    sudo journalctl -u tor -f --no-pager | head -30

    Busca estas líneas clave:

    Salida de un bootstrap correcto
    Bootstrapped 0% (starting): Starting
    Bootstrapped 5% (conn): Connecting to a relay
    Bootstrapped 10% (conn_done): Connected to a relay
    Bootstrapped 14% (handshake): Handshaking with a relay
    Bootstrapped 15% (handshake_done): Handshake with a relay done
    Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits
    Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits
    Bootstrapped 95% (circuit_create): Establishing a Tor circuit
    Bootstrapped 100% (done): Done
    Self-testing indicates your ORPort 86.x.x.x:9001 is reachable from the outside. Excellent.
    Registered server transport 'obfs4' at '0.0.0.0:4443'
    Registered server transport 'webtunnel' at '127.0.0.1:15000'
  3. Comprueba que los tres procesos están en ejecución

    ps aux | grep -E "(tor|obfs4|webtunnel)" | grep -v grep

    Deberías ver tres procesos: tor, obfs4proxy, y webtunnel-server.

  4. Comprueba que todos los puertos están en escucha

    ss -tlnp | grep -E "(:443|9001|4443|15000|9051|9052)"
    Puertos que deberían estar en escucha
    LISTEN  0  511    0.0.0.0:443    0.0.0.0:*  users:(("nginx",pid=...,fd=...))
    LISTEN  0  4096   0.0.0.0:9001   0.0.0.0:*  users:(("tor",pid=...,fd=...))
    LISTEN  0  4096   0.0.0.0:4443   0.0.0.0:*  users:(("obfs4proxy",pid=...,fd=...))
    LISTEN  0  4096 127.0.0.1:15000  0.0.0.0:*  users:(("webtunnel-ser",pid=...,fd=...))
    LISTEN  0  4096 127.0.0.1:9051   0.0.0.0:*  users:(("tor",pid=...,fd=...))
    LISTEN  0  4096   0.0.0.0:9052   0.0.0.0:*  users:(("tor",pid=...,fd=...))
  5. Recupera la huella digital de tu puente

    cat /var/lib/tor/fingerprint

Comprobar la accesibilidad externa

Desde otra máquina (o con un comprobador de puertos online), comprueba que tus puertos son accesibles:

# From another machine:
nc -zv YOUR_PUBLIC_IP 9001
nc -zv YOUR_PUBLIC_IP 4443
curl -I https://your-domain.com/

Paso 8: monitorización con Prometheus y Grafana

Tor expone un conjunto muy completo de métricas por su MetricsPort en formato Prometheus. Con ellas puedes vigilar en tiempo real el uso de ancho de banda, las conexiones, la construcción de circuitos y la salud del relé.

Configurar el scraping de Prometheus

Añade un target de scrape para tu puente Tor en la configuración de Prometheus:

prometheus.yml (fragmento)
scrape_configs:
  - job_name: 'tor-bridge'
    scrape_interval: 30s
    scrape_timeout: 10s
    metrics_path: '/metrics'
    static_configs:
      - targets: ['YOUR_SERVER_IP:9052']
        labels:
          instance: 'tor-bridge'
          nickname: 'YourBridgeName'

Métricas clave que vigilar

Tor expone decenas de métricas de Prometheus. Estas son las más importantes para quien opera un puente:

Métricas esenciales de Prometheus en Tor
MétricaTipoLo que te dice
tor_relay_connections_totalCounterConexiones totales por tipo y sentido (entrantes/salientes, OR/directorio)
tor_relay_traffic_bytesCounterBytes leídos y escritos en total — tu aportación de ancho de banda a la red
tor_relay_flagGaugeFlags de directorio asignados a tu relé (Stable, Running, Valid, etc.)
tor_relay_circuits_totalGaugeNúmero de circuitos activos por estado (abiertos, cerrados, etc.)
tor_relay_streams_totalCounterStreams procesados — una aproximación a las conexiones reales de usuarios
tor_relay_load_oom_bytes_totalCounterEventos de falta de memoria — si sube, añade más RAM
tor_relay_load_tcp_exhaustion_totalCounterAgotamiento de puertos TCP — si sube, ajusta los parámetros de red del kernel
process_resident_memory_bytesGaugeRAM que usa ahora mismo el proceso Tor
process_cpu_seconds_totalCounterTiempo de CPU consumido por Tor

Panel de Grafana

Puedes montar un panel de Grafana bastante completo con gráficas para:

  1. Ancho de bandarate(tor_relay_traffic_bytes[5m]) — throughput de entrada y salida en tiempo real
  2. Conexionestor_relay_connections_total por tipo — quién se está conectando
  3. Flags del relétor_relay_flag — ¿ha reconocido la red tu puente?
  4. Circuitostor_relay_circuits_total — cuántos circuitos hay activos
  5. Recursos del sistemaprocess_resident_memory_bytes, process_cpu_seconds_total
  6. Saludtor_relay_load_oom_bytes_total, tor_relay_load_tcp_exhaustion_total

Nyx: monitorización desde el terminal

Nyx es una interfaz de terminal para vigilar Tor en tiempo real. Se conecta al ControlPort y muestra gráficas de ancho de banda, conexiones, circuitos y configuración.

sudo apt install -y nyx
sudo -u debian-tor nyx

Paso 9: integración con CrowdSec (si aplica)

Si ejecutas CrowdSec en el mismo servidor (algo habitual si ya tienes Nginx), te vas a encontrar con un problema: CrowdSec está diseñado para bloquear IPs maliciosas, pero los clientes del puente Tor disparan falsos positivos. Tu propio IDS puede acabar bloqueando a usuarios legítimos de Tor que se conectan a tu puente.

La solución es un bypass de tres capas que garantiza que el tráfico de Tor no se bloquee nunca:

Capa 1: iptables — esquivar el bouncer de firewall

Inserta reglas ACCEPT para los puertos concretos de Tor antes de la CROWDSEC_CHAIN:

# IPv4
sudo iptables -I INPUT 1 -p tcp --dport 4443 -j ACCEPT # obfs4
sudo iptables -I INPUT 1 -p tcp --dport 9001 -j ACCEPT # ORPort
# IPv6
sudo ip6tables -I INPUT 1 -p tcp --dport 4443 -j ACCEPT
sudo ip6tables -I INPUT 1 -p tcp --dport 9001 -j ACCEPT

Capa 2: Nginx — esquivar el bouncer Lua

Si el bouncer de Nginx de CrowdSec usa un rewrite_by_lua_block a nivel de http {}, añade una excepción para tu dominio de Tor:

/​etc/​nginx/​conf.d/​crowdsec_nginx.conf (sección modificada)
rewrite_by_lua_block {
    local cs = require "plugins.crowdsec.lib.crowdsec"

    -- Bypass CrowdSec for Tor bridge domain
    if ngx.var.host == "your-tor-domain.com" then
        -- Skip CrowdSec check entirely for Tor bridge traffic
    else
        local ok, err = cs.Allow(ngx.var.remote_addr)
        if not ok then
            ngx.exit(ngx.HTTP_CLOSE)
        end
    end
}

Capa 3: lista blanca en el parser de CrowdSec

Aun con lo anterior, CrowdSec seguirá analizando tus logs de Tor y puede generar decisiones locales. Crea una lista blanca en el parser para que ignore todo el tráfico hacia tu dominio de Tor:

/​etc/​crowdsec/​parsers/​s02-enrich/​tor-bridge-whitelist.yaml
name: custom/tor-bridge-whitelist
description: "Ignore all traffic to the Tor bridge domain"
whitelist:
  reason: "Tor bridge traffic — legitimate by definition"
  expression:
    - evt.Parsed.target_fqdn == 'your-tor-domain.com'

Para que CrowdSec detecte el target_fqdn, tus logs de Nginx tienen que incluir la variable $host. Crea un formato de log propio:

/​etc/​nginx/​conf.d/​tor_log_format.conf
# Log format with vhost prefix for CrowdSec target_fqdn detection
log_format combined_vhost
    '$host $remote_addr - $remote_user [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent"';

Después úsalo en el bloque de servidor de Tor:

access_log /var/log/nginx/tor.access.log combined_vhost;

Tras cualquier cambio, recarga los dos servicios:

sudo systemctl reload crowdsec
sudo systemctl reload nginx

Persistir las reglas de iptables tras un reinicio

Las reglas de bypass de iptables se pierden al reiniciar. Crea un servicio systemd que las vuelva a aplicar:

/​etc/​systemd/​system/​tor-bypass-crowdsec.service
[Unit]
Description=Tor Bridge — iptables bypass for CrowdSec
After=crowdsec-firewall-bouncer.service
Wants=crowdsec-firewall-bouncer.service

[Service]
Type=oneshot
RemainAfterExit=yes

# IPv4: Accept Tor traffic before CROWDSEC_CHAIN
ExecStart=/bin/sh -c '\
  iptables  -C INPUT -p tcp --dport 4443 -j ACCEPT 2>/dev/null || \
  iptables  -I INPUT 1 -p tcp --dport 4443 -j ACCEPT; \
  iptables  -C INPUT -p tcp --dport 9001 -j ACCEPT 2>/dev/null || \
  iptables  -I INPUT 1 -p tcp --dport 9001 -j ACCEPT'

# IPv6: Same rules
ExecStart=/bin/sh -c '\
  ip6tables -C INPUT -p tcp --dport 4443 -j ACCEPT 2>/dev/null || \
  ip6tables -I INPUT 1 -p tcp --dport 4443 -j ACCEPT; \
  ip6tables -C INPUT -p tcp --dport 9001 -j ACCEPT 2>/dev/null || \
  ip6tables -I INPUT 1 -p tcp --dport 9001 -j ACCEPT'

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now tor-bypass-crowdsec.service

Descripción general de la arquitectura

Esta es la arquitectura completa de lo que has montado:

📊 Monitoring

🖥️ Linux Server

🔧 Router

🌍 Censored Users

📦 Nginx :443

🛡️ CrowdSec Bypass

:4443 obfs4

:443 HTTPS

:4443 IPv6

:4443

:443

direct

ExtORPort

ExtORPort

Tor Client

(obfs4)

Tor Client

(WebTunnel)

IPv4 Port Forward

9001, 4443, 443

IPv6 Firewall

Accept 9001, 4443

iptables / ip6tables

Nginx Lua

obfs4proxy

:4443

Camouflage Page

(GET /)

WebTunnel Proxy

(GET /secret)

webtunnel-server

:15000

🧅 Tor Process

ORPort :9001 · IPv4 + IPv6

MetricsPort :9052

🧅 Tor Network

Prometheus

Grafana

Arquitectura completa del puente Tor (dual-stack IPv4 + IPv6)

Lista de verificación

Con todo configurado, repasa esta lista para confirmar que tu bridge funciona por completo:

Verificación posterior a la instalación
  • Servicio Tor activo: systemctl is-active tor
  • Bootstrap al 100%: journalctl -u tor | grep "Bootstrapped 100%"
  • Autotest del ORPort IPv4 superado: grep "is reachable from the outside" /var/log/tor/notices.log
  • Autotest del ORPort IPv6 superado (si lo configuraste): busca tu dirección IPv6 en el mensaje de accesibilidad
  • Tres procesos en ejecución: tor, obfs4proxy, webtunnel-server
  • Cinco puertos en escucha: 9001, 4443, 15000, 9051, 9052
  • Puerto IPv6 en escucha (si lo configuraste): ss -tlnp6 | grep 9001
  • La configuración de Nginx es válida: nginx -t
  • La página de camuflaje devuelve HTTP 200: curl -I https://your-domain.com/
  • La ruta de WebTunnel devuelve 502: curl -I https://your-domain.com/SECRET (es lo esperado: requiere el protocolo correcto)
  • Prometheus haciendo scraping: curl http://localhost:9052/metrics | head
  • El firewall permite los puertos de Tor: ufw status | grep -E "9001|4443"
  • Existe la huella digital del puente: cat /var/lib/tor/fingerprint
  • Van apareciendo los flags del relé (¡paciencia!): Running y Valid en torno a 1 hora, Stable unos 7 días y Guard unos 8, según el flag
  • Accesible por IPv6 desde fuera: nc -6zv TU_IPV6 9001
  • El bypass de CrowdSec funciona (si procede): cscli explain con una línea de log de prueba

Notas operativas

¿Qué sucede después de arrancar el bridge?

  1. Bootstrap y autotest Estándar

    Tor se conecta a la red, descarga el consenso y comprueba si tu ORPort es accesible. Si el autotest pasa, tu puente ya está operativo.

  2. Publicación del descriptor

    Tor publica el descriptor de tu puente en la Autoridad de Puentes. BridgeDB ya lo conoce, pero todavía no lo reparte entre los usuarios.

  3. Distribución por BridgeDB Estándar

    BridgeDB empieza a repartir tu línea de puente entre quienes piden puentes. Aquí pueden aparecer tus primeras conexiones de clientes.

  4. Llegada de los flags

    Las autoridades de directorio asignan los flags según el comportamiento de tu puente. Running y Valid llegan primero; Stable exige unos 7 días de funcionamiento ininterrumpido.

  5. Régimen estable Hito

    Tu puente está plenamente integrado en la red Tor. Vigila las métricas, mantén el software actualizado y cuida el uptime para maximizar el impacto.

Buenas prácticas de mantenimiento

Mantenimiento continuo
  • Mantén Tor actualizado: revisa las actualizaciones cada semana — sudo apt update && sudo apt upgrade tor
  • Vigila los logs: revisa /var/log/tor/notices.log en busca de avisos y errores
  • Observa las métricas: configura alertas de Grafana para caídas anómalas de ancho de banda o fallos de conexión
  • Cuida el uptime: la red Tor penaliza a los relés que se caen a menudo
  • Nunca borres /var/lib/tor/pt_state/ — ahí están tus claves obfs4. Perderlas implica estrenar identidad de puente
  • ¿IP dinámica? Si tu IP pública cambia, la línea de puente obfs4 deja de valer. A WebTunnel no le afecta (va por nombre de dominio). Plantéate un servicio DDNS para obfs4.
  • Renueva los certificados TLS: si usas Let’s Encrypt con renovación automática, esto se resuelve solo

Copia de seguridad de los ficheros críticos

Estos ficheros contienen la identidad de tu bridge. Perderlos significa empezar de cero con otra huella digital:

sudo tar czf /root/tor-bridge-backup-$(date +%Y%m%d).tar.gz \
/var/lib/tor/fingerprint \
/var/lib/tor/keys/ \
/var/lib/tor/pt_state/ \
/etc/tor/torrc \
/etc/nginx/sites-available/tor-bridge.conf

Solución de problemas

¿Algo no funciona? Vamos a diagnosticarlo:
Tor no termina el bootstrap (se queda por debajo del 100%)

Comprueba si tu servidor llega a la red Tor:

curl -s https://check.torproject.org/ | grep -i congratulations

Si esto falla, puede que tu ISP esté bloqueando Tor. Revisa la resolución DNS y prueba con servidores DNS públicos (8.8.8.8, 1.1.1.1).

El autotest del ORPort falla

Significa que Tor no llega a tu servidor desde fuera por el puerto 9001. Comprueba que:

  1. El reenvío de puertos está bien configurado en el router
  2. ORPort apunta a 0.0.0.0:9001 (no a 127.0.0.1)
  3. El firewall del servidor permite el puerto 9001
  4. Y prueba desde una máquina externa: nc -zv YOUR_PUBLIC_IP 9001
obfs4proxy se cae o no arranca

Revisa AppArmor:

sudo aa-status | grep obfs4

Si está restringido, ponlo en modo complain: sudo aa-complain /usr/bin/obfs4proxy

Comprueba también los permisos del directorio de datos de Tor:

ls -la /var/lib/tor/pt_state/
WebTunnel devuelve 502 al hacer curl (¡es normal!)

Un 502 Bad Gateway al hacer curl a la ruta secreta es el comportamiento esperado. WebTunnel necesita un handshake completo del protocolo WebSocket/WebTunnel; un GET HTTP simple no sirve. Si los clientes de Tor consiguen conectarse, todo está bien.

No aparecen flags del relé pasadas 24 horas

Comprueba que:

  1. Tu puente está publicando descriptores: grep "publishing" /var/log/tor/notices.log
  2. El autotest del ORPort ha pasado
  3. El puente lleva funcionando sin interrupciones
  4. Y consulta Tor Metrics Relay Search con tu huella digital (los puentes pueden tardar 24–48 h en aparecer)
Ninguna conexión de clientes tras varios días

Es lo normal en un puente nuevo. BridgeDB los reparte poco a poco:

  1. Confirma que tu puente aparece en Relay Search
  2. Los puentes se reparten según la demanda — algunos transportes captan más usuarios que otros
  3. Los puentes WebTunnel suelen captar usuarios antes en regiones muy censuradas
  4. Dale hasta una semana antes de preocuparte

Cómo lo tengo montado

Cuatro nodos Tor, que es justo el motivo de que esta guía exista en lugar de ser un resumen del manual.

Dos puentes: uno en Valencia, en el mismo servidor que sirve esta página, y otro en Alicante en un mini PC en casa — ese segundo cuelga de una línea de fibra doméstica por detrás del router MikroTik, de ahí que la sección de NAT y reenvío de puertos de más arriba esté escrita como está. Los dos relays intermedios son instancias VPS de IONOS, una en Londres y otra en Madrid, porque un relay quiere ancho de banda estable y una línea residencial no lo da de forma fiable.

Sinceramente, no hay ningún incidente que contar. No ha pasado nada dramático: ni una notificación de retirada, ni una queja por abuso, ni la visita de nadie. El puente y los relays simplemente han funcionado. Merece la pena decirlo así de claro, porque la pregunta que la gente se hace antes de montar uno es “qué me va a pasar si hago esto”, y la respuesta aquí, desde una línea doméstica en España, ha sido: nada.

Dos cosas sí me sorprendieron, y ambas están en esta guía por eso.

La primera es lo que tardan los flags del consenso. Yo esperaba que el puente estuviera “funcionando” en una hora, y en sentido estricto lo estaba: Running y Valid llegan enseguida. Stable tardó aquí alrededor de una semana, y Guard algo más. Son observaciones de este despliegue, no un calendario: las autoridades de directorio asignan Stable a partir de un tiempo medio entre fallos ponderado, no de un contador de uptime a secas, y Guard exige además Stable, Fast, familiaridad y ancho de banda suficiente, así que tus fechas serán otras. La lección práctica se sostiene igual: un reinicio para cambiar una línea de configuración retrasa la medición, así que trastea en la primera hora y luego déjalo en paz.

La segunda es que CrowdSec baneó a mis propios clientes de Tor antes de que se me ocurriera excluir los puertos del puente. Desde el punto de vista del IDS, un puente es exactamente lo que parece un ataque: muchas conexiones, muchas direcciones, ningún patrón. Estaba haciendo su trabajo correctamente y el resultado seguía siendo el equivocado, que es el modo de fallo que conviene recordar: la regla que se dispara aquí es la misma que describo en los artículos del honeypot de MikroTik y del tarpit de nginx, apuntando a tráfico que sí quería.


La red te necesita

Ejecutar un bridge de Tor es una de las cosas con más impacto que puedes hacer por la libertad en Internet. Cada bridge que operas es un salvavidas directo para gente bajo censura: periodistas en Irán, activistas en China, estudiantes en Rusia, ciudadanos en Myanmar. La barrera técnica es modesta; el impacto humano, incalculable.

Tu contribución a la libertad en Internet

Al ejecutar un puente obfs4 + WebTunnel con monitorización adecuada, endurecimiento del firewall y camuflaje, aportas uno de los recursos más valiosos del ecosistema Tor. La red tiene ~10.000 relés pero solo ~2.600 puentes: tu puente sirve directamente a los usuarios más vulnerables.

Si esta guía te ha resultado útil, compártela con quien pueda querer contribuir. Cuantos más bridges haya, más difícil se lo pondremos a los censores.

Y si quieres ir más allá: monta un servidor dedicado a relés de salida, el recurso más escaso y con más impacto de toda la red Tor. Esa es una guía para otro día.


Preguntas frecuentes

¿Qué es un bridge de Tor y por qué son tan importantes los bridges?

Un bridge es un punto de entrada oculto a la red Tor que no figura en el directorio público, así que permite a los usuarios de países censurados llegar a Tor incluso cuando los relés conocidos están bloqueados. En 2026 la red tiene unos 10.000 relés pero solo unos 2.600 bridges, lo que los convierte en el recurso más crítico y escaso para eludir la censura.

¿Cuál es la diferencia entre obfs4 y WebTunnel?

obfs4 hace que el tráfico de Tor parezca bytes aleatorios para resistir el fingerprinting por DPI y es fácil de configurar; WebTunnel disfraza el tráfico como navegación HTTPS/WebSocket corriente, lo que lo hace casi imposible de bloquear a costa de necesitar un servidor web y un dominio. Ejecutar ambos en un mismo servidor ofrece dos métodos de evasión distintos a la vez.

¿Por qué ORPort debe usar 0.0.0.0 en lugar de 127.0.0.1 detrás de NAT?

Tor hace un autotest de accesibilidad que comprueba que el ORPort sea alcanzable desde Internet, y vincularlo a localhost (127.0.0.1) hace que ese autotest falle. Detrás de un router debes usar ORPort 0.0.0.0:9001 (o tu IP de LAN) y reenviar el puerto 9001 desde el router.

¿Qué puertos necesito reenviar para un bridge de Tor?

Reenvía TCP 9001 (ORPort, siempre requerido), TCP 4443 (obfs4, si ejecutas obfs4) y TCP 443 (HTTPS para WebTunnel vía Nginx, si ejecutas WebTunnel). Las direcciones IPv6 son globalmente enrutables, así que necesitan reglas de firewall que permitan el tráfico en lugar de reenvío de puertos.

¿Por qué la ruta secreta de WebTunnel devuelve un error 502 con curl?

Un error 502 Bad Gateway al hacer curl a la ruta secreta es el comportamiento esperado, porque WebTunnel necesita un handshake completo del protocolo WebSocket/WebTunnel que un simple GET HTTP no puede completar. Si los clientes de Tor consiguen conectarse, todo funciona correctamente.

¿Cuánto tarda mi bridge en obtener flags de relé y conexiones de clientes?

Los flags aparecen poco a poco: Running y Valid tardan alrededor de 1 hora, Stable necesita unos 7 días de funcionamiento ininterrumpido y Guard unos 8 días. BridgeDB reparte los bridges nuevos a lo largo de 24–48 horas, así que es normal esperar hasta una semana antes de ver tus primeras conexiones de clientes.