· 9 min de lectura · actualizado el 2 de agosto de 2026

Ilustración de la red Tor con su cebolla característica sobre un fondo de circuitos

Tor es reconocido por su alto nivel de anonimato, gracias al enrutamiento de tráfico a través de múltiples nodos voluntarios. Aunque esto aumenta la privacidad, también reduce la velocidad en comparación con opciones como Cloudflare Tunnels o Nginx Proxy Manager. Aun así, cuando buscas acceder a servicios internos sin abrir puertos ni adquirir un dominio, Tor se convierte en una solución gratuita y factible, sobre todo si la privacidad es prioritaria.

En este tutorial, aprenderás a exponer un servicio interno en la red Tor utilizando como ejemplo un servidor web básico basado en la imagen oficial nginx:alpine, sin depender de ninguna imagen personalizada.


Casos de Uso Populares

  1. Acceso a aplicaciones de monitoreo
    Usar Uptime Kuma en combinación con Tor te permite monitorear tus servicios desde cualquier parte del mundo, sin exponer puertos y con máxima privacidad.
  2. Paneles internos de prueba
    Verifica la configuración de Tor utilizando aplicaciones mínimas como nginx:alpine antes de desplegar proyectos más complejos.
  3. Alternativa a Túneles de Cloudflare o Nginx Proxy Manager
    Aunque alternativas como Cloudflare Tunnels y Nginx Proxy Manager ofrecen velocidad y simplicidad con certificados SSL automáticos, Tor aporta privacidad extrema sin necesidad de depender de terceros ni adquirir un dominio.
  4. Entornos de laboratorio y aprendizaje
    Si gestionas contenedores en Docker o usas Proxmox VE para máquinas virtuales, Tor puede ser una solución simple para probar conectividad externa en laboratorios sin exponer tu red.
  5. Privacidad para aplicaciones sensibles
    Tor es perfecto para aplicaciones que requieren un nivel de anonimato superior, como servidores de comunicación para activistas, periodistas o desarrolladores de software en contextos críticos.

Requisitos Previos


Paso 1: Instalar y Configurar Tor

1. Instalar Tor

Ejecuta los siguientes comandos para instalar Tor:

sudo apt update
sudo apt install tor -y

2. Editar la Configuración de Tor

Abre el archivo de configuración de Tor:

sudo nano /etc/tor/torrc

Añade las siguientes líneas al final del archivo:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80

Guarda los cambios (Ctrl+O, Enter) y cierra el archivo (Ctrl+X).


3. Reiniciar el Servicio de Tor

Reinicia Tor para aplicar los cambios:

sudo systemctl restart tor

Tor creará automáticamente el directorio especificado en HiddenServiceDir y los archivos necesarios para tu servicio oculto.


Paso 2: Desplegar un contenedor web de prueba

1. Ejecutar el Contenedor

Usaremos la imagen oficial nginx:alpine con una página propia montada dentro. Así el ejemplo no depende de ninguna imagen de terceros que haya que mantener:

Primero, la carpeta y el fichero que vamos a servir:

mkdir -p ~/tor-demo
nano ~/tor-demo/index.html

