Los dominios .onion no se registran ni se compran: se generan
criptográficamente en tu propio servidor. Cualquiera con un VPS y 30 minutos
puede montar su propio sitio accesible desde la red Tor.
Es legal, gratis y útil para
proyectos que necesitan resistencia a censura, whistleblowing, o
simplemente experimentación técnica seria.
Contexto legal. Tor y los hidden services son tecnología legal usada por Facebook, BBC, ProPublica y muchas organizaciones. Lo que subes a tu .onion sigue estando sujeto a la ley del país donde estás y del país donde está el VPS. Esta guía cubre solo configuración técnica de un sitio legítimo.
Qué vamos a montar
- Un hidden service Tor v3 con su dominio
.oniongenerado - Nginx sirviendo contenido web local que solo se accede vía Tor
- (Opcional) una dirección vanity personalizada que empiece por letras que elijas tú
- (Opcional) header
Onion-Locationdesde tu sitio clearnet para descubrimiento automático - Backups del secret key (imprescindible para no perder tu dominio)
- Endurecimiento para minimizar riesgos de filtración de identidad
Requisitos
- VPS con Ubuntu 22.04+ o Debian 12+ (1 GB RAM basta)
- Acceso SSH como root o sudo
- Tor Browser en tu ordenador para probar (torproject.org)
- 30-45 minutos si sigues la guía completa; 15 min si solo quieres lo básico
¿Aún no tienes VPS?
Argos corre en Rootnerds. VPS europeos económicos con IPv4 dedicada y buena red. Verifica antes de contratar que el proveedor permite ejecutar Tor: la mayoría de europeos serios lo permite para relay/hidden service (no exit node).
Paso 1: instala Tor desde el repo oficial
Los paquetes de apt por defecto suelen ir muy atrasados.
Añade el repo oficial de Tor Project para mantenerte al día:
ssh root@TU_IP_DEL_VPS
apt update && apt install -y apt-transport-https curl gnupg
# Añade el repo oficial
echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org $(lsb_release -sc) main" > /etc/apt/sources.list.d/tor.list
# Añade la clave GPG
curl -fsSL https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \
| gpg --dearmor -o /usr/share/keyrings/tor-archive-keyring.gpg
apt update
apt install -y tor deb.torproject.org-keyring Verifica que arrancó bien:
systemctl status tor@default Paso 2: prepara la web local
Instala nginx y sirve algo en localhost:8080 (o el puerto que prefieras). Este será el contenido que expondrás vía Tor.
apt install -y nginx
# Crea un vhost que escuche solo en localhost
cat > /etc/nginx/sites-available/onion.conf <<'EOF'
server {
listen 127.0.0.1:8080;
server_name _;
root /var/www/onion;
index index.html;
# No enviar headers que revelen software o IP
server_tokens off;
more_clear_headers Server;
location / {
try_files $uri $uri/ =404;
}
}
EOF
# Contenido de prueba
mkdir -p /var/www/onion
echo '<h1>Mi primera web en Tor</h1><p>Funciona.</p>' > /var/www/onion/index.html
# Activa y recarga
ln -sf /etc/nginx/sites-available/onion.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
# Verifica
curl http://127.0.0.1:8080/ Paso 3: configura el hidden service
Edita /etc/tor/torrc y añade la definición del hidden service:
nano /etc/tor/torrc Añade estas líneas al final:
HiddenServiceDir /var/lib/tor/mi_sitio/
HiddenServicePort 80 127.0.0.1:8080
HiddenServiceVersion 3
# (Opcional) desactivar publicación en directorio de servicios
# HiddenServiceNonAnonymousMode 0
# HiddenServiceSingleHopMode 0 Reinicia Tor para que aplique:
systemctl restart tor@default
sleep 5
journalctl -u tor@default --since "1 minute ago" | tail -20 Deberías ver mensajes tipo "Bootstrapped 100%" y "onion service descriptor uploaded". Si hay errores de permisos, ajusta:
chown -R debian-tor:debian-tor /var/lib/tor/mi_sitio
chmod 700 /var/lib/tor/mi_sitio
systemctl restart tor@default Paso 4: obtén tu dominio .onion
Tor ha generado un par de claves y la dirección pública se guarda en:
cat /var/lib/tor/mi_sitio/hostname Verás algo así:
3g2upl4pq6kufc4m7f7q6nn5xkjaycfl3vjmbn7q5s4dpszrjq6rjqad.onion
Esa es tu dirección. Cópiala y ábrela en Tor Browser (no en
Chrome o Firefox estándar — solo Tor Browser resuelve .onion).
Deberías ver la página de prueba servida por nginx.
Paso 5: (opcional) dirección vanity personalizada
Las direcciones v3 son de 56 caracteres. Puedes generar una que empiece por
letras concretas usando mkp224o — fuerza bruta computacional en
tu equipo:
# En tu ordenador local (más rápido que en el VPS)
apt install -y git build-essential libsodium-dev autoconf
git clone https://github.com/cathugger/mkp224o.git
cd mkp224o
./autogen.sh && ./configure && make
./mkp224o argos -d ~/onion-keys -n 1 Buscará una dirección que empiece por "argos". Los tiempos:
- 3 caracteres: instantáneo
- 4 caracteres: segundos
- 5 caracteres: minutos
- 6 caracteres: horas
- 7 caracteres: días
- 8+: semanas o meses en un ordenador normal
Cuando encuentre una, dentro de ~/onion-keys/ aparecerá una
carpeta con nombre argosXXXX....onion y dentro tres archivos:
hostname, hs_ed25519_public_key,
hs_ed25519_secret_key. Sube esa carpeta entera a tu VPS y
reemplaza /var/lib/tor/mi_sitio/:
# Detén Tor
systemctl stop tor@default
# Backup del anterior
mv /var/lib/tor/mi_sitio /var/lib/tor/mi_sitio.old
# Copia la vanity
mkdir -p /var/lib/tor/mi_sitio
cp ~/onion-keys/argosXXX*/hostname /var/lib/tor/mi_sitio/
cp ~/onion-keys/argosXXX*/hs_ed25519_public_key /var/lib/tor/mi_sitio/
cp ~/onion-keys/argosXXX*/hs_ed25519_secret_key /var/lib/tor/mi_sitio/
# Permisos correctos
chown -R debian-tor:debian-tor /var/lib/tor/mi_sitio
chmod 700 /var/lib/tor/mi_sitio
chmod 600 /var/lib/tor/mi_sitio/hs_ed25519_secret_key
systemctl start tor@default
cat /var/lib/tor/mi_sitio/hostname Rootnerds (afiliado): el proveedor que usamos para alojar Argos.
Paso 6: (opcional) Onion-Location desde tu web clearnet
Si además tienes el sitio en clearnet (por ejemplo, tudominio.com),
puedes añadir un header que le diga a Tor Browser: "hay una versión .onion,
ábrela automáticamente". Tor Browser mostrará un botón .onion available.
En el nginx del sitio clearnet:
server {
listen 443 ssl http2;
server_name tudominio.com;
# Añadir este header
add_header Onion-Location "http://TU_DIRECCION.onion$request_uri" always;
# ...resto de config...
} Cualquier visitante que use Tor Browser verá el botón para pasar a la versión .onion.
Paso 7: backup del secret key (CRÍTICO)
Tu dominio .onion depende exclusivamente del
hs_ed25519_secret_key. Si lo pierdes (fallo de disco, borrado
accidental, VPS que se apaga sin backup), la dirección se pierde para
siempre y tendrás que generar una nueva. Todos tus enlaces publicados
dejarán de funcionar.
Haz backup ahora mismo:
# En el VPS: crea un tar cifrado con GPG
tar czf /root/tor-mi-sitio-backup.tar.gz -C /var/lib/tor mi_sitio
gpg --symmetric --cipher-algo AES256 /root/tor-mi-sitio-backup.tar.gz
# Introduce una passphrase muy fuerte cuando la pida
# Descárgalo a tu ordenador (fuera del VPS)
# En tu PC:
scp root@TU_IP:/root/tor-mi-sitio-backup.tar.gz.gpg ~/Documentos/
# Elimina el tar sin cifrar del VPS
rm /root/tor-mi-sitio-backup.tar.gz
Guarda el .gpg en 2-3 sitios distintos (disco externo, pen
drive en caja fuerte, cifrado en cloud). Sin ese archivo, no puedes recuperar
tu dominio.
Paso 8: endurecimiento y buenas prácticas
El hidden service es tan seguro como el operador. Errores típicos que filtran identidad:
- Nginx enviando su IP en headers. Comprueba con curl que
no aparece
Server: nginxcon versión o IP interna. Usaserver_tokens off;. - Firewall abierto para el mundo. Si tu web local escucha en
0.0.0.0:8080, cualquiera con la IP del VPS puede acceder desde clearnet y correlacionar contenido con tu .onion. Escucha SIEMPRE en127.0.0.1:8080. Verifica conss -tlnp | grep 8080. - Metadatos en archivos subidos. Cualquier PDF o foto que
publiques puede llevar autor, GPS, número de serie de cámara. Limpia con
exiftool -all= archivoantes de subir. Usa nuestra herramienta EXIF y PDF metadata para verificar. - Base de datos con IPs de visitantes. Nginx loguea por
defecto la IP del cliente. Como todas serán
127.0.0.1(viene por Tor), no revela usuarios, pero desactiva el log si no lo necesitas:access_log off;. - Referrers. Si enlazas a webs externas, el navegador del
visitante puede enviar tu
.onioncomo referrer y revelar el dominio. Usa<a rel="noreferrer noopener">siempre. - Servicios que llaman a casa. WordPress, Analytics, fuentes de Google, iconos remotos: cualquier cosa que haga una request externa desde el navegador del visitante compromete su anonimato. Todo debe estar auto-alojado en el .onion.
- Actualiza Tor y el sistema. Fallos criptográficos en Tor
pueden desanonimizar.
apt update && apt upgrade -ycon regularidad. Habilitaunattended-upgrades.
Casos de uso reales
- Whistleblowing serio: instalar SecureDrop sobre el hidden service, como hacen The Guardian, ProPublica, New York Times.
- Mirror de tu web principal resistente a bloqueos regionales. Wikipedia, BBC, DuckDuckGo y ProtonMail mantienen versiones .onion accesibles desde países con censura.
- Comunicación privada: alojar Matrix, XMPP, o un simple foro donde ni operador ni usuarios se identifican.
- Investigación: experimentar con la red Tor, escribir sobre seguridad, entender el diseño.
Comandos útiles para gestionar
# Ver estado de Tor
systemctl status tor@default
# Ver logs en vivo
journalctl -u tor@default -f
# Recargar tras cambios de config
systemctl reload tor@default
# Reiniciar completo
systemctl restart tor@default
# Ver tu .onion
cat /var/lib/tor/mi_sitio/hostname
# Ver conexiones activas (verificar que Tor está bien conectado)
sudo -u debian-tor tor --verify-config Verificación final
- Abre Tor Browser (no cualquier navegador con extensión Tor).
- Pega tu URL
.onion. - Debe cargar tu página en 3-10 segundos (Tor añade latencia).
- Revisa las herramientas del navegador (F12 → Red) para verificar que no hay ninguna request externa a Google, CDNs u otros dominios.
- Repite con Tor Browser en móvil (existe en Android; en iOS usa Onion Browser).
Con 45 minutos y un VPS básico tienes tu propio sitio en la red Tor. Sin registrador, sin ICANN, sin CA. Solo criptografía. Úsalo para lo que la tecnología fue diseñada: publicación resistente a censura, protección de fuentes y experimentación técnica.