La motivación para instalar mi propio nodo es tener soberanía monetaria y ser un individuo soberano. La motivación para crear esta guía surge porque muchos bitcoiners quieren tener su propio nodo y no todos tienen el conocimiento técnico para saber cual es la mejor ruta para seguir dentro del infinito mar de posibilidades que se pueden escoger.
Estos son las reflexiones, decisiones y paso a paso que seguí desde que decidí tener mi propio nodo de Bitcoin con Lightning Network.
Algunos de los tutoriales pueden ser retadores para personas no técnicas. Sin embargo si eres un usuario no tan técnico pero con muchos deseos de aprender entonces este tutorial es para ti.
Cada decisión que tomé desde el hardware a usar y que software instalar la sustento con argumentos e intento ser lo más explícito posible. Sin más preámbulo pongamos toda la carne en el asador.
Un nodo de Bitcoin puede usar las siguientes redes:
Mainnet: Es la red principal donde están los bitcoins reales (peso de la blockchain 460 GB aproximadamente en el momento de hacer esta guía).
Testnet: Es una red parecida a mainnet pero para hacer pruebas.(peso de la blockchain menos de 50 GB)
Regtest: Es una red local en la cual puedes crear varios nodos en la misma máquina.
La recomendación es usar la red de testnet para aprender y no arriesgar satoshis reales.
Si vas a instalar un nodo de testnet sólo para probar y quieres hacerlo en el PC que usas habitualmente sólo debes asegurarte que tengas más de 50 GB de espacio disponible.
Cuando quieras usar un nodo en producción o sea en mainnet, lo más aconsejable es destinar una CPU para tal efecto y tener un disco adicional debido al peso actual de la cadena de bloques.
Este artículo se va a centrar en todas las decisiones que tomé para poner un nodo personal en producción, desde el hardware , hasta el tipo de implementación y el tipo de instalación.
Tener en cuenta que cuando me refiero a nodo personal es porque un nodo también puede instalarse con el objetivo de ser enrutador o para brindar algún tipo de servicio y en esos casos hay que tener otro tipo de consideraciones y configuraciones.
Requisitos
Hardware
Los requisitos para instalar un nodo de Bitcoin son particularmente bajos, el recurso más costoso para almacenar la cadena de bloques de la red de mainnet sería el disco duro ya que actualmente pesa 460 GB aproximadamente.
Si el nodo se va usar para pruebas en red de testnet solo es necesario tener 50 GB de espacio en disco.
A continuación se detallan cuáles serían los requisitos mínimos para instalar un nodo:
CPU con procesador corei3 o similares en adelante. También puede ser una raspberry pi 4.
Memoria: Mínimo 4 GB
Disco duro de 1 Tera SSD
Buscando un buen costo beneficio me decanté por una CPU de segunda mano con las siguientes características:
CPU con procesador Corei3 o similares en adelante.
Memoria Ram: 8 GB
Disco duro HDD Sata III de 500 GB para el sistema operativo
Disco duro de 1 Tera SSD para la blockchain
¿Por qué no usé una raspberry?
En el momento en que deseaba montar el nodo era año de pandemia y las raspberry pi estaban más costosas que comprar una CPU con las características enunciadas arriba. Además una CPU con las características mínimas puede dar mejor estabilidad especialmente porque la microsd de la raspberry a veces se daña.
Software
Sistema operativo:
El sistema operativo a usar será Linux.
¿Porque Linux? Porque siempre me ha gustado la filosofía que hay detrás del software libre, a nivel de servidores es el sistema operativo más usado y cuando deseas profundizar en desarrollo de protocolos como Bitcoin, es necesario aprender a usar la terminal de comandos.
Distribución:
Aunque hay varias distribuciones de Bitcoin voy a usar Debian.
¿Porqué Debian?
Es una distribución muy estable en la que he tenido diferentes servicios sin ningún tipo de problema. Algo importante a destacar es que todos los pasos serán aplicables a cualquier distribución basada en Debian como Ubuntu o similares.
Instalación de nodo Bitcoin
Usaremos la implementación de Bitcoin Core que es la que inició el mismísimo Satoshi y que implementa el protocolo en su totalidad.
La instalación con un archivo binario es más fácil, pero en el tutorial que te voy a compartir se va a descargar el software del repositorio y lo vamos a compilar.
¿Por qué compilar?
Es mejor compilar para mejorar el desempeño, ya que las instrucciones del programa fuente son totalmente adaptadas a la arquitectura de nuestro procesador.
Usaremos la implementación Core Lightning. Tener en cuenta que antes se llamaba c-lightning porque está escrita en C, pero dado que se están empezando a escribir módulos en Rust se le cambió el nombre por algo más genérico.
¿Por que Core Lightning?
En este momento la cuota de mercado de Core Lightning es de 6% frente a un 92% de LND (aproxidamente) Esta gran brecha se ha dado porque LND ha desarrolló mas pronto herramientas y documentación para que los developers pudieran construir aplicaciones de forma muy sencilla y en este aspecto LND le tomó ventaja.
Sin embargo Core lightning tiene 4 características que me gustan y son:
Es ligero: Consume pocos recursos de la CPU.
Es modular: Cada funcionalidad está implementada como un módulo.
Es extensible mediante plugins: Se pueden construir en lenguajes como C,Python o Rust.
Acceso a comandos JSON-RPC nativos: Usando el plugin Commando y mediante sockets.
Si logras instalar tu nodo de Bitcoin con Lightning Network usando esta guía, testea el nodo invitándome un café y déjame un mensaje que te salga del corazón 🙂
Sats para un café
Para poder ejecutar un nodo Core Lightning , debes tener instalado y corriendo Bitcoin Core. En caso de que no lo tengas instalado te recomiendo que vayas primero al siguiente tutorial Como instalar un nodo de Bitcoin Core
Instalar dependencias para poder compilar lightningd
presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.
Ahora detenemos lightningd con el siguiente comando:
$lightning-cli stop
Ahora regarcamos Tor:
$sudo systemctl restart tor
E iniciamos de nuevo lightningd:
$lightningd –daemon
Para observar que esté funcionando, ejecutamos:
$lightning-cli getinfo
Si no hacemos nada más, cada vez que se reinicie el PC hay que ejecutar este comando para que bitcoind se ejecute. Por eso lo que debemos hacer es crear un servicio para que se ejecute automáticamente al iniciar el pc.
Antes de crear el servicio detengamos de nuevo lightningd para lanzarlo luego como servicio:
$lightning-cli stop
Ahora para crear el servicio vamos a la siguiente ruta:
$cd /etc/systemd/system
Y ejecutamos este comando para obtener el archivo de configuración directamente desde el repositorio de bitcoin
presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.
Ejecutamos este comando para que inicie el servicio cuando se reinicie el equipo:
$sudo systemctl enable lightningd.service
Y con este comando lo ejecutamos:
$sudo systemctl start lightningd.service
Para mirar el estado del servicio ejecutamos:
$sudo systemctl status lightningd.service
Si deseamos detenerlo usamos:
$sudo systemctl stop lightningd.service
Si has llegado hasta aquí muchas felicitaciones, tienes corriendo un nodo con Bitcoin Core y Core Lightning, ahora tienes tu propio banco y por primer vez en la historia podrás tener soberanía monetaria 🙂
Hay cuatro formas de instalar un nodo de Bitcoin, voy a enumerarlas empezando de la más fácil a la más difícil:
1.Con software plug & play como Umbrel, RaspiBlitz o similares. Estos programas tienen instaladores para raspberry pi y también pueden correr en pcs con sistema linux.
En el caso de Umbrel instala un contenedor docker con Bitcoin Core y la implementación LND de Lightning network por defecto usando Tor. Lo cual le da facilidad a usuarios no técnicos de correr un nodo de forma muy simple y con privacidad por defecto.
2.Instalar a partir de contenedores docker.
3.Instalación a partir de binarios ya compilados.En bitcoin.org hay instaladores binarios para varios sistemas operativos, es cuestión de descargarlos y seguir las instrucciones.
4.Bajar el código fuente, compilarlo e instalar.
En este tutorial vamos a desarrollar el punto 4, que puede ser retador para personas no técnicas. Si eres un usuario técnico o no tan técnico pero con muchos deseos de aprender entonces este tutorial es para ti.
Para sacarle el jugo a este tutorial debes haber instalado previamente una versión de Linux basada en Debian como Ubuntu, en mi caso lo hice en Debian 11 Bullseye y también debes haber creado otro usuario además del root. Ahora sí manos a la obra.
La instalación la hice en un Debian 11 Bullseye, pero dado que Ubuntu está basado en Debian, la instalación debe ser igual para las últimas versiones de Ubuntu.
Si tienes una instalación desde cero debes tener dos usuarios en el sistema el root y otro usuario cualquiera que será el usuario en el cual haremos toda la instalación para no trabajar con el usuario root por cuestiones de seguridad.
El usuario que vamos a usar en este tutorial se llama admon y está agregado al grupo sudo para que pueda ejecutar comandos sudo.
Para chequear si el usuario está agregado al grupo sudo ejecuta este comando cambiando admon por tu usuario
$groups admon
En caso de que el resultado anterior no se encuentre el grupo sudo agrégalo con el siguiente comando
$sudo usermod -a -G sudo admon
Instalar programas, librerías y dependencias
Programas que necesitamos
Vamos a instalar estos dos programas que los necesitaremos más adelante:
$sudo apt-get install git curl
Instalar Tor
Vamos a usar Tor, no sólo por la privacidad, sino porque de esa forma no
tenemos que hacer ninguna redirección de puertos en el router que tengamos y tampoco usar servicios dns dinámico para que se refresque nuestra ip en
caso de que sea fija, que es el caso más típico en caso de instalaciones de internet domésticas.
Ahora instalaremos Tor y lo dejaremos listo para cuando lo necesitemos más adelante.
Ejecutamos el siguiente comando para saber el nombre de la distribución linux que estamos usando
$lsb_release -c
Ahora vamos a crear el siguiente archivo
$sudo nano /etc/apt/sources.list.d/tor_repo.list
Edita donde dice bullseye por lo que te haya aparecido a ti y copias allí
las siguiente líneas para poder bajar los repositorios en donde se aloja el código fuente
deb http://deb.torproject.org/torproject.org bullseye main`
deb-src http://deb.torproject.org/torproject.org bullseye main
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:
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.
$grep User /usr/share/tor/tor-service-defaults-torrc
En nuestro caso aparece debian-tor, entonces añadimos el usuario admon a este grupo:
$sudo usermod -a -G debian-tor admon
Deslogueate y logueate de nuevo para que se apliquen las modificaciones o reinicia el pc.
Ahora vamos a configurar Tor para que arranque cada vez que inicie el pc:
$sudo systemctl enable tor
Y para lanzarlo en este momento ejecutamos
$sudo systemctl start tor
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 & lightningd.
Librerías y dependencias
Ahora necesitamos instalar algunas librerias. Al instalar librerias, a veces se puede enumerar muchas en un solo comando y separarlas con un solo espacio. En este tutorial, los dividí en grupos similares a la documentación de compilación en Github para Debian/Ubuntu
Ejecuta los siguientes comandos para instalar todas las librerías que ayudarán a compilar el código de bitcoind y que también servirán en caso de que quieras usar herramientas para aprender a desarrollar.
En caso de que quieras usar GUI(interfaz gráfica) para administrar bitcoind debes instalar estas librerías, si solo vas a usar la línea de comando no es necesario.
En este caso vamos a ir a la última versión que es la v23.0 para eso ejecutamos este comando (Si la versión es diferente a la imagen es porque el tutorial ha sido actualizado)
$git checkout v23.0
Instalamos la Berkeley Database
Esta es una base de datos que aún se necesita para poder compilar, posiblemente no se necesite en el futuro.
Instalamos la base de datos Berkeley con este comando:
$./contrib/install_db4.sh `pwd`
Con el siguiente comando exportamos la ruta donde quedó la base de datos en una variable de entorno BDB_PREFIX, esta variable la necesitamos más adelante (recuerda debes reemplazar el usuario admon por tu usuario)
$export BDB_PREFIX='/home/admon/bitcoin/db4'
Empezamos el proceso de compilación
Ejecutamos el siguiente comando para preparar el entorno
$./autogen.sh
El anterior comando creó el script configure. A este script se le puedan pasar varios parámetros para ajustar a la medida de nuestras necesidades.
En este caso sólo le vamos a pasar los parámetros para configurar la base de datos Berkeley que ya instalamos en un paso previo.
Con esta configuración vas a usar GUI (Interfaz gráfica) y requieres las librerías QT. En caso de que no quieras usar la GUI podemos pasarle el parámetro –with-gui=no y quedaría así:
Si todo estuvo sobre ruedas se deben haber creado los scripts para compilar bitcoind.
En caso de que no, mira qué librerías faltaron las instalas e intenta de nuevo.
Ahora si compilamos:
$make -j$(nproc)
Si todo esta bien ya se creó el compilado. Ahora lo instalamos:
$sudo make install
Esto debe haber instalado bitcoind en esta ruta /usr/local/bin/bitcoind
al igual que /usr/local/bin/bitcoin-cli y /usr/local/bin/bitcoin-qt en caso de que hayas usado GUI.
Configurar el archivo bitcoin.conf
Cuando se ejecuta bitcoind por primer vez se crea un directorio .bitcoin en el home del usuario que contiene el archivo bitcoin.conf
Como aún no hemos ejecutado bitcoind vamos a crear el directorio:
$mkdir ~/.bitcoin $cd .bitcoin
Ahora creamos el archivo de configuración bitcoin.conf con cualquier editor de texto, voy a usar nano por simplicidad
$nano bitcoin.conf
Este archivo puede tener parámetros para configurar un nodo completo que baje toda la blockchain o un nodo podado que baje una blockchain parcial para ahorrar espacio.
Está fuera del alcance de este tutorial explicar sobre la conveniencia de instalar un nodo podado, así que usaremos una configuración para instalar un nodo completo.
Lo más recomendable es que la blockchain no la almacenes en el mismo disco donde tienes instalado el sistema operativo. La sugerencia es destinar para ello un disco SSD de 1 Tera. Si tomas este camino, ten en cuenta que debes montar el disco con fstab.
Introduce esta línea en el archivo de texto que estás creando:
assumevalid=0
txindex=1
En caso de que hayas montado un disco para almacenar la blockchain, debes añadir una línea para indicar la ruta en donde montaste el disco. Voy a suponer que la ruta es /home/admon/BTC_Blockchain, entonces la línea quedaría así:
datadir=/home/admon/BTC_Blockchain
Antes de ejecutar bitcoind en segundo plano, ten en cuenta que se empezará a bajar toda blockchain que al momento de crear este tutorial está en 400 Gigas aproximadamente. Eso demora varios días dependiendo de la conexión a internet.
Para que esta descarga sea más rápida la blockchain se bajará por la clearnet ya que no hemos configurado Tor aún.
Ejecutar bitcoind y descargar la blockchain usando clearnet
Ahora ejecuta bitcoind como un demonio para que se ejecute en segundo plano y empiece a bajar la blockchain:
$bitcoind -daemon
Para chequear el progreso usar este comando:
$bitcoin-cli getblockchaininfo
El parametro verificationprogress te indicará el porcentaje del progreso, cuando llegue a 0.99 ya ha descargado la blockchain completa.
Configurar bitcoind para que use exclusivamente Tor y cargue al iniciar el sistema.
Cuando haya bajado la blockchain 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.
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 para que solo se realicen a través de Tor. Si nunca has ejecutado un nodo antes, otros peers no intentarán conectarse con tu nodo porque no saben que existe, pero aún podrían hacerlo.
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 version 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 sólo 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.
Hay dos parámetros llamados rpcuser y rpcpassword que si no se usan como en este caso, Bitcoin core por defecto genera un archivo .cookie para autenticarse. En caso de que ingreses estos parámetros debes especificarlos más tarde en la configuración del nodo de lightnind para que este se comunique por el protocolo RPC con bitcoind.
Terminada la explicación del archivo de configuración procedemos a detender bitcoind:
$sudo bitcoin-cli stop
Ahora los arrancamos de nuevo:
$sudo bitcoind -daemon
Si ejecutamos el comando
$bitcoin-cli getnetworkinfo
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 no hacemos nada más, cada vez que se reinicie el PC hay que ejecutar este comando para que bitcoind se ejecute. Por eso lo que debemos hacer es crear un servicio para que se ejecute automáticamente al iniciar el pc.
Para lograrlo vamos a la siguiente ruta:
$cd /etc/systemd/system
Y ejecutamos este comando para obtener el archivo de configuración directamente desde el repositorio de bitcoin $sudo wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/init/bitcoind.service
Ahora tenemos que modificar las rutas donde esta la blockchain de bitcoin y comentar tres parámetros, por eso abrimos el archivo:
$sudo nano bitcoind.service
Y editamos las rutas en el parámetro ExecStart, en mi caso con el usuario admon queda así:
Presiona Ctrl+x , luego presiona ‘s’ y enter para guardar los cambios.
Ejecutamos este comando para que inicie el servicio cuando se reinicie el equipo:
$sudo systemctl enable bitcoind.service
Y con este comando lo ejecutamos:
$sudo systemctl start bitcoind.service
Para mirar el estado del servicio ejecutamos:
$sudo systemctl status bitcoind.service
Si deseamos detenerlo usamos:
$sudo systemctl stop bitcoind.service
Si has llegado hasta aquí felicitaciones, ahora tienes instalado un nodo de Bitcoin instalado que te proveerá privacidad y ayudará a la descentralización de la red.
Comentarios recientes