Pega dentro esto. Es exactamente la página que aparece en las capturas de más abajo, con una diferencia que importa: la animación va incrustada en el propio fichero, no se descarga de ningún CDN. Un servicio oculto no debería pedirle nada a la red abierta, ni siquiera un script decorativo.

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Web Server</title>
<style>
  * { margin: 0; padding: 0; box-sizing: border-box; }
  body {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    background: linear-gradient(135deg, #f06, #4a90e2);
    height: 100vh; display: flex; align-items: center; justify-content: center;
    color: #fff; text-align: center; overflow: hidden;
  }
  canvas { position: fixed; inset: 0; z-index: 0; }
  .container {
    position: relative; z-index: 1;
    background: rgba(0, 0, 0, .6); padding: 40px; border-radius: 15px;
    box-shadow: 0 8px 16px rgba(0, 0, 0, .3);
  }
  h1 { font-size: 2.4rem; }
</style>
</head>
<body>
<canvas id="red"></canvas>
<div class="container"><h1>¡Welcome to my Web Server!</h1></div>
<script>
// Red de puntos. Va incrustado a proposito: un servicio oculto no deberia
// pedirle nada a la red abierta, ni siquiera un script decorativo.
const c = document.getElementById('red'), x = c.getContext('2d');
let p = [];
function medir() {
  c.width = innerWidth; c.height = innerHeight;
  p = Array.from({ length: Math.min(90, innerWidth / 14) }, () => ({
    x: Math.random() * c.width, y: Math.random() * c.height,
    vx: (Math.random() - .5) * .4, vy: (Math.random() - .5) * .4
  }));
}
function pintar() {
  x.clearRect(0, 0, c.width, c.height);
  x.fillStyle = x.strokeStyle = 'rgba(255,255,255,.55)';
  for (const a of p) {
    a.x += a.vx; a.y += a.vy;
    if (a.x < 0 || a.x > c.width) a.vx *= -1;
    if (a.y < 0 || a.y > c.height) a.vy *= -1;
    x.fillRect(a.x, a.y, 2, 2);
  }
  for (let i = 0; i < p.length; i++)
    for (let j = i + 1; j < p.length; j++) {
      const d = Math.hypot(p[i].x - p[j].x, p[i].y - p[j].y);
      if (d < 130) {
        x.globalAlpha = (1 - d / 130) * .35;
        x.beginPath(); x.moveTo(p[i].x, p[i].y); x.lineTo(p[j].x, p[j].y); x.stroke();
        x.globalAlpha = 1;
      }
    }
  requestAnimationFrame(pintar);
}
addEventListener('resize', medir); medir(); pintar();
</script>
</body>
</html>

Y ahora levanta el contenedor:

docker run -d --name web-tor -p 127.0.0.1:80:80 -v ~/tor-demo:/usr/share/nginx/html:ro nginx:alpine

Fíjate en el 127.0.0.1 del comando, porque no es un detalle. Publicar con -p 80:80 a secas dejaría el contenedor accesible en todas las interfaces del servidor, incluida la que da a tu red o a internet. Y eso tiene una consecuencia concreta para lo que perseguimos aquí: cualquiera podría pedir la misma página por la red abierta desde tu IP, compararla con la que sirve tu dirección .onion y deducir que ambas son la misma máquina. Atando el contenedor a 127.0.0.1, lo único que puede alcanzarlo es Tor, que es exactamente lo que dice tu torrc.

2. Verificar el Servicio Localmente

Si estás en la misma máquina que aloja el contenedor, abre un navegador y accede a http://localhost

Si el contenedor se está ejecutando en una VM o contenedor LXC en Proxmox (o cualquier otro servidor remoto), primero averigua la dirección IP con:

ip a

En mi caso es:

Salida de ip a en el servidor con la dirección 192.168.101.208/24 recuadrada en rojo

Luego, en tu navegador (desde otra máquina en la misma red), visita http://<dirección-IP>. Deberías ver tu página de prueba para confirmar que el servidor web está funcionando correctamente.

Navegador abriendo la IP local del servidor y mostrando la página de bienvenida de prueba

Paso 3: Obtener tu Dirección .onion

Obtener la Dirección del Servicio Oculto

sudo cat /var/lib/tor/hidden_service/hostname

Este comando te mostrará tu dirección .onion. En mi caso exakxafo34v2qcnt7ab2pntkfxxj6afeni237bkpgrvuyqxca7psveyd.onion

Terminal mostrando el fichero hostname del servicio oculto, que contiene la dirección .onion generada

Proteger y Respaldar el Directorio del Hidden Service
Asegúrate de proteger las claves privadas almacenadas en /var/lib/tor/hidden_service/. Si pierdes estos archivos o se eliminan, tu dirección .onion cambiará. Para mantener la misma dirección en caso de restaurar el servicio o migrar a otra máquina, respalda este directorio de forma segura.

sudo chmod -R 700 /var/lib/tor/hidden_service/ 
sudo chown -R debian-tor:debian-tor /var/lib/tor/hidden_service/

Estas líneas restringen el acceso a las claves y garantizan que solo el usuario debian-tor (encargado de Tor) pueda modificarlas.


Paso 4: Acceder al Servicio desde Tor

  1. Instalar Tor Browser
    Descarga el navegador Tor en tu dispositivo local.
  2. Abrir la Dirección .onion
    Inicia el navegador Tor y accede a la URL .onion generada en el paso anterior.
Navegador Tor abriendo la dirección .onion y mostrando la misma página del servidor interno

Opciones Adicionales: HTTPS Interno

Aunque Tor cifra automáticamente el tráfico entre el cliente y el último nodo Tor, habilitar HTTPS en tu servicio local añade cifrado de extremo a extremo, asegurando que, incluso dentro de tu red local, la comunicación esté protegida. Esto resulta clave en entornos productivos donde hay varios dispositivos o usuarios que podrían interceptar el tráfico sin cifrar en la LAN


Próximos Pasos

  1. Exponer Servicios Complejos
    Tras verificar el funcionamiento con esta prueba, expón aplicaciones como Uptime Kuma, Nextcloud o paneles de administración como Proxmox VE.
  2. Explorar Alternativas
    Para servicios que requieran mayor velocidad, considera opciones como Cloudflare Tunnels o Nginx Proxy Manager.
  3. Fortalecer la Seguridad
    Habilita contraseñas o autenticación en tus servicios para evitar accesos no deseados.
  4. Virtualización y Entornos de Prueba
    Si usas Proxmox VE, puedes exponer servicios en contenedores LXC o máquinas virtuales a través de Tor.

Consejos Adicionales

Registrar Logs de Tor

Para depurar errores o verificar que tu servicio se inicie correctamente, revisa los logs de Tor:

journalctl -u tor

Si deseas llevar los registros a un archivo específico, abre el archivo de configuración /etc/tor/torrc y añade la siguiente línea

Log notice file /var/log/tor/notices.log

Con esto, activarás un registro de nivel “notice” en el fichero /var/log/tor/notices.log. Asegúrate de reiniciar Tor para que los cambios surtan efecto:

sudo systemctl restart tor

De esta manera, podrás consultar eventos detallados y posibles advertencias sobre el servicio oculto.

Uso de Varios Puertos

Si quieres exponer más de un puerto (por ejemplo, 80 y 443) en tu servicio oculto, basta con añadir líneas adicionales en tu torrc:

HiddenServicePort 80 127.0.0.1:80
HiddenServicePort 443 127.0.0.1:443

De esta forma, puedes manejar HTTP y HTTPS simultáneamente.

Permisos en Contenedores

Si tu servidor aloja múltiples aplicaciones, considera hacer el binding de tus contenedores a 127.0.0.1 (en lugar de 0.0.0.0) para reforzar la seguridad. Así, el servicio solo será accesible localmente, y Tor se encargará de exponerlo a la red externa sin necesidad de un bind público.

Conclusión

Exponer servicios internos en la red Tor es una forma práctica de garantizar privacidad sin necesidad de adquirir un dominio ni abrir puertos en tu router. Aunque la velocidad de Tor es limitada, es ideal para proyectos pequeños, entornos de prueba y servicios sensibles donde el anonimato sea prioritario.

Para la mayoría de los proyectos, la velocidad y facilidad de configuración de Cloudflare Tunnels y Nginx Proxy Manager pueden resultar más atractivas. Sin embargo, si la privacidad es prioritaria o deseas un entorno experimental sin exponer puertos ni comprar un dominio, Tor es una herramienta invaluable.

¿Tienes dudas o sugerencias? ¡Déjalas en los comentarios! 😊

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *