Plan: Montar imlauer.github.io como sitio I2P (eepsite)

Fecha: 2026-09-16 Sistema: Arch Linux, usuario esotericwarfare Sitio: sitio estático (HTML + CSS + carpeta blog/ con .txt)

Qué es esto

I2P es una red anónima “encriptada por capas” (tipo Tor pero con direccionamiento propio). Un eepsite es un sitio oculto que vive exclusivamente dentro de I2P: se accede con un .b32.i2p y se sirve desde tu propia máquina mientras tu nodo esté corriendo.

Como tu sitio es 100% estático (archivos HTML/CSS/txt), se puede servir con un servidor web mínimo y exponerlo por un túnel I2P sin necesidad de dominios ni puertos abiertos en Internet.

Arquitectura

        I2P (red encriptada)
   visitantes .b32.i2p
         │
    [i2pd router]        ← nodo I2P propio (puertos locales 7656/7070)
         │  túnel servidor (server tunnel)
         ▼
    [servidor web local 127.0.0.1:8080]   ← sirve la carpeta del sitio
  • i2pd: router C++ (paquete oficial de Arch: extra/i2pd).
  • El sitio jamás sale a la Internet normal, solo se publica dentro de I2P.
  • La dirección se deriva de una clave pública (destino), no hay que pagar nada ni registrar DNS.

Pasos

1. Instalar el router (nodo)

sudo pacman -S i2pd

(Paquete: i2pd versión 2.61.0-2, disponible en el repo [extra].)

2. Arrancar y habilitar el nodo

sudo systemctl enable --now i2pd
  • I2PD escucha en 127.0.0.1, puertos de uso común: · 7656 SAM (API para apps) · 7070 consola web del nodo (http://127.0.0.1:7070) · 4444 proxy HTTP de salida (para navegar dentro de I2P)

La primera vez tarda unos minutos en “calentar” (encontrar pares, generar claves).

3. Exponer el sitio con un túnel servidor

Archivo de configuración de túneles: /etc/i2pd/tunnels.conf

Agregar (con sudo: [sitio] type = server host = 127.0.0.1 port = 8080 keys = sitio.dat

  • type=server → eepsite: el túnel publica un servicio dentro de I2P.
  • host/port → hacia dónde manda el tráfico: nuestro servidor web.
  • keys=sitio.dat → guarda el par de claves; la dirección pública (destino) se genera de ahí y es ESTABLE.

4. Servir el sitio en 127.0.0.1:8080

Mínimo indispensable (sin dependencias): cd ~/imlauer.github.io python3 -m http.server 8080

(Opción más robusta, a futuro: nginx/lighttpd copiando la carpeta, pero para empezar basta con python.)

5. Obtener la dirección .b32.i2p

Las claves se generan en /var/lib/i2pd/sitio.dat Para leer la dirección: i2pdkeys –dat=/var/lib/i2pd/sitio.dat (imprime b32 y destino b64) También aparece en la consola web (127.0.0.1:7070 → I2P tunnels).

Resultado parecido a: xxxxxxxxxxxxxxxxxxxxxxxxx.b32.i2p

6. Probar que funciona (desde esta misma máquina)

Via proxy I2P de salida: curl -x http://127.0.0.1:4444 http://.i2p/ O abrir el .b32.i2p en un navegador configurado con el proxy 4444. (Con .b32 no hace falta registro ni proxy web aparte.)

7. (Opcional, recomendado) Nombre corto .i2p

Para que se vea bonito (p. ej. imlauer.i2p) hay que:

  • Pagar/registrar el nombre ante eepSites/moneroj o equivalentes y dejar el hostname publicado.
  • Agregar el hostname al addressbook local (hosts.txt) para que tu propio navegador lo resuelva.
  • No es obligatorio: la .b32 ya es accesible por cualquiera.

8. Dejarlo automático

  • i2pd ya queda como servicio systemd (arranca solo al bootear).
  • Para el servidor web estático conviene crear un user service systemd: ~/.config/systemd/user/sitio-i2p.service Que ejecute python3 -m http.server 8080 en la carpeta del repo.

Comandos útiles

systemctl status i2pd            # estado del nodo
sudo journalctl -u i2pd -f       # logs del router
ss -tlnp | grep -E '7656|7070|4444|8080'   # ver puertos activos

Notas / advertencias

  • El sitio SOLO es accesible vía I2P, no reemplaza a GitHub Pages.
  • Mantener el nodo prendido = sitio online. Si lo apagás, el eepsite queda caído (aunque la dirección sigue siendo la misma).
  • RAM/CPU: i2pd es liviano (docenas de MB).
  • No se abren puertos en el router casero: la conexión es saliente.
  • Si más adelante querés, se puede servir con Jetty embarazoso desde el propio i2pd; para contenido estático el túnel local es lo más simple.