internet entre amigos

cjdns

Pensaba escribir una explicación larga y compleja sobre qué es cjdns, pero me decidí a simplemente citar el readme oficial:

Cjdns implementa una red IPv6 cifrada usando criptografia de llave publica para la asignación de direcciones y una tabla distribuida de hashes para el ruteo. Esto provee redes de casi-nula-configuración, y previene mucho de los problemas de seguridad y escalabilidad que plagan a las redes existentes.

En el whitepaper de cjdns se explica mejor de que se trata todo esto. En términos sencillos y poco exhaustivos, consiste en que dos o más computadores se pueden conectar entre sí sin necesidad de pasar por un servicio proveedor de internet. Las conclusiones prácticas de esto son que las redes que se forman no son entre nodos (que tienen a su vez a varios usuarios conectados) conectados a otros nodos, sino que los usuarios se conectan unos con otros de manera libre y anónima.

¿Para qué todo esto?

Creo que la mejor forma de explicar algo es dando un ejemplo que muestre el mismo fenómeno que uno quiere explicar, pero sobre elementos que resulten más familiares.

Imaginemos un almuerzo familiar. En la mesa todos escuchan lo que todos dicen, no necesariamente todos ponen atención a todos, pero todos si quieren, pueden hacerlo. Esa mesa es una red local. Ahora, pensemos que el padre de esta familia (A) tiene un hermano (B) que vive en otra ciudad y que, a su vez, tiene su propia familia y están almorzando a la misma hora, estableciendo su propia red local. La red local A y B existen simultáneamente pero no se comunican entre sí. Agreguemos un nuevo elemento: padre A y padre B deciden poner un teléfono celular al medio de cada mesa, en alta voz y se llaman a la hora de almuerzo. Los miembros de ambas familias se podrán comunicar libremente por medio de solo hablar, aun cuando no estén fisicamente juntos. Algunos mensajes no se escucharán muy claros o se perderán si todos hablan al mismo tiempo, pero la comunicación estará establecida. En este sistema no puede haber una comunicación directa entre el hijo de A y el hijo de B, sino que esta pasaría por medio de la conexión que hay entre ambas redes locales.

Pero ¿y si cada miembro de cada familia tiene un dispositivo para comunicarse directamente con quien quiera? Hasta hace un tiempo, la respuesta sería “porque sólo hay un teléfono con altavoz en cada casa y además el costo de la comunicación es muy elevado como para que cada uno se comunique libremente con subgrupos hechos a su antojo”. Esa respuesta, habría tenido sentido hace años… y con internet pasa lo mismo. Ya no es técnicamente imposible (o notablemente caro y difícil) comunicarse directamente entre los usuarios de la red.

Agreguemos una nueva variable al ejemplo. Los padres de familia, en realidad no son padres de familia, sino que son empresas de telecomunicaciones que ponen un gran teléfono en altavoz al medio da cada mesa. Esa es la situación actual y eso es lo que permite hacer cjdns.

¿Qué hacer al estar conectado así?

Cada cual sabrá que hacer, de eso se trata la libertad. Personalmente, quiero comunicarme con un determinadas personas por medio de la red social descentralizada scuttlebutt sin depender de un pub (esto amerita una entrada distinta, que haré en otro momento, pero mientras tanto este link explica un poquito que es y acá vemos a Julian Assange sugiriendo usarla). Pero alguien podría querer crear una página personal en la que compartir fotos de su hijo recién nacido sin que pasen por ningún servidor centralizado (aun así, no debería hacerlo) o tal vez, levantar un servidor ftp para compartir libros que ha escaneado clandestinamente, etc, etc… no es una tecnología con una finalidad determinada.

Hyperboria

Una vez teniendo claro (al menos un poco) como funciona y que es lo que hace cjdns, podemos empezar a hablar de hyperboria. Nuevamente, ocuparé conceptos extraídos de la documentación oficial respecto a hyperboria:

¿Qué es Hyperboria? Hyperboria es la red de prueba de nodos cjdns.

Así de simple. Al conectarse uno a la red de hyperboria, en realidad, está conectándose a una red completa de más usuarios que están en ella. Todos a través del sistema cjdns. No es necesario entrar a hyperboria para utilizar cjdns, solo recomendable para que la red sea más grande. Personalmente, no lo haré.

Ya! quiero cjdns, y ser mi propia isp, y comunicarme solo con las personas que quiero!!”!1

Para gnulinux:

Encontré un script de autoinstalación que hacía todo bien, excepto por un paso (creaba un link simbólico de un ejecutable en vez de copiarlo). Lo arreglé gracias a la ayuda del usuario PoroCYon en el canal #cjdns en el servidor EFnet. El código del instalador está acá:

https://hastebin.com/oqomeriqir.bash

Si estás pensando “qué cresta hago con esto?!”: abre el link, copia el texto. Abre ahora un editor de texto y pégalo. guarda el archivo como instaladorcjdns.sh en tu carpeta personal. Ahora abre una terminal, escribe su (pon tu clave) y escribe ./instaladorcjdns.sh y baila mientras todo ocurre. ¡LEER MÁS ABAJO!

Para windows:

Esto no lo he testeado personalmente, pero debería funcionar: http://www.santacruzmesh.net/installer.html según indica, es un instalador gráfico, en el que con clickear siguiente un par de veces debería funcionar sin problemas. (Si alguien lo ejecuta y se entusiasma a dejar un comentario contado como lo fue, lo agrego acá).

ACTUALIZACIÓN 27/JUNIO

No tengo muy claro porqué, pero en Debian 9 (e imagino que ocurre en otras distros también) cjdns no se configura por sí solo. La solución es crear dos archivos que permitirán dejar funcionando el nodo sin problemas. Todo se hace por medio de la terminal como superusuario, en el ejemplo usaré mousepad, pero obviamente se puede usar cualquier otro editor.

i. Crear archivo cjdns.service, escribiendo en la terminal:

mousepad /etc/systemd/cjdns.service

ii. pegar el siguiente texto (y guardar el archivo):

[Unit]
Description=cjdns: routing engine designed for security, scalability, speed and ease of use
Wants=network.target
After=network.target

[Service]
ProtectHome=true
ProtectSystem=true
SyslogIdentifier=cjdroute
ExecStartPre=/bin/sh -ec “if ! test -s /etc/cjdroute.conf; \
then umask 077; \
/usr/bin/cjdroute –genconf > /etc/cjdroute.conf; \
echo ‘WARNING: A new /etc/cjdroute.conf file has been generated.’; \
fi”
ExecStart=/bin/sh -c “exec /usr/bin/cjdroute –nobg < /etc/cjdroute.conf”
Restart=always

[Install]
WantedBy=multi-user.target
Also=cjdns-resume.service

iii. crear archivo cjdns-resume.service

mousepad /etc/systemd/cjdns-resume.service

iv. pegar el siguiente texto (y guardar el archivo):

[Unit]
Description=Restart cjdns on resume from sleep
After=sleep.target

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart cjdns

[Install]
WantedBy=sleep.target

v. reiniciar cjdns

systemctl restart cjdns.service

¡Listo!

Para agregar nodos y conectarse entre sí, es necesario leer esto, es menos difícil de lo que parece, ánimo.

 

← Entrada anterior

2 Comments

  1. ¿CDJS reemplaza Tor?

Deja un comentario

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