En el primer articulo
he hablado sobre el funcionamiento de Tahoe-LAFS y los motivos por los
que resulta mucho más interesante utilizar un sistema descentralizado de
este tipo en la nube, que uno de los servicios convencionales con los
problemas que implica. Tahoe es un sistema de almacenamiento distribuido
que se puede montar en un segmento de red local o incluso directamente
en Internet siendo muy fácil de configurar y bastante estable. Tal como
explicaba en el primer artículo, los clientes de un “grid” pueden subir
ficheros y directorios de forma privada y segura, ya que los servidores
de almacenamiento del sistema no tienen la capacidad de leer y/o
escribir sobre dichos ficheros, solamente se limitan a almacenarlos y
compartirlos en el caso de que se encuentren configurados para hacerlo.
En Tahoe es posible crear varios tipos de nodos que tienen un
funcionamiento muy concreto, es así como se pueden crear nodos cliente,
servidor, introducers, servidores de estadísticas y generadores de
claves. Desde luego, los nodos cliente, servidor y los introducers son
los más interesantes desde el punto de vista funcional, ya que permiten
crear un grid sobre el que se pueden subir documentos.
En el primer artículo
se explicaba en qué consistía Tahoe, cómo instalarlo y crear un cliente
básico, el cual se conectaba a un grid por medio de un introducer que
se encuentra disponible en el proyecto para que los usuarios interesados
puedan llevar a cabo pruebas contra un sistema en funcionamiento. Dicho
introducer se encuentra disponible en internet a cualquiera que desee
conectar sus nodos clientes de Tahoe con el sistema de pruebas del
proyecto, las instrucciones para conectarse a dicho servicio se
encuentra detalladas en el siguiente enlace: https://tahoe-lafs.org/trac/tahoe-lafs/wiki/TestGrid.
Para realizar pruebas está bastante bien, sin embargo es mucho más
interesante crear un grid propio y configurarlo de tal forma que sea
posible utilizar Tahoe de forma privada y confidencial con otros
usuarios en Internet. Para conseguir esto, es necesario crear en primer
lugar un “introducer”, el cual como ya se ha explicado antes,
es el encargado de conectar al cliente con el sistema de grid, el cual
se compone de 1 o muchos servidores de almacenamiento. A continuación se
explica el procedimiento para crear un introducer ejecutando la
utilidad “tahoe”.
En primer lugar, es necesario crear un directorio en el que se
deberán crear los ficheros de configuración del introducer, una vez
creado dicho directorio, es necesario ubicarse en él y ejecutar el
siguiente comando.
>tahoe create-introducer /adastraData/AdastraRealm/Hacking/networkHacking/AdastraIntroducerIntroducer created in ‘/adastraData/AdastraRealm/Hacking/networkHacking/AdastraIntroducer’ |
Después de crear el introducer, todos los ficheros y la configuración
necesaria para que el nodo funcione correctamente, se habrá desplegado
en el directorio especificado. En dicho directorio, se ha tenido que
crear un subdirectorio llamado “private” el cual contendrá un fichero
con nombre “introducer.furl” el cual contiene la dirección del
introducer que debe ser utilizada por otros usuarios para que puedan
conectarse al sistema de grid.
A continuación, se puede iniciar el nodo ejecutando el comando “tahoe” con el argumento “start”
>tahoe start /adastraData/AdastraRealm/Hacking/networkHacking/AdastraIntroducerSTARTING ‘/adastraData/AdastraRealm/Hacking/networkHacking/AdastraIntroducer’
starting node in ‘/adastraData/AdastraRealm/Hacking/networkHacking/AdastraIntroducer’ |
Ahora que el introducer se encuentra iniciado, es el momento de
probar si su funcionamiento es correcto, para ello se debe utilizar un
nodo cliente de Tahoe y conectarlo con el introducer. Esto ya se ha
visto en el artículo anterior, así que partiendo del cliente creado en
dicho artículo, basta simplemente con editar el fichero de configuración
del nodo (tahoe.cfg) y modificar la propiedad “introducer.furl” que se
encuentra en la sección “[client]”. El valor que debe asumir dicha
propiedad debe ser el mismo que se ha generado a la hora de crear el
introducer y que se encuentra contenido en el fichero
“<INTRODUCER_DIR>/private/introducer.furl”.
Una vez el cliente apunta al introducer, se procede a arrancar.
>tahoe run ~/.tahoe/ STARTING ‘/home/adastra/.tahoe’
running node in ‘/home/adastra/.tahoe’
2015-06-28 21:38:53+0200 [-] Log opened.
2015-06-28 21:38:53+0200 [-] twistd 13.2.0 (/usr/bin/python 2.7.6) starting up.
2015-06-28 21:38:53+0200 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
2015-06-28 21:38:53+0200 [-] Listener starting on 37384
2015-06-28 21:38:53+0200 [-] NevowSite starting on 3456
2015-06-28 21:38:53+0200 [-] Starting factory <nevow.appserver.NevowSite instance at 0x7f81a2bf2440>
2015-06-28 21:38:53+0200 [-] My pid: 11224
2015-06-28 21:38:53+0200 [-] DatagramProtocol starting on 38362
2015-06-28 21:38:53+0200 [-] Starting protocol <twisted.internet.protocol.DatagramProtocol instance at 0x7f81a2c03a28>
2015-06-28 21:38:53+0200 [-] (UDP Port 38362 Closed)
2015-06-28 21:38:53+0200 [-] Stopping protocol <twisted.internet.protocol.DatagramProtocol instance at 0x7f81a2c03a28> |
Ahora que el cliente ha iniciado correctamente, se puede verificar si
se encuentra conectado con el introducer creado previamente, para ello
basta con ingresar a la consola web del nodo, la cual se encuentra
levantada en el puerto 3456.

Cliente de Tahoe conectado a un Introducer.
Finalmente, se puede detener el introducer ejecutando el comando “tahoe” con el argumento “stop”
>tahoe stop /adastraData/AdastraRealm/Hacking/networkHacking/AdastraIntroducerSTOPPING ‘/adastraData/AdastraRealm/Hacking/networkHacking/allmydata-tahoe-1.10.1/AdastraIntroducer’
process 11081 is dead |
Ahora bien, hasta este punto solamente se ha creado un introducer y
se ha podido verificar que un cliente en Tahoe puede conectarse y
subir/descargar documentos, sin embargo, tal como se podía apreciar en
la imagen anterior, en el sistema de grid no existe ningún servidor de
almacenamiento conectado, lo que significa que el sistema no funcionará
correctamente cuando un cliente intente subir documentos.
Un sistema de grid no tiene ningún sentido si no existen uno o varios
servidores de almacenamiento y para crear uno, nuevamente es necesario
modificar el fichero de configuración de Tahoe e indicar que la
instancia que utilice dicho fichero funcionará como un servidor de
almacenamiento. Como se ha mencionado antes, los servidores de
almacenamiento no tienen la capacidad de acceder a los ficheros que se
suben a su espacio de almacenamiento, ya que se encuentran cifrados y
solamente el cliente con la clave adecuada puede llegar a ellos. En este
sentido, se trata de un “Data Store” cifrado, un concepto que es
bastante utilizado en redes anónimas que siguen un modelo de
compartición distribuido y privado, como es el caso de Freenet.
Para que una instancia de Tahoe pueda funcionar como un servidor de
almacenamiento, se debe editar el fichero de configuración de dicha
instancia (tahoe.cfg) y establecer las propiedades de dicho servidor en
la sección “storage”, además, la propiedad “enabled” tiene que tener el
valor “true” para que dicha instancia funcione como un servidor de
almacenamiento.
[storage]# Shall this node provide storage service?
enabled = true
readonly = false
reserved_space = 1G |
A continuación, dicha instancia de Tahoe debe vincularse con el
introducer tal como se ha visto anteriormente, para ello se debe indicar
el valor adecuado en la propiedad “introducer.furl”.
Finalmente, se ejecuta el servidor de almacenamiento como ocurre con cualquier instancia de Tahoe, utilizando el comando “run”
>tahoe run /server/tahoe/STARTING ‘/server/tahoe’
running node in ‘/server/.tahoe’
2015-07-12 19:52:55+0200 [-] Log opened.
2015-07-12 19:52:55+0200 [-] twistd 15.2.1 (/usr/bin/python 2.7.6) starting up.
2015-07-12 19:52:55+0200 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
2015-07-12 19:52:55+0200 [-] Listener starting on 37384
2015-07-12 19:52:55+0200 [-] NevowSite starting on 3456
2015-07-12 19:52:55+0200 [-] Starting factory <nevow.appserver.NevowSite instance at 0x7f5e31f24cb0>
2015-07-12 19:52:55+0200 [-] My pid: 14783
2015-07-12 19:52:55+0200 [-] DatagramProtocol starting on 37926
2015-07-12 19:52:55+0200 [-] Starting protocol <twisted.internet.protocol.DatagramProtocol instance at 0x7f5e31ed04d0>
2015-07-12 19:52:55+0200 [-] (UDP Port 37926 Closed)
2015-07-12 19:52:55+0200 [-] Stopping protocol <twisted.internet.protocol.DatagramProtocol instance at 0x7f5e31ed04d0> |
Ahora el servidor de almacenamiento se debe encontrar vinculado con
el introducer y con esto será suficiente para que los clientes puedan
subir ficheros en la nube.

Registro del storage server
Como se puede apreciar, el sistema de grid ahora
cuenta con un servidor de almacenamiento, sin embargo serán necesario
más servidores para que se puedan subir documentos y ficheros sin
dificultades, es decir, contar con una red real de servidores
distribuidos para el almacenamiento de ficheros y documentos.
Saludos y Happy Hack!
Adastra.