MASTERING BITCOIN
Tabla de contenidos:

Usando Tor desde la línea de comandos

Este es un tutorial para entender Tor y usarlo con nodos de Bitcoin.

Si solo tienes instalado el nodo de Bitcoin Core omite la sección final en donde se explica como configurar el nodo de la Lightning Network de la implementación Core Lightning para que use Tor.

Autor

Bitao36
Twitter para correcciones, comentarios o sugerencias: @bitao36

El presente tutorial fue elaborado para el Curso Mastering Bitcoin a través de @libreriadesatoshi.

En el siguiente enlace puedes encontrar la documentación de referencia:
how-to-run-bitcoin-as-a-tor-hidden-service-on-ubuntu

Requerimientos

◼️ Tener instalada una distribución de Linux basada en Debian, preferiblemente Ubuntu.

Qué es Tor

Tor es una red proxy global dirigida por voluntarios. Dentro de esta red, los servicios se identifican usando sus claves públicas y el sufijo .onion

Por qué usar Tor

Usualmente, se ha utilizado para aumentar la privacidad cuando se navega por internet. En el caso específico de Bitcoin podemos aumentar la privacidad usándolo de proxy para comunicarnos con otros nodos.

Cuando tenemos un servidor detrás de un firewall o un enrutador al que no le podemos hacer una redirección de puertos, podemos usar Tor para hacerlo accesible desde el exterior. Por eso comúnmente es utilizado en nodos de la Lightning Network, ya que estos, a diferencia de los nodos de Bitcoin, deben ser accesibles desde el exterior por otros nodos de la red.

Cómo instalar Tor

En Ubuntu

Si estás usando Ubuntu debes hacer lo siguiente:

Para arrancar Tor ejecutas:

En Debian

Si estás usando Debian empieza ejecutando el siguiente comando para saber el nombre de la distribución linux que estamos usando:

y arroja lo siguiente:

Ahora vamos a crear el siguiente archivo:

Edita donde dice bullseye por lo que te haya aparecido a ti y copias allí las siguientes líneas para poder bajar los repositorios en donde se aloja el código fuente:

Presiona Ctrl+x, luego presiona ‘s’ y Enter para guardar los cambios.

Ahora ejecuta el siguiente comando para bajar la llave GPG del repositorio para poderla instalar:

Ejecutamos este comando para actualizar los repositorios que acabamos de añadir:

E instalamos:

Configuración

Ahora vamos a ir a la siguiente ruta para editar el archivo de configuración torrc:

Y añadimos las siguientes líneas:

Ahora vamos a añadir el usuario en donde está la instalación de Bitcoin al grupo de Tor. Con este comando encontramos el nombre del Tor group.

En nuestro caso aparece debian-tor, entonces añadimos el usuario admon a este grupo:

Deslogueate y logueate de nuevo para que se apliquen las modificaciones o reinicia el pc.

Ahora vamos a configurar Tor como un servicio para que arranque cada vez que inicie el pc:

Y para lanzarlo en este momento ejecutamos:

Ahora la máquina está corriendo Tor. El tráfico es normal a menos que le especifiques al software de comunicaciones que estés usando que se conecte a través de Tor como lo haremos más adelante con bitcoind.

Cómo configurar Bitcoin Core (bitcoind) para que use Tor

Estoy suponiendo que ya instalaste un nodo de Bitcoin y bajado la blockchain, de forma que podemos modificar la configuración para que bitcoind se comunique con los otros nodos exclusivamente a través de Tor y así tener más privacidad y anonimidad.

Ve a la ruta donde está el archivo bitcoin.conf y edítalo.

Voy a suponer que está en tu home, entonces tendrías que hacer lo siguiente:

El archivo bitcoin.conf quedaría así:

Presiona Ctrl+x, luego presiona ‘s’ y Enter para guardar los cambios.

Expliquemos un poco estos parámetros:

debug=tor  agrega logs que tengan que ver con tor
onlynet=onion le indica a Bitcoin Core que las conexiones salientes sean sobre Tor
proxy=127.0.0.1:9050 le indica a Bitcoin core como comunicarse mediante Tor

bind: 127.0.0.1 restringirá las conexiones entrantes de Bitcoin Core desde otros nodos, ya que solo acepta conexiones locales.

dnsseed=0 and dns=0 Evita que Bitcoin Core intente conectarse a las “semillas” de DNS predeterminadas que se encuentran el siguiente archivo del repositorio de bitcoin:
https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L116
A pesar de las restricciones entrantes/salientes que establecimos anteriormente, sin estas dos configuraciones, nuestro nodo aún intentará conectarse a estos hosts.

¿Por qué queremos evitar que se conecte a esas semillas?

Dado que a finales del año 2021 se dejó de tener soporte para la versión 2 de Tor, entonces varias personas tuvieron problemas obteniendo conexiones entrantes de nodos con la versión 3 de Tor cuando hicieron la actualización.

Por eso vamos a agregar semillas manualmente para conectarnos.
Con addnode se añaden las semillas, que son otros peers que se van a conectar a nuestro nodo. Y dado que estamos ejecutando el nodo solo sobre Tor, debemos agregar las direcciones onion de otros peers en lugar de las direcciones IP. Una vez que nos conectamos a ellos, nos envían más a los que podemos conectarnos.

Eventualmente, nuestro nodo creará una larga lista de nodos y ya no necesitará los nodos semilla, por eso más adelante los quitaremos.

La lista de nodos la extraje de este hilo de Reddit, donde un usuario tuvo problemas porque con la versión 3 de Tor y no obtenía conexiones entrantes de otros nodos, de modo que varias personas le compartieron sus direcciones onion.

https://www.reddit.com/r/Bitcoin/comments/kzhhgk/bitcoin_core_0210_tor_v3/

Terminada la explicación del archivo de configuración procedemos a detener bitcoind:

Ahora lo arrancamos de nuevo:

Si ejecutamos el comando

Podemos observar que estamos conectados mediante Tor. connections_in aún está en cero porque tarda un poco en ir obteniendo conexión de otros nodos.

Si somos curiosos y queremos saber cuando otros se conecten mediante Tor podemos ejecutar el siguiente comando:

A continuación en pantalla empezarás a ver los paquetes entrantes.

Configurar Core Lightning (lightningd) para que use Tor

Por lo general, los nodos Lightning configurados a través de un paquete de software como Umbrel, RaspiBlitz o myNode se configuran a través de Tor de manera predeterminada.

En este caso estamos haciendo una configuración manual de forma que abrimos el archivo de configuración de Tor:

y añadimos las siguientes líneas:

Presiona Ctrl+x, luego presiona ‘s’ y Enter para guardar los cambios.

Detenemos Tor:

Volvemos a lanzar Tor:

Ahora ejecutamos el siguiente comando para obtener la dirección onion que nos asignó Tor.

Esta dirección que nos acaba de arrojar es una dirección tor fija para nuestro nodo lightning. Añade esta dirección en el archivo de configuración de lightningd.

Copia las siguientes líneas en ese archivo reemplazando la que dice announce-addr por la que hayas obtenido.

Presiona Ctrl+x, luego presiona ‘s’ y Enter para guardar los cambios.

Ahora detenemos lightningd con el siguiente comando:

Ahora recargamos Tor:

E iniciamos de nuevo lightningd:

Para observar que esté funcionando, ejecutamos:

En este momento otros nodos de la Lightning Network se pueden comunicar con tu nodo.