Esta página fue actualizada por última vez el Noviembre de 2017 y es precisa con la versión 0.9.32 del router I2P.

Vista general

Esta página trata acerca del empaquetamiento del binario completo del router I2P junto a su aplicación. No trata sobre escribir una aplicación para que funcione con I2P (tanto empaquetándola como de forma externa).

Montones de proyectos están empaquetando, o discutiendo acerca de empaquetar, I2P. Esto es estupendo si se hace bien. Si se hace mal, podría causar un verdadero daño a su red. El router I2P es complejo, y puede ser un reto ocultar toda la complejidad a sus usuarios. Esta página trata algunas directrices técnicas.

Hable con nosotros

Inicie un debate. Estamos aquí para ayudar. Las aplicaciones que incrustan I2P son las oportunidades más prometedoras - y excitantes - para nosotros, de hacer crecer la red y mejorar el anonimato para todos.

Elija su router I2P sabiamente

Si su aplicación está escrita en Java o Scala, es una elección fácil - use el router I2P Java. Si lo está en C/C++, recomendamos i2pd. El desarrollo de i2pcpp se ha detenido. Para aplicaciones en otros idiomas, lo mejor es usar SAM, o BOB, o SOCKS, y empaquetar el router I2P Java como un proceso aparte. Algunas de las siguientes sólo se aplican al router I2P Java.

Licenciamiento

Asegúrese de cumplir con los requerimientos de la licencia del software que está empaquetando.

Verifique la configuración por defecto

Una configuración por defecto correcta es crucial. La mayoría de usuarios no cambiará la configuración predeterminada.

Algunas configuraciones predeterminadas importantes a revisar: Ancho de banda máximo, cantidad y longitud de túneles, número máximo de túneles participantes. Esto depende en gran medida del ancho de banda esperado y los patrones de uso de su aplicación.

Configure suficiente ancho de banda y túneles para permitir contribuir a la red a sus usuarios. Considere deshabilitar I2CP (protocolo cliente de I2P), ya que probablemente no lo necesitará y entraría en conflicto con cualquier otra instancia de I2P en marcha. Mire también en la configuración para deshabilitar la fulminación (kill) de la JVM al salir, por ejemplo.

Consideraciones de tráfico participante

Podría ser tentador para usted deshabilitar el tráfico partipante. Hay varias formas de hacer esto (modo oculto, establecer el nº máximo de túneles a 0, establecer el ancho de banda compartido por debajo de 12 KBytes/seg). Sin tráfico participante, no tiene que preocuparse por que se efectúe un cierre ordenado, sus usuarios no ven el uso de ancho de banda no generado por ellos mismos, etc. Sin embargo, hay montones de razones por las que debería permitir túneles participantes.

Lo primero de todo, el router I2P no funciona tan bien si no tiene una oportunidad de "integrarse" con la red, algo a lo que otros contribuyen tremendamente estableciendo túneles a través de usted.

En segundo lugar, más del 90% de los routers I2P en la red actual permiten tráfico participante. Es la configuración por defecto en el router I2P Java. Si su aplicación no enruta para otros y se vuelve realmente popular, entonces es una sanguijuela (leech) en la red, y perturba el equilibrio que tenemos ahora. Si su impacto se vuelve realmente grande, entonces nos convertimos en Tor, y pasamos nuestro tiempo rogando a la gente que habilite la repetición de tráfico.

En tercer lugar, el tráfico participante es tráfico de cobertura y contribuye al anonimato de sus usuarios.

Le recomendamos firmemente que no deshabilite el tráfico participante de forma predeterminada. Si hace esto y su aplicación se vuelve inmensamente popular, podría fracturar la red.

Persistencia

Debe guardar los datos del router I2P (netdb, configuración, etc.) entre las ejecuciones de este. I2P no funciona bien si tiene que resembrar a cada inicio, y eso supone una enorme carga sobre nuestros servidores de resembrado, y tampoco es muy bueno para el anonimato. Incluso si empaqueta las informaciones de los routers I2P (router infos), I2P precisa datos guardados de perfiles para lograr el mejor rendimiento.

Configurabilidad

Proporcione a sus usuarios una forma de cambiar los valores de las configuraciones importantes. Comprendemos que probablemente querrá ocultar la mayoría de la complejidad de I2P, pero es importante mostrar algunas configuraciones básicas. Además de las configuraciones por defecto anteriores, algunas configuraciones de red tales como UPnP o IP/puerto pueden ser útiles.

Consideraciones de routers I2P de inundación (floodfill)

Por encima de un cierto valor de ancho de banda, y respondiendo a otros criterios de salubridad, su router I2P se convertirá en router I2P de inundación (floodfill), lo que puede causar un gran incremento del número de conexiones y del uso de memoria (al menos con el router I2P Java). Piense en si eso es aceptable. Puede deshabilitar la característica floodfill, pero después sus usuarios más rápidos no estarán contribuyendo todo lo que podrían. También depende de la tiempo medio de ejecución continuada de su aplicación.

Resembrado

Decida si va a empaquetar las informaciones de los routers I2P (router infos) o si va a usar nuestros nodos de resembrado. La lista de nodos de resembrado Java está en el código fuente, así que si se mantiene actualizado, la lista de nodos también lo estará. Esté alerta ante un posible bloqueo por parte de gobiernos hostiles.

Reduzca el uso de recursos de red

Considere configurar los túneles de su aplicación a retardar-apertura (hasta necesitarlos), reducir-en-inactividad y/o cerrar-en-inactividad. Esto es algo directo si está usando i2ptunnel, pero tendrá que implementar algo de esto usted mismo si está usando I2CP directamente. Vea i2psnark para código que reduzca el número de túneles y cierre después el túnel, incluso en presencia de cierta actividad DHT (tabla de hash distribuida) en segundo plano.

Actualizabilidad

Incluya una característica de auto-actualización si de algún modo es posible, o al menos de auto-notificación de nueva versión. Nuestro mayor temor es un enorme número de routers I2P ahí fuera que no se puedan actualizar. Tenemos en torno a 6-8 versiones al año del router I2P Java, y es crítico para la salud de la red que los usuarios se mantengan al día. Normalmente tenemos más del 80% de la red en la última versión tras 6 semanas de la publicación de la versión, y nos gustaría continuar así. No tiene que preocuparse de deshabilitar la función integrada de auto-actualización del router I2P, ya que ese código está en la consola de este, la cual presumiblemente no está empaquetando.

Despliegue

Elabore un plan de despliegue gradual. No empuje a toda la red a la vez. Actualmente tenemos aproximadamente 25K usuarios únicos al día y 40K únicos al mes. Probablemente podemos manejar un crecimiento de 2-3X por año sin demasiados problemas. Si anticipa una escalada más rápida que esa, - O - la distribución del ancho de banda (o la del tiempo de actividad o cualquier otro rasgo relevante) de su base de usuarios es significativamente diferente a la de nuestra base de usuarios actual, verdaderamente debemos tener una charla. Cuanto más grandes sean sus planes de crecimiento, más importantes serán el resto de cosas en esta lista de comprobación.

Diseñe por, e incite a, tiempos de actividad largos

Explique a sus usuarios que I2P logra su mejor funcionamiento si se mantiene en ejecución. Pueden pasar varios minutos tras el inicio antes de que funcione bien, e incluso más tras la primera instalación. Si su tiempo medio en activo es menos de una hora, I2P probablemente es una mala solución.

Muestre el estado

Proporcione alguna indicación al usuario de que los túneles de la aplicación están listos. Aliente a tener paciencia.

Cierre ordenado

Si es posible, retrase el cierre hasta que sus túneles participantes expiren. No deje que sus usuarios rompan los túneles fácilmente, o al menos pídales que confirmen.

Educación y Donación

Estaría bien si provee a sus usuarios enlaces para conocer más acerca de I2P y para donar.

Opción para router I2P externo

Dependiendo de su base de usarios y la aplicación, puede ser útil proporcionar una opción o un paquete aparte para usar un router I2P externo.

Uso de otros servicios comunes

Si planea usar un enlace a otros servicios comunes de I2P (suscripciones (feeds) de noticias, suscripciones a hosts.txt, trackers (bittorrent), proxys de salida, etc.), asegúrese de que no está sobrecargándolos, y hable con la gente que los ejecuta para asegurarse de que no les está perjudicando.

Tiempo / Problemas NTP

I2P incluye un cliente SNTP. I2P requiere la hora correcta para operar. Compensará un reloj de sistema desfasado, pero esto puede retrasar el inicio. Puede deshabilitar las peticiones SNTP de I2P, pero no se aconseja esto a menos que su aplicación se asegure de que el reloj de sistema está correcto.

Escoja Qué empaqueta y Cómo

Como mínimo necesitará i2p.jar, router.jar, streaming.jar, y mstreaming.jar. Puede omitir los dos jars de streaming para una aplicación de sólo-datagramas. Algunas aplicaciones puede que necesiten más, p.e. i2ptunnel.jar, o addressbook.jar. No olvide jbigi.jar o un subconjunto de este para las plataformas que soporte, para hacer que la criptografía sea mucho más rápida. Actualmente los estamos compilando para Java 7, desde la 0.9.24. Si quiere hacer su propia compilación, el código fuente es en su mayoría compatible con Java 6, pero podemos comenzar a usar las características de Java 7 en cualquier momento sin avisar. Si está compilando paquetes Debian / Ubuntu, debe solicitar el paquete I2P de nuestro repositorio PPA en lugar de compilarlo. Casi con seguridad no necesita susimail, susidns, la consola del router I2P, e i2psnark, por ejemplo.

Los siguientes ficheros se deben incluir en el directorio de instalación de I2P, especificado con la propiedad "i2p.dir.base". No olvide certificates/reseed y certificates/ssl requeridos para el resembrado, ni blocklist.txt para la validación IP. El directorio geoip es opcional, pero está recomendado para que el router I2P pueda tomar decisiones basándose en la ubicación. El fichero hosts.txt puede ser necesario, puede modificarlo para incluir cualquier fichero hosts que use su aplicación. Puede añadir un fichero router.config al directorio base para superponerse a la configuración inicial predeterminada.

Los condicionantes de la licencia pueden requerir que incluya el fichero LICENSES.txt y el directorio de licencias.

  • Puede que también quiera empaquetar un fichero hosts.txt.
  • Asegúrese de especificar un bootclasspath de Java 7 si está compilando con Java 8.

Consideraciones sobre Android

Nuestra aplicación de router I2P para Android puede ser compartida por múltiples clientes. Si no está instalada, se le indicará al usuario cuando inicie una aplicación cliente.

Algunos desarrolladores han expresado preocupación acerca de que esto supone una pobre experiencia de usuario, y que desean insertar el router I2P en sus aplicaciones. Tenemos una librería de servicio del router I2P para Android en nuestra hoja de ruta, que podría facilitar la inserción. Se precisa más información.

Si requiere asistencia, por favor, contacte con nosostros.

Jars de Maven

We have a limited number of our jars on Maven Central. There are numerous trac tickets for us to address that will improve and expand the released jars on Maven Central.

Si requiere asistencia, por favor, contacte con nosostros.

Consideraciones de datagrama (DHT)

Si su aplicación está usando datagramas I2P, ej. para una DHT (tabla de hashes distribuida), hay montones de opciones avanzadas disponibles para reducir le tráfico de control e incrementar la fiabilidad. Esto puede llevar algún tiempo y experimentación para lograr que funcione bien. Tenga en cuenta los equilibrios tamaño/fiabilidad. Hable con nosotros para obtener ayuda. Es posible - y está recomendado - usar datagramas y transporte streaming para el mismo destino. No cree destinos separados para esto. No trate de almacenar sus datos sin relación en los DHTs existentes en la red (iMule, bote, bittorrent, y el router I2P). Construya el suyo propio. Si está integrando nodos semilla en el código, recomendamos que incluya varios.

Marketing colaborativo

Trabajemos juntos. No espere hasta que esté hecho. Denos su identificador de Twitter y comience a twitear acerca de ello, devolveremos el favor.

Malware

Por favor, no use I2P para el mal. Podría causar un gran daño tanto a nuestra red como a nuestra reputación.

Únase a nosotros

Esto puede ser obvio, pero únase a la comunidad. Ejecute I2P 24/7. Comience un eepsite acerca de su proyecto. Déjese caer por #i2p-dev en el IRC. Publique en los foros. Corra la voz. Podemos ayudar a conseguirle usuarios, probadores, traductores, o incluso programadores.

Ejemplos de la aplicación

Puede que desee instalar y jugar con la aplicación I2P Android, y echar un vistazo a su código en busca de un ejemplo de aplicación que empaqueta el router I2P. Vea lo que exponemos al usuario y lo que ocultamos. Mire la máquina de estado que usamos para iniciar y detener el router I2P. Otros ejemplos son: Vuze, la aplicación Nightweb Android, iMule, TAILS, iCloak, y Monero.

Ejemplo de código

Nada de lo anterior le cuenta en realidad cómo escribir su código para empaquetar el router I2P Java, así que a continuación tiene un breve ejemplo.

import java.util.Properties;
import net.i2p.router.Router;

	Properties p = new Properties();
        // add your configuration settings, directories, etc.
        // where to find the I2P installation files
	p.addProperty("i2p.dir.base", baseDir);
        // where to find the I2P data files
	p.addProperty("i2p.dir.config", configDir);
        // bandwidth limits in K bytes per second
	p.addProperty("i2np.inboundKBytesPerSecond", "50");
	p.addProperty("i2np.outboundKBytesPerSecond", "50");
	p.addProperty("router.sharePercentage", "80");
	p.addProperty("foo", "bar");
	Router r = new Router(p);
        // don't call exit() when the router stops
	r.setKillVMOnEnd(false);
	r.runRouter();

	...

	r.shutdownGracefully();
	// will shutdown in 11 minutes or less

Este código es para el caso en que su aplicación inicia el router I2P, como en nuestra aplicación Android. También podría disponer que el router I2P inicie la aplicación mediante los ficheros clients.config e i2ptunnel.config, junto con las aplicaciones web Jetty, tal como se hizo en nuestros paquetes Java. Como siempre, la gestión del estado es la parte difícil.

See also: the Router javadocs.