in bittorrent ~ read.

Como montar un Tracker Bittorrent publico

Los Tracker en la red Bittorrent son los encargados de conectar a aquellas personas que desean descargar un mismo archivo. En esencia almacenan un Hash identificativo del archivo a compartir y la dirección IP de los usuarios que lo comparten o están descargándolo. De este modo cuando nosotros descargámos un archivo .torrent y lo abrimos, lo que el cliente hace realmente es tomar el hash que contiene y preguntar por usuarios en una lista de trackers que también trae. De este modo el cliente consigue contactar con aquellos otros clientes que tienen el archivo, y así intercambiar trozos del archivo asta finalizar la descarga.

La idea es montar uno de estos trackers, pero no uno cualquiera, sino uno público, y para ello haremos uso del mismo software que utilizan trackers tan famosos como OpenBittorrent o Demonii.com. Esto es posible gracias al software libre que utilizan y que está al alcance de todos. Estos trackers tienen la peculiaridad de ser "públicos", es decir, que cualquiera puede agregar estos trackers a sus torrents sin ningún tipo de registro previo ni subida de archivo .torrent alguno.

Compilación

Todo esto lo montaremos sobre Debian 8 "Jessie" y haciendo uso de un usuario sin privilegios de root, pero se hará uso de sudo en caso de que sea necesario privilegios. Como no existe un paquete con el software necesario en los repositorios de Debian, tendremos que compilar el código fuente nosotros mismos. Para no liarnos, empezaremos creando una carpeta en la que trabajaremos:

mkdir Compilaciones
cd Compilaciones

Una vez dentro de la carpeta podemos empezar en instalar las herramientas que necesitaremos:

sudo apt install cvs git build-essential

Una vez instaladas, proseguimos con la compilación de código. En este caso de una librería: libowfat . La descargaremos haciendo uso de cvs y la compilaremos:

cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat
cd libowfat
make
cd ..

libowfat ya esta compilado y en una carpeta a la espera que la utilicemos en la compilación de nuestro tracker. Continuamos descargándonos el código fuente del tracker mediante git:

git clone git://erdgeist.org/opentracker
cd opentracker

Antes de de compilar es necesario cambiar algunos parámetros en el archivo Makefile que definirán como trabajara el tracker. Aquí hay un montón de opciones, desde forzar el uso exclusivo de ipv6 a activar estadísticas. Yo por mi parte suelo cambiar las siguientes opciones, des-comentando las lineas (quitando la #), pero podéis encontrar mas opciones y documentadas en la página del autor del software.

FEATURES+=-DWANT_ACCESSLIST_BLACK

Esta opción nos da la oportunidad de pasarle al tracker una lista negra de hashes que no deseamos que anuncie.

FEATURES+=-DWANT_COMPRESSION_GZIP
FEATURES+=-DWANT_COMPRESSION_GZIP_ALWAYS

Con esto el tracker comprimirá toda la comunicación entrante y saliente, y así disminuir el uso del ancho de banda.

FEATURES+=-DWANT_RESTRICT_STATS

Esta ultima opción nos dejara restringir el acceso a las estadísticas del tracker.

Guardamos todas las modificaciones que hemos hecho en el archivo Makefile y ya estamos preparados para compilar el código de nuestro tracker.

Ahora ya podemos compilarlo todo y conseguir el ejecutable de nuestro tracker:

make

Después de que se pase un rato compilando ya tenemos el ejecutable opentracker a nuestra disposición.

Instalación

Ahora lo que nos falta es hacer una instalación manual, crear el archivo de configuración y por ultimo un demonio para iniciar y detener el tracker a nuestro antojo. Empecemos con la instalación.

En sistemas GNU/Linux es recomendable hacer la instalación de este tipo de software que no viene en sus repositorios, en la carpeta /opt por lo que crearemos una para nuestro tracker:

sudo mkdir /opt/opentracker

Una vez creada la carpeta, solo nos hace falta copiar el ejecutable que acabamos de compilar y un ejemplo del archivo de configuración a la misma:

sudo cp opentracker /opt/opentracker
sudo cp opentracker.conf.sample /opt/opentracker/opentracker.conf
sudo touch blacklist

Configuración

Una vez terminado con todo el código y la instalación manual en /opt/opentracker, nos moveremos a esa misma carpeta y modificaremos el archivo opentracker.conf con nuestro editor favorito:

cd /opt/opentracker
sudo nano opentracker.conf

Aquí encontraremos un montón de opciones que previamente hemos activado en el Makefile. Antes de cada una encontraremos una pequeña explicación de la misma para orientarnos. Yo suelo editar las siguientes opciones des-comentando las lineas y modificandolas:

listen.tcp_udp 0.0.0.0
listen.tcp_udp 192.168.0.1:80
listen.tcp_udp 10.0.0.5:6969
listen.tcp 0.0.0.0:8080
listen.udp 10.0.0.1:80
....

Aquí definimos por donde escuchara nuestro tracker las llamadas de los clientes. Hay mil formas de combinar estas opciones: podemos hacer que escuche solo el protocolo udp o tcp, incluso ambos. También podemos definir que escuche en una interfaz indicándole la IP y el puerto de la misma. Es bastante intuitivo la verdad, siguiendo los ejemplos es fácil encontrar el modo que buscamos.

access.blacklist ./blacklist

Como ya indicamos a la hora de compilar el tracker, queremos que sea publico pero que podamos pasarle una lista de hashes que no deseamos compartir. Para ello tenemos que decir al programa que tome esos hashes del archivo blacklist que creamos en la instalación manual.

access.stats_path stats

Las estadísticas del tracker podrán ser accesibles desde la url del mismo, pero para acceder a ellas podemos personalizar el path. En este caso nos indica stats pero podemos cambiarlo por cualquier otra palabra.

Ya tenemos el tracker instalado y configurado a nuestro gusto, solamente nos falta crear un demonio que nos de opción a iniciar y detener el tracker en segundo plano. En su momento cree uno que podemos descargar de mi repositorio de Github y modificar a nuestro antojo:

git clone https://github.com/FoRTu/Opentracker-init-Script.git
cd Opentracker-init-Script
sudo cp opentracker /etc/init.d/

Una vez descargado con git y copiado en /etc/init.d solo nos hace falta modificar un par de parámetros:

nano /etc/init.d/opentracker

Hay que cambiar las siguientes variables para que apunten a los archivos necesarios:

CONF_FILE=/opt/opentracker/opentracker.conf
BIN=/opt/opentracker/opentracker

Arranque y pruebas

Una vez compilado, instalado y configurado ya lo podemos poner en marcha:

sudo /etc/init.d/opentracker start

Ahora ya podemos hacer una prueba con un cliente para ver que nos responde. Para ello nos vale utilizar alguna descarga que tengamos en curso y agregarle la dirección de nuestro tracker. El proceso no varia mucho entre distintos clientes, por ejemplo en uTorrent lo podéis hacer de la siguiente manera.

Dependiendo de la configuración que hicimos en el archivo opentracker.conf la url de nuestro tracker puede variar. Imaginemos que en la configuración hemos puesto listen.tcp_udp 192.168.1.1:6969, la url seria http://192.168.1.1:6969 o incluso udp://192.168.1.1:80. Por lo que a la hora de agregar la url podemos agregar cualquiera de las dos.

bittorrent tracker list

En la imagen de arriba podemos ver como nuestro tracker, http://192.168.1.1:6969, se encuentra en marcha ya que en la columna de Estado vemos que pone Trabajando. La columna Semillas nos indica los usuarios que tienen el archivo que deseamos descargar, pero al ser los únicos que hacemos uso de este tracker, vemos que esta vacía, es normal. En caso de que nos aparezca Connection failed o algo por el estilo, significa que no ha podido acceder al tracker ya fuese por que no esta accesible, la url este mal o que no este en marcha. Repasa los pasos anteriores o si no déjame un comentario y lo intentamos arreglar.

Otra manera de ver si el tracker esta haciendo su trabajo, es mirar las estadísticas. Para ello accedemos al tracker vía web mediante cualquier navegador, poniendo la siguiente url http://192.168.1.1:6969/stats?mode=everything. Tener en cuenta que la url puede variar según la configuración que hemos puesto.
El
Nos cargara una web en formato xml que nos mostrará un montón de información:

<?xml version="1.0" encoding="UTF-8"?>
<stats>
  <tracker_id>70535756</tracker_id>
  <version>
$Source$: $Revision$
$Source$: $Revision$
.....
$Source$: $Revision$
  </version>
  <uptime>447</uptime>
  <torrents>
    <count_mutex>0</count_mutex>
    <count_iterator>0</count_iterator>
  </torrents>
  <peers>
    <count>0</count>
  </peers>
  <seeds>
    <count>0</count>
  </seeds>
  <completed>
    <count>0</count>
  </completed>
  <connections>
    <tcp>
      <accept>5</accept>
      <announce>0</announce>
      <scrape>0</scrape>
    </tcp>
    <udp>
      <overall>0</overall>
      <connect>0</connect>
      <announce>0</announce>
      <scrape>0</scrape>
      <missmatch>0</missmatch>
    </udp>
    <livesync>
      <count>0</count>
    </livesync>
  </connections>
  <debug>
    <renew>
      <count interval="00">0</count>
      <count interval="01">0</count>
      <count interval="02">0</count>
      <count interval="03">0</count>
      .....
      <count interval="43">0</count>
      <count interval="44">0</count>
    </renew>
    <http_error>
      <count code="302 Redirect">0</count>
      <count code="400 Parse Error">0</count>
      <count code="400 Invalid Parameter">0</count>
      <count code="400 Invalid Parameter (compact=0)">0</count>
      <count code="400 Not Modest">0</count>
      <count code="403 Access Denied">0</count>
      <count code="404 Not found">0</count>
      <count code="500 Internal Server Error">2</count>
      <count code="$Source$: $Revision$">0</count>
    </http_error>
    <mutex_stall>
      <count>0</count>
    </mutex_stall>
  </debug>
</stats>

Como podéis ver, podemos encontrar un montón de datos que nos pueden indicar desde cuantos usuarios han consultado el tracker, asta cuantos torrent distintos han consultado. Si os fijáis en la url, hemos puesto mode=everything que nos devuelve toda la información, pero podemos hacer consultas mas concretas cambiando el mode=. Por ejemplo, si cambiamos a mode=peer nos devolverá solamente la cantidad de gente que ha consultado nuestro tracker. Todo esto está documentado en la pagina oficial del tracker.

Tener en cuenta que el tracker funcionara solamente en nuestra red interna, si deseamos que todo internet haga uso de el, le tendremos que dar salida a internet. Yo tuve la feliz idea de montar un tracker de este tipo en casa, y para que cualquier usuario de internet pudiese hacer uso de el, tuve que abrir algunos puertos del router y redireccionar las peticiones al la IP del tracker.

En un principio no me consumía mucho ancho de banda ya que no publicité mucho el tracker. Asta que un día empezó a consumir toda la subida de mi ancho de banda y tuve que desactivarlo. Parece ser que alguien agrego mi tracker a algún torrent que empezaron a descargar miles de personas y todas empezaron a hacer peticiones a mi tracker. En la siguiente imagen puedes ver un gráfico de la evolución. Tomar en cuenta que los datos están en K por lo que tendríamos que multiplicarlos por 1000.

bittorrent tracker stat graph

Como podemos ver, aportar nuestro granito de arena a la red bittorrent no es nada complicado. Teniendo un poco de conocimiento y tiempo, podemos hacer grandes cosas con pocos recursos.

comments powered by Disqus