C贸mo montar un nodo de Bitcoin en Raspberry Pi paso a paso
Un nodo de Bitcoin es un ordenador o dispositivo que est谩 corriendo un software que le permite validar completamente las transacciones y bloques de la blockchain de Bitcoin en funci贸n de las reglas de consenso para evitar la inclusi贸n de transacciones no leg铆timas. Los nodos son uno de los pilares b谩sicos que mantienen la seguridad e integridad de la cadena de bloques.
Pero un nodo de Bitcoin no solo aporta beneficios a la red sino tambi茅n al usuario que lo ejecuta, que, gracias a 茅l, obtiene total independencia de terceros para poder acceder a la blockchain y propagar sus transacciones adem谩s mejorar considerablemente su seguridad y privacidad.
Índice de contenido
- 1. Requisitos iniciales para montar un nodo de Bitcoin
- 2. Preparando la Raspberry Pi
- 3. Seguridad y Privacidad. Protegiendo nuestro nodo de Bitcoin.
- 4. Instalando Bitcoin Core
- 5. Ampliando nuestro nodo con Electrum Server y BTC RPC Explorer
Requisitos iniciales para montar un nodo de Bitcoin
Para poder montar Bitcoin Core en una Raspberry Pi vamos a necesitar lo siguiente:
- Raspberry Pi 3 o 4. Recomendado: Raspberry Pi 4 (4GB).
- Carcasa para Raspberry Pi (Opcional pero recomendado).
- Tarjeta MicroSD de 16 a 32 GB. Recomendado: 32 GB.
- Disco duro HDD o SDD de m铆nimo 1 TB. Recomendado: SSD de 2 TB.
- Adaptador de corriente Raspberry Pi oficial (Opcional).
Recomendamos la versi贸n de Raspberry Pi 4 ya que es la m谩s potente y ha sido la utilizada para preparar esta gu铆a. Tambi茅n recomiendo un disco duro SSD de al menos 2 TB. Los discos SSD son m谩s r谩pidos y a la larga dar谩n menos problemas y 2 TB para garantizar el espacio en un futuro, pero si quieres ahorrar algo de dinero con un HDD de 1 TB tambi茅n va a funcionar. La tarjeta MicroSD si recomiendo que sea de 32 GB para ir instalando las actualizaciones y no quedarnos sin espacio.
Preparando la Raspberry Pi
En esta secci贸n voy a explicar desde como instalar el sistema operativo en la Raspberry Pi hasta toda la configuraci贸n necesaria para dejar la Raspberry Pi lista para ejecutar un nodo de Bitcoin.
Instalando el sistema operativo
Para instalar el sistema operativo nos vamos a apoyar en Raspberry Pi Imager, una herramienta muy simple y 煤til creada por Raspberry Foundation y disponible para Windows, Linux y MacOS. Podemos descargarla directamente desde la p谩gina web de Raspberry. La instalaci贸n no tiene mucho misterio ya que es como cualquier otra aplicaci贸n.
Una vez instalada la ejecutamos y veremos que hay dos opciones para configurar: Operating System y Storage. En Operating System vamos a escoger Other general-purpose OS > Ubuntu > Ubutnu Server 22.04.1 LTS. Cuando he escrito esta gu铆a la 煤ltima versi贸n es la 22.04.1, si cuando vayas a seguir esta gu铆a existe una versi贸n m谩s actual no dudes en usarla. Pero recuerda que debe la versi贸n server y de 64-bit.
La otra opci贸n es la de Storage聽y aqu铆 debemos indicar la tarjeta MicroSD donde instalaremos el sistema. Para ello debemos tener previamente la tarjeta conectada a nuestro ordenador. Es importante tener en cuenta que este proceso va a borrar toda la informaci贸n que tenga la tarjeta, por lo que si tenemos datos que queramos mantener debemos hacer una copia antes de iniciar el proceso.
Una vez seleccionadas las dos opciones la pantalla nos quedar铆a as铆:
Ya solo nos quedar铆a pulsar el bot贸n de 芦Write禄 y esperar a que el proceso acabe.
Configuraci贸n de red
En este punto vamos a configurar la red de nuestra Raspberry Pi para que nuestro nodo tenga una direcci贸n IP est谩tica y esta no cambie con el tiempo. Si est谩s siguiendo la gu铆a con una Raspberry Pi 4 tienes la opci贸n de configurarlo por WiFi o por cable. Si est谩s con una Raspberry Pi solo podr谩s configurarlo por cable.
Ambas configuraciones se har谩n modificando el fichero 芦network-config禄 que se encuentra en la ra铆z de la tarjeta MicroSD. Editamos el fichero con el block de notas o el editor de texto que prefiramos.
Configuraci贸n WiFi (solo Raspberry Pi 4)
Veremos en el fichero una secci贸n que empieza por 芦wifis禄 y que tiene todas las l铆neas comentadas con el car谩cter 芦#禄.聽 Debemos cambiar toda esta parte para que quede de la siguiente manera:
wifis: wlan0: dhcp4: false addresses: [192.168.1.55/24] gateway4: 192.168.1.1 nameservers: addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4] optional: true access-points: "Nombre Wifi": password: "MiPassword123"
En esta configuraci贸n hemos escogido la direcci贸n IP 192.168.1.55 para nuestro nodo. Antes de escoger esta direcci贸n debemos comprobar que no est茅 siendo utilizada por ning煤n otro dispositivo en nuestra red. En caso de ser utilizada deberemos escoger otra direcci贸n 192.168.1.XX que est茅 libre. Tambi茅n hemos configurado la propia puerta de enlace como nameservers y como secundarios los DNS de Google. Si conoces cuales son los nameservers de tu ISP puedes configurarlos directamente en vez de los que vienen en la configuraci贸n.
Configuraci贸n por cable
ethernets: eth0: addresses: - 192.168.1.55/24 gateway4: 192.168.1.1 nameservers: addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4] optional: true
Al igual que con la configuraci贸n del WiFi, si hemos escogido configurar el acceso a la red por cable deberemos asegurarnos que la IP escogida, en este caso 192.168.1.55, est茅 libre y no est茅 siendo usada por otro dispositivo. De igual manera si conocemos los nameservers de nuestra ISP podemos configurarlos tambi茅n en vez de los nameservers p煤blicos de Google.
Conectando con la Raspberry Pi
Si todo ha ido bien, ya podr铆amos insertar la tarjeta MicroSD en nuestra Raspberry Pi, conectar el disco duro y conectar la fuente de potencia (y el cable de ethernet en caso de configurarla por cable). Tras unos minutos de arranque deber铆a estar lista para conectarnos a ella. Para conectar hay diferentes formas dependiendo del sistema operativo en el que nos encontremos.
En cualquier caso, la primera vez que conectemos tendremos un usuario y contrase帽a por defecto para conectar. Los datos son:
- Usuario: ubuntu
- Password: ubuntu
Importante: La primera vez que conectemos Ubuntu nos va a pedir que cambiemos la contrase帽a por defecto.
Conectar desde Windows
Para conectar desde Windows yo recomiendo usar la herramienta Putty. La configuraci贸n es muy sencilla, simplemente pondremos en 芦Host name禄 la direcci贸n IP que configuramos en los pasos anteriores, en puerto colocaremos 22 (el puerto para SSL) y tipo de conexi贸n marcaremos SSL.
Conectar desde Linux y MacOS
Para conectar desde estos sistemas simplemente usaremos el comando SSH:
ubuntu@bitcoinnode$ ssh ubuntu@192.168.1.55
Configurando el sistema operativo
Ahora que ya tenemos el sistema instalado, conectado a la red y podemos conectarnos sin problemas es hora de hacer algunas 煤ltimas configuraciones. Lo primero vamos a darle un nombre de m谩quina al nodo, para eso vamos a ejecutar el siguiente comando:
ubuntu@bitcoinnode$ sudo hostnamectl set-hostname bitcoinnode
Ahora vamos a configurar nuestra zona horaria, para eso vamos a ejecutar el siguiente comando:
ubuntu@bitcoinnode$ timedatectl set-timezone Europe/Madrid
Yo al encontrarme en Espa帽a lo he configurado con el timezone Europe/Madrid, pero te encuentras en otra parte del mundo aqu铆 te dejo la lista de timezones disponibles.
Actualizando el sistema operativo
Antes de continuar vamos a actualizar nuestro sistema operativo y as铆 evitar problemas m谩s adelante. Para actualizarlo vamos a ejecutar los siguientes dos comandos:
ubuntu@bitcoinnode$ sudo apt update
ubuntu@bitcoinnode$ sudo apt upgrade
Una vez termine de actualizarse vamos a instalar una serie de paquetes que nos vendr谩n muy bien m谩s adelante. Para eso vamos a ejecutar el siguiente comando:
ubuntu@bitcoinnode$ sudo apt install raspi-config rpi-eeprom git curl bash-completion jq qrencode dphys-swapfile –install-recommends
Con este comando estaremos instalando lo siguiente:
- raspi-config: Es el gestor de configuraci贸n de Raspberry.
- rpi-eeprom:聽 Es una actualizaci贸n de bootloader de Raspberry Pi.
- git:聽El cliente para manejar el gestor de repositorios GIT.
- curl:聽Es un cliente para trabajar con urls y descargar archivos desde la consola de comandos.
- bash-completion: Es un paquete que nos facilita trabajar con la consola permitiendo completar los comandos y directorios.
- jq: Es un procesador de JSON para la l铆nea de comandos.
- qrencode: Es un paquete para generar y leer c贸digos QR en Linux.
- dphys-swapfile: Un paquete muy 煤til para trabajar con el fichero de swap.
Una vez instalados todos los paquetes, vamos a limpiar la instalaci贸n y vamos a reiniciar la Raspberry Pi para que todos los cambios queden aplicados.
ubuntu@bitcoinnode$ sudo apt –fix-broken install
ubuntu@bitcoinnode$ sudo apt autoremove
ubuntu@bitcoinnode$ sudo reboot
Tras unos minutos de reinicio podremos volver a conectar a nuestra Raspberry Pi.
Configuraci贸n espec铆fica para Raspberry Pi
Aunque esta gu铆a est谩 pensada para Raspberry Pi, puede ser instalada en cualquier otro dispositivo compatible con un Ubuntu Server 64-Bit. Si no est谩s usando una Raspberry Pi, puedes saltarte este paso.
Vamos a configurar la Raspberry Pi para que use todo el espacio disponible en nuestra tarjeta MicroSD. Para eso vamos a ejecutar el siguiente comando:
ubuntu@bitcoinnode$ sudo raspiconfig
Entre las opciones que nos presenta, escogeremos 芦8聽 Update禄. Una vez termine de actualizarse, repetiremos el comando anterior y escogeremos la opci贸n 芦Advanced Options > Expand Filesystem禄. Una vez finalizado el proceso reiniciaremos la Raspberry Pi con el comando:
ubuntu@bitcoinnode$ sudo reboot
Creaci贸n de usuarios
Durante la gu铆a vamos a trabajar con varios usuarios, los cu谩les cada uno tendr谩 un prop贸sito espec铆fico.
Usuario administrador
Aunque el usuario por defecto 芦ubuntu禄 ya cumple con esta funci贸n, se recomienda no usar ese usuario y crear un usuario espec铆fico para la administraci贸n. Para ello vamos a ejecutar los siguientes comandos:
ubuntu@bitcoinnode$ sudo adduser admin –ingroup sudo
ubuntu@bitcoinnode$ sudo adduser admin sudo
Usuario bitcoin
Cuando instalemos Bitcoin Core, el proceso va a correr en segundo plano bajo el control del usuario 芦bitcoin禄 el cu谩l no tendr谩 permisos de administrador y no podr谩 cambiar la configuraci贸n del sistema. Esto se hace as铆 por motivos de seguridad.
ubuntu@bitcoinnode$ sudo adduser bitcoin
Ahora vamos a incluir al usuario 芦admin禄 en el grupo 芦bitcoin禄 para que pueda ver los ficheros de configuraci贸n de Bitcoin Core.
ubuntu@bitcoinnode$ sudo adduser admin bitcoin
Y para finalizar vamos a reiniciar la Raspberry Pi.
ubuntu@bitcoinnode$ sudo reboot
Importante: Cuando volvamos a conectar, 隆recordad conectar con el usuario 芦admin禄!
ubuntu@bitcoinnode$ ssh admin@192.168.1.55
Montando el disco duro
En esta secci贸n vamos a formatear el disco duro en el formato Ext4 y lo vamos a montar y configurar para que se automonte cada vez que arrancamos el nodo.
Creando la partici贸n EXT4
Para crear la partici贸n vamos a ejecutar el siguiente comando:
admin@bitcoinnode$ sudo fdisk /dev/sda
A continuaci贸n, tendremos que presionar la tecla 芦n禄 para crear una nueva partici贸n. El resto de opciones que nos pregunta las dejaremos por defecto simplemente presionando la tecla Enter en cada una de ellas. Una vez termine la creaci贸n, para salir del men煤 de Fdisk pulsaremos la tecla 芦q禄.
Ahora vamos a crear el sistema de archivos en la partici贸n, para eso vamos a ejecutar el comando:
admin@bitcoinnode$ sudo mkfs.ext4 /dev/sda1
Si todo ha ido correctamente, no habremos recibido ning煤n mensaje de error y podremos proceder a reiniciar nuestra Raspberry Pi
admin@bitcoinnode$ sudo reboot
Montando el disco duro externo
Ahora tenemos que montar el disco duro para poder acceder a 茅l desde el sistema de ficheros. Lo primero que vamos a hacer es localizar el UUID de nuestro disco duro, para eso ejecutaremos el comando:
admin@bitcoinnode$ lsblk -o NAME,MOUNTPOINT,UUID,FSTYPE,SIZE,LABEL,MODEL
Y deber铆amos ver algo parecido a esto:
Nos apuntaremos el UUID del disco duro que vamos a utilizar despu茅s.
Ahora vamos a editar el fichero fstab para hacer que el disco duro se monte autom谩ticamente cada vez que arranquemos la Raspberry Pi. Para eso vamos a ejecutar el comando:
admin@bitcoinnode$ sudo nano /etc/fstab
Y simplemente tenemos que a帽adir al final del archivo una nueva l铆nea con el siguiente contenido:
UUID=XXX-XXX-XXX /mnt/ext ext4 rw,nosuid,dev,noexec,noatime,nodiratime,auto,nouser,async,nofail 0 2
Donde simplemente tendremos que sustituir 芦XXX-XXX-XXX禄 por el UUID completo que hab铆amos copiado en el paso anterior.
Ahora lo siguiente ser谩 crear el directorio donde se va a montar el disco duro y que hemos definido previamente en el fichero fstab. Vamos a ejecutar el comando:
admin@bitcoinnode$ sudo mkdir /mnt/ext
Finalmente vamos a montar todas las unidades:
admin@bitcoinnode$ sudo mount -a
Y para verificar que est茅 el disco duro montado correctamente ejecutaremos el siguiente comando:
admin@bitcoinnode$ df -h /mnt/ext
Y si todo ha ido bien veremos algo parecido a esto (en mi ejemplo, ya tengo la blockchain descargada por lo que los tama帽os no ser谩n iguales):
Creando el directorio bitcoin
Lo siguiente que tenemos que hacer es crear el directorio 芦bitcoin禄 que es donde nuestro Bitcoin Core va a descargar la blockchain. Para eso lo primero tenemos que hacer propietario al usuario 芦bitcoin禄 del directorio donde estamos montando el disco duro. Para eso vamos a ejecutar el comando:
admin@bitcoinnode$ sudo chown -R bitcoin:bitcoin /mnt/ext/
Ahora vamos a cambiarnos al usuario 芦bitcoin禄 para seguir ya trabajando con 茅l. Para cambiar de usuario en Linux simplemente tenemos que ejecutar el comando:
admin@bitcoinnode$ sudo su – bitcoin
Ya desde el usuario Bitcoin vamos a movernos a la carpeta del disco duro y vamos a crear el directorio 芦bitcoin禄:
admin@bitcoinnode$ sudo cd /mnt/ext
admin@bitcoinnode$ sudo mkdir bitcoin
Para verificar que el directorio se ha creado correctamente, vamos a probar a escribir un fichero y a borrarlo despu茅s. Para eso vamos a ejecutar los comandos:
admin@bitcoinnode$ touch bitcoin/directorio.test
admin@bitcoinnode$ rm bitcoin/directorio.test
Si lo hemos creado y eliminado correctamente, ya tenemos el disco duro casi listo para empezar a descargar la blockchain.聽 Ahora vamos a salir del usuario 芦bitcoin禄 para volver al usuario 芦admin禄 con el comando:
admin@bitcoinnode$ exit
Mover el fichero de intercambio
El fichero de intercambio es un fichero de apoyo a la memoria muy importante en Linux pero que si lo dejamos en nuestra tarjeta MicroSD puede da帽arla con el tiempo. Por eso vamos a moverlo a nuestro disco duro donde no tendremos ning煤n problema con el. Para ello vamos a ejecutar el comando:
admin@bitcoinnode$ sudo nano /etc/dphys-swapfile
Y simplemente tenemos que a帽adir lo siguiente:
CONF_SWAPFILE=/mnt/ext/swapfile
Y para finalizar vamos a regenerar el fichero en la nueva ruta y vamos a reiniciar la Raspberry Pi para aplicar los cambios:
admin@bitcoinnode$ sudo dphys-swapfile install
admin@bitcoinnode$ sudo reboot
Con esto ya hemos acabado con la configuraci贸n tanto del sistema operativo como de la Raspberry Pi y nos encontramos listos para empezar a instalar Bitcoin Core.
Seguridad y Privacidad. Protegiendo nuestro nodo de Bitcoin.
En esta secci贸n vamos a hacer algunas configuraciones b谩sicas a nivel de seguridad como instalar un firewall, aumentar el l铆mite de conexiones e instalar Tor para que todos nuestros servicios corran sobre 茅l.
Instalando Uncomplicated Firewall
UFW es un firewall disponible para Linux que recomiendo mucho debido a su extremada simpleza. Para instalarlo tan solo deberemos ejecutar el comando:
admin@bitcoinnode$ sudo apt install ufw
Una vez instalado vamos a configurarlo y levantarlo con los siguientes comandos:
admin@bitcoinnode$ sudo ufw default deny incoming
admin@bitcoinnode$ sudo ufw default allow outgoing
admin@bitcoinnode$ sudo ufw allow 22 comment ‘allow SSH’
admin@bitcoinnode$ sudo ufw allow 50002 comment ‘allow Electrum SSL’
admin@bitcoinnode$ sudo ufw enable
admin@bitcoinnode$ sudo systemctl enable ufw
Con esto hemos limitado las conexiones al puerto de SSH (22) y al puerto donde habitualmente ejecuta el servicio de Electrum (50002). Si tienes intenci贸n de cambiar este puerto por defecto, debes recordar actualizar las directivas del router para que permita la entrada de paquetes por el nuevo puerto.
Si todo ha ido bien durante la configuraci贸n, podremos ejecutar el siguiente comando y deberemos ver un resultado similar:
admin@bitcoinnode$ sudo ufw status
Aumentar el l铆mite de ficheros abiertos
Cuando se reciben peticiones desde internet, se crea y abre un fichero por cada petici贸n TCP recibida. Si tenemos muchas peticiones y no hemos aumentado el l铆mite de ficheros empezaremos a ver el conocido error: 芦Can’t accept connection: too many open files禄.
Para aumentar el l铆mite de ficheros abiertos necesitamos agregar unas l铆neas en la configuraci贸n de seguridad. Para ello ejecutaremos el comando:
admin@bitcoinnode$ sudo nano /etc/security/limits.conf
Y agregaremos lo siguiente al final del archivo:
* soft nofile 128000 * hard nofile 128000 root soft nofile 128000 root hard nofile 128000
Para guardar pulsaremos control + O聽 y seguidamente pulsamos control + X para salir.
Ahora deberemos modificar dos ficheros m谩s y a帽adir una l铆nea al final para que esta nueva configuraci贸n se cargue en las sesiones:
admin@bitcoinnode$ sudo nano /etc/pam.d/common-session
session required pam_limits.so
admin@bitcoinnode$ sudo nano /etc/pam.d/common-session-noninteractive
session required pam_limits.so
Y para terminar que se apliquen todos los cambios vamos a reiniciar la Raspberry Pi:
admin@bitcoinnode$ sudo reboot
Instalando y configurando Tor
Tor es un proyecto de software gratuito creado por Tor Project que nos permite anonimizar el tr谩fico de internet enrut谩ndolo por una red de nodos lo que hace extremadamente dif铆cil poder seguir un paquete hasta su origen.
Para poder instalar Tor en nuestro nodo antes debemos a帽adir sus repositorios a la lista de fuentes del sistema. Para ello ejecutamos el comando:
admin@bitcoinnode$ sudo nano /etc/apt/sources.list
Y agregamos las siguientes l铆neas:
deb https://deb.torproject.org/torproject.org impish main deb-src https://deb.torproject.org/torproject.org impish main
A continuaci贸n, tenemos que actualizar la lista de repositorios con el comando:
admin@bitcoinnode$ sudo apt update
Y ya podemos instalar Tor con el comando:
admin@bitcoinnode$ sudo apt install tor
Una vez que termine de instalarse debemos verificar que el usuario de fichero 芦tor-service-defaults-torrc禄 sea 芦debian-tor禄:
admin@bitcoinnode$ cat /usr/share/tor/tor-service-defaults-torrc
Ahora para que los servicios de Bitcoin Core puedan correr sobre Tor necesitamos incluir al usuario 芦bitcoin禄 en el grupo 芦debian-tor禄. Para eso vamos a ejecutar el comando:
admin@bitcoinnode$ sudo adduser bitcoin debian-tor
Si todo ha ido bien podremos comprobar que el usuario 芦bitcoin禄 pertenezca al grupo 芦debian-tor禄:
admin@bitcoinnode$ cat /etc/group | grep debian-tor
Para finalizar solo nos queda configurar Tor, para eso deberemos editar su fichero de configuraci贸n con el comando:
admin@bitcoinnode$ sudo nano /etc/tor/torrc
En este fichero debemos localizar estas dos l铆neas y descomentarlas eliminando el car谩cter 芦#禄 que viene por delante:
ControlPort 9051 CookieAuthentication 1
Y antes de salir del fichero debemos agregar las siguientes l铆neas:
CookieAuthFileGroupReadable 1 HiddenServiceDir /var/lib/tor/hidden_service_ssh/ HiddenServiceVersion 3 HiddenServicePort 22 127.0.0.1:22
Guardamos los cambios con 芦control + O禄 y salimos del fichero con 芦control + X芦. Ahora vamos a reiniciar la Raspberry para que se apliquen todos los cambios:
admin@bitcoinnode$ sudo reboot
Y ahora si queremos ver nuestra direcci贸n onion para conectar por SSH bajo Tor a nuestro nodo podemos hacerlo con el comando:
admin@bitcoinnode$ sudo cat /var/lib/tor/hidden_service_ssh/hostname
Instalando Bitcoin Core
En esta gu铆a vamos a utilizar Bitcoin Core para montar nuestro nodo de Bitcoin. Bitcoin Core es el software que se encargar谩 de descargar y sincronizar toda la blockchain de Bitcoin y validar谩 toda las transacciones existentes y las futuras que llegar谩n. Es importante tener en cuenta que se van a descargar todas las transacciones desde 2009 y esto, mientras escribo esta gu铆a, supone ya un peso de 428GB.
Descargando e instalando los binarios de Bitcoin Core
Lo primero que vamos a hacer es descargar los binarios de Bitcoin Core para poder instalarlo en nuestro sistema. Hay que tener en cuenta que Bitcoin Core sigue evolucionando y la 煤ltima versi贸n disponible puede ser superior al de esta gu铆a. Por eso recomiendo siempre revisar en la web oficial cu谩l es la 煤ltima versi贸n, y simplemente ajustar los pr贸ximos comandos a esta versi贸n.
Lo primero, vamos a acceder a nuestro nodo con el usuario 芦admin禄 y vamos a movernos al directorio 芦tmp禄 que en Linux este directorio es un directorio especial que se borra tras cada reinicio del sistema.
admin@bitcoinnode$ cd /tmp
Ahora vamos a descargar en esta carpeta los binarios de Bitcoin Core, para ello vamos a ejecutar el siguiente comando y vamos a esperar a que termine la descarga:
admin@bitcoinnode$ wget https://bitcoincore.org/bin/bitcoin-core-23.0/bitcoin-23.0-aarch64-linux-gnu.tar.gz
Una vez descargados los binarios, vamos a descomprimirlos a instalarlos con los siguientes dos comandos:
admin@bitcoinnode$ tar -xvf bitcoin-23.0-aarch64-linux-gnu.tar.gz
admin@bitcoinnode$ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-23.0/bin/*
Y para comprobar que Bitcoin Core est谩 instalado correctamente, vamos a pedirle que nos muestre la versi贸n, lo cual nos deber铆a indicar 芦Bitcoin Core version v23.0.0禄:
admin@bitcoinnode$ bitcoind –version
Configuraci贸n de Bitcoin Core
Ahora lo que debemos hacer es preparar el directorio donde se va a descargar toda la informaci贸n de Bitcoin. Toda esta descarga la realiza el proceso (o demonio) 芦bitcoind禄 que tratar谩 de guardar la informaci贸n en la ruta 芦/home/bitcoin/.bitcoin禄. Esta ruta quedar铆a en nuestra tarjeta microSD y aqu铆 no podemos guardar la blockchain por motivos que ya hemos explicado antes. Lo que vamos a hacer es crear un enlace simb贸lico para que relacione esa ruta con la carpeta que ya hab铆amos creado para el prop贸sito de descargar la blockchain de Bitcoin. Para esto, vamos a cambiarnos al usuario 芦bitcoin禄:
admin@bitcoinnode$ sudo su – bitcoin
Y vamos a ejecutar el siguiente comando para crear el enlace:
bitcoin@bitcoinnode$ ln -s /mnt/ext/bitcoin /home/bitcoin/.bitcoin
Si todo ha ido bien, ejecutando el siguiente comando deber铆amos ver una respuesta como esta:
bitcoin@bitcoinnode$ ls – la
Ahora vamos a crear el fichero de configuraci贸n para Bitcoin Core. Para ello vamos a ejecutar el siguiente comando que crear谩 el fichero:
bitcoin@bitcoinnode$ nano /mnt/ext/bitcoin/bitcoin.conf
Y en su interior vamos a copiar el siguiente contenido:
# Bitcoin daemon server=1 txindex=1 # Network listen=1 listenonion=1 proxy=127.0.0.1:9050 bind=127.0.0.1 # Connections rpcuser=bitcoinnode rpcpassword=CHANGE_THIS_PASSWORD maxconnections=40 maxuploadtarget=5000 zmqpubrawblock=tcp://127.0.0.1:28332 zmqpubrawtx=tcp://127.0.0.1:28333 # Optimizations whitelist=download@127.0.0.1 dbcache=2000 blocksonly=1
Importante: No olvide cambiar la contrase帽a de RPC por una de su elecci贸n.
Guradamos los cambios con control + O y salimos con control + X
Ejecutando Bitcoin Core
Ya estamos listos para iniciar Bitcoin Core pero antes vamos a configurar el sistema para que arranque autom谩ticamente el demonio de Bitcoin Core cada vez que reiniciemos la Raspberry pi. Para esto vamos a salir del usuario 芦bitcoin禄 para volver al usuario 芦admin禄 con el comando:
bitcoin@bitcoinnode$ exit
Vamos a crear el fichero de configuraci贸n para nuestro servicio que ser谩 el encargado de iniciar el demonio de Bitcoin Core:
admin@bitcoinnode$ sudo nano /etc/systemd/system/bitcoind.service
Y en su interior vamos a copiar el siguiente contenido:
# /etc/systemd/system/bitcoind.service [Unit] Description=Bitcoin daemon After=network.target [Service] ExecStart=/usr/local/bin/bitcoind -daemon \ -pid=/run/bitcoind/bitcoind.pid \ -conf=/mnt/ext/bitcoin/bitcoin.conf \ -datadir=/mnt/ext/bitcoin Type=forking PIDFile=/run/bitcoind/bitcoind.pid Restart=on-failure TimeoutSec=300 RestartSec=30 User=bitcoin Group=bitcoin RuntimeDirectory=bitcoind RuntimeDirectoryMode=0710 PrivateTmp=true ProtectSystem=full ProtectHome=true NoNewPrivileges=true PrivateDevices=true MemoryDenyWriteExecute=true [Install] WantedBy=multi-user.target
De este fichero no necesitamos entender nada, nos vale con saber que el usuario y el grupo con el que vamos a ejecutar el servicio te define con 芦User禄 y 芦Group禄.
Ahora vamos a habilitar el servicio para quede activo:
admin@bitcoinnode$ sudo systemctl enable bitcoind.service
Ahora para que el servicio tenga acceso al directorio de datos, vamos a crear otro enlace simb贸lico que va a permitir leer estos ficheros:
admin@bitcoinnode$ ln -s /mnt/ext/bitcoin/ /home/admin/.bitcoin
Y ya solo nos queda reiniciar la Raspberry Pi para que se apliquen todos los cambios:
admin@bitcoinnode$ sudo reboot
Verificando la instalaci贸n de Bitcoin Core
Una vez reiniciada la Raspbery y tras unos minutos para que vuelva a iniciarse todo vamos a conectar de nuevo con el usuario 芦admin禄 y vamos a verificar que todo ha salido bien. Primero vamos a comprobar que el servicio est谩 activo:
admin@bitcoinnode$ systemctl status bitcoind.service
Pulsamos 芦control + C禄 para salir de ah铆, y ahora vamos a usar el cliente de Bitcoin Core para comprobar que est谩 funcionando:
admin@bitcoinnode$ bitcoin-cli getblockchaininfo
Si todo ha ido bien recibiremos una respuesta parecida a la que vemos arriba. En mi caso, ya tengo la cadena completamente sincronizada y para saberlo debemos fijarnos en el atributo 芦verificationprogress禄. Cuando este atributo tiene un valor cercano a 1 (como se ve en la captura) la blockchain est谩 completamente sincronizada y lista para validar transacciones.
Ahora ya no podemos continuar hasta que la cadena se descargue completamente. Este proceso puede llegar a tardar hasta 1 semana dependiendo de la velocidad de conexi贸n a internet y el tipo de disco duro.
Ajustes tras la sincronizaci贸n completa
Para acelerar la descarga inicial de la blockchain hab铆amos configurado la cache de datos con m谩s tama帽o, pero una vez descargada esto ya no es necesario y debemos reducirla para liberar memoria que m谩s tarde aprovecharemos mejor. Para ello, tenemos que volver a conectar con el usuario 芦admin禄 y vamos a editar el fichero de configuraci贸n de Bitcoin Core :
admin@bitcoinnode$ bitcoin-cli getblockchaininfo
Al final del fichero vamos a ver las siguientes dos l铆neas que debemos comentar a帽adiendo el car谩cter 芦#禄 por delante:
#dbcache=2000 #blocksonly=1
Y ahora para que los cambios se apliquen, vamos a reiniciar el servicio
admin@bitcoinnode$ sudo systemctl restart bitcoind
Ampliando nuestro nodo con Electrum Server y BTC RPC Explorer
Ahora ya tenemos nuestro nodo validando transacciones, pero si queremos ser realmente soberanos sobre nuestro dinero necesitamos instalar dos cosas m谩s. Una de ellas es Electrum Server (a trav茅s de Electrs) que ser谩 el servicio que nos permitir谩 conectar nuestras wallets con el nodo. El otro ser谩 BTC RPC Explorer, que es una interfaz web que nos permite consultar transacciones, direcciones o bloques en la blockchain de Bitcoin desde nuestro nodo.
Instalando y configurando Electrum Server con Electrs
Instalaci贸n de dependencias
Primero vamos a instalar las dependencias que vamos a necesitar para instalar, configurar y correr Electrum Server en nuestro nodo. Lo primero vamos a instalar el paquete del lenguaje de programaci贸n Rust. Al igual que con Bitcoin Core, recomiendo revisar cual es la 煤ltima versi贸n para 芦aarch64-unknown-linux-gnu禄 disponible desde su p谩gina web聽y ajustar los comandos a ella:
Accedemos con el usuario 芦admin禄, nos desplazamos a la carpeta 芦tmp禄 y comenzamos la descarga:
admin@bitcoinnode$ cd /tmp
admin@bitcoinnode$ curl https://static.rust-lang.org/dist/rust-1.64.0-aarch64-unknown-linux-gnu.tar.gz -o rust.tar.gz
Ahora para instalarlo, vamos a crear el directorio donde se instalar谩 y procederemos a su instalaci贸n ejecutando los siguientes comandos:
admin@bitcoinnode$ mkdir /home/admin/rust
admin@bitcoinnode$ tar –strip-components 1 -C /home/admin/rust -xzvf rust.tar.gz
admin@bitcoinnode$ cd /home/admin/rust
admin@bitcoinnode$ sudo ./install.sh
Ahora vamos a instalar un compilador de C y C++ y un automatizador de construcci贸n de software:
admin@bitcoinnode$ sudo apt update
admin@bitcoinnode$ sudo apt install -y clan cmake
Instalando Electrs
Ahora vamos a descargar e instalar Electrs. Este proceso puede alargarse hasta 30 minutos. Para instalarlo vamos a movernos al directorio que hab铆amos creado para Rust y vamos a descargar desde el repositorio en Github la 煤ltima versi贸n de Electrs:
admin@bitcoinnode$ cd /home/admin/rust
admin@bitcoinnode$ electrsgit=$(curl -s https://api.github.com/repos/romanz/electrs/tags | jq -r ‘.[0].name’)
admin@bitcoinnode$ git clone –branch ${electrsgit} https://github.com/romanz/electrs.git
Ahora, vamos a movernos al directorio que se habr谩 creado para Electrs, y vamos a compilar los binarios:
admin@bitcoinnode$ cd electrs
admin@bitcoinnode$ cargo build –locked –release
Y para finalizar la instalaci贸n, vamos a copiar todos los binarios ya compilados a la ruta donde quedar谩 instalado finalmente:
admin@bitcoinnode$ sudo cp ./target/release/electrs /usr/local/bin/
Configuraci贸n e Indexaci贸n:
Lo primero que vamos a hacer es crear el directorio para los datos de Electrum. Para ello nos cambiamos al usuario 芦bitcoin禄 y en el mismo directorio home vamos a ejecutar estos comandos:
bitcoin@bitcoinnode$ mkdir /mnt/ext/electrs
bitcoin@bitcoinnode$ ln -s /mnt/ext/electrs /home/bitcoin/.electrs
Ahora vamos a crear el fichero de configuraci贸n con el comando:
bitcoin@bitcoinnode$ nano /mnt/ext/electrs/electrs.conf
Y vamos a copiar el siguiente contenido:
# RPC user / password auth = "bitcoinnode:RPC_PASSWORD_HERE" # Bitcoin Core settings network = "bitcoin" daemon_dir= "/mnt/ext/bitcoin" daemon_rpc_addr = "127.0.0.1:8332" daemon_p2p_addr = "127.0.0.1:8333" # Electrs settings electrum_rpc_addr = "127.0.0.1:50001" db_dir = "/mnt/ext/electrs/db" index_lookup_limit = 1000 verbose = 2 log_filters = "INFO" timestamp = true rust_backtrace = true
Importante:聽De este fichero solo debemos fijarnos en la propiedad 芦auth禄. En esta propiedad estamos indicando el usuario y la password que configuramos para RPC en la secci贸n anterior de Bitcoin Core.
Ahora vamos a crear un servicio para que Electrs se inicie tambi茅n cada vez que reiniciamos la Raspberry Pi. Para ello volvemos al usuario 芦admin禄 y creamos el fichero de configuraci贸n para el servicio:
admin@bitcoinnode$ sudo nano /etc/systemd/system/electrs.service
Y a帽adimos el siguiente contenido:
# /etc/systemd/system/electrs.service [Unit] Description=Electrs daemon Wants=bitcoind.service After=bitcoind.service [Service] ExecStart=/usr/local/bin/electrs --conf /mnt/ext/electrs/electrs.conf Type=simple Restart=always TimeoutSec=120 RestartSec=30 KillMode=process User=bitcoin Group=bitcoin RuntimeDirectory=electrs RuntimeDirectoryMode=0710 PrivateTmp=true ProtectSystem=full NoNewPrivileges=true PrivateDevices=true MemoryDenyWriteExecute=true WantedBy=multi-user.target
Al igual que con el servicio que creamos para Bitcoin Core, lo 煤nico que nos interesa saber es que el servicio va a correr bajo el usuario y grupo 芦bitcoin禄. Ahora vamos a habilitar el servicio y vamos a iniciarlo:
admin@bitcoinnode$ sudo systemctl enable electrs
admin@bitcoinnode$ sudo systemctl start electrs
Ahora para comprobar que est谩 funcionado correctamente, ejecutamos el siguiente comando y podemos ver c贸mo ha empezado a indexar:
admin@bitcoinnode$ sudo journalctl -f -u electrs
Protegiendo la comunicaci贸n con Electrum Server
Es importante que toda comunicaci贸n con nuestro servidor de Electrum sea segura y vaya encriptada bajo SSL/TLS. Adem谩s, es importante habilitar Tor para este servicio para tener a煤n m谩s privacidad.
Para lograr esto vamos a instalar primero NGINX que nos ofrecer谩 una forma segura de comunicarnos con Electrum sin necesidad de cifrarlo. Para ello vamos a instalarlo con el comando:
admin@bitcoinnode$ sudo apt install -y nginx
A continuaci贸n, vamos a crear un certificado autofirmado de TLS con una valided de 10 a帽os:
admin@bitcoinnode$ sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt -subj 芦/CN=localhost禄 -days 3650
Ahora vamos a borrar la configuraci贸n por defecto de NGINX ya que no nos interesa toda la parte del servidor web y queremos configurar un reverse proxy para Electrs. Para ello vamos a renombrar el fichero de configuraci贸n original (para guardar una copia en vez de eliminarlo) con el comando:
admin@bitcoinnode$ sudo sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
Y ahora vamos a crear uno nuevo con el siguiente contenido:
admin@bitcoinnode$ sudo nano /etc/nginx/nginx.conf
user www-data; worker_processes 1; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } stream { ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 4h; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; upstream electrs { server 127.0.0.1:50001; } server { listen 50002 ssl; proxy_pass electrs; } }
Ahora vamos a comprobar que NGINX ha cogido bien la configuraci贸n con el comando:
admin@bitcoinnode$ sudo nginx -t
Si todo ha ido bien como se puede ver en la captura de arriba vamos a reiniciar el servicio:
admin@bitcoinnode$ sudo systemctl restart nginx
Ahora ya solo nos queda configurar el acceso remoto a nuestro Electrs v铆a Tor. Para eso, vamos a a帽adir tres l铆neas en la secci贸n para servicios ocultos del fichero de configuraci贸n de 芦torrc禄:
admin@bitcoinnode$ sudo nano /etc/tor/torrc
############### This section is just for location-hidden services ### HiddenServiceDir /var/lib/tor/hidden_service_electrs/ HiddenServiceVersion 3 HiddenServicePort 50002 127.0.0.1:50002
Ahora simplemente reiniciamos Tor, y ya podremos consultar la ruta .onion para conectar con Electrs:
admin@bitcoinnode$ sudo systemctl restart tor
admin@bitcoinnode$ sudo cat /var/lib/tor/hidden_service_electrs/hostname
Instalando y configurando BTC RPC Explorer
Instalaci贸n de dependencias
Para poder ejecutar este explorador de boques necesitamos instalar NodeJS en nuestro nodo. Lo primero vamos a tener que elevar nuestros permisos a nivel de 芦root禄 y vamos a a帽adir el repositorio de paquetes de NodeJS. A continuaci贸n, salimos de la sesi贸n 芦root禄 ya que es un nivel de privilegios que deber铆amos usar 煤nicamente para acciones imprescindibles como esta.
admin@bitcoinnode$ sudo su
admin@bitcoinnode$ curl -sL https://deb.nodesource.com/setup_14.x | bash –
admin@bitcoinnode$ exit
Y ya podemos proceder con su instalaci贸n:
admin@bitcoinnode$ sudo apt-get install nodejs
Ahora solo nos queda abrir el puerto necesario en el Firewall que instalamos al comienzo de esta gu铆a:
admin@bitcoinnode$ sudo ufw allow 3002 comment ‘allow BTC RPC Explorer’
Instalando BTC RPC Explorer
Para esta instalaci贸n vamos a crear un usuario nuevo que va a ser el encargado de manejar el explorador de bloques. Esto lo hacemos por motivos de seguridad, as铆 cada servicio va a tener sus propios usuarios y con esto minimizamos los riesgos.
admin@bitcoinnode$ sudo adduser btcrpcexplorer
Ahora nos cambiamos a este nuevo usuario y vamos a bajarnos los binarios desde su repositorio de Github:
admin@bitcoinnode$ sudo su – btcrpcexplorer
btcrpcexplorer@bitcoinnode$ git clone –branch v3.2.0 https://github.com/janoside/btc-rpc-explorer.git
Ahora para instalarlo simplemente nos movemos al nuevo directorio y realizamos la instalaci贸n con npm:
btcrpcexplorer@bitcoinnode$ cd btc-rpc-explorer
btcrpcexplorer@bitcoinnode$ npm install
Configurando BTC RPC Explorer
BTC RPC Explorer ya viene con una plantilla para su configuraci贸n. Vamos a habilitarla y a editarla con los siguientes comandos:
btcrpcexplorer@bitcoinnode$ cp .env-sample .env
btcrpcexplorer@bitcoinnode$ nano .env
Lo primero que debemos hacer es indicarle que se conecte Bitcoin Core, para eso debemos buscar las siguientes l铆neas y descomentarlas quitando el car谩cter 芦#禄 que viene delante:
BTCEXP_BITCOIND_HOST=127.0.0.1 BTCEXP_BITCOIND_PORT=8332 BTCEXP_BITCOIND_USER=bitcoinnode BTCEXP_BITCOIND_PASS=RPC_PASSWROD_HERE
Es importante a帽adir la contrase帽a que configuramos en la secci贸n de Bitcoin Core para las conexiones RPC. Ahora vamos a realizar alguna serie de configuraciones m谩s c贸mo darle acceso a Electrum para consultar saldos o algunas configuraciones de privacidad. Debemos buscar las siguientes l铆neas en el documento e ir descomentandolas eliminando el car谩cter 芦#禄:
BTCEXP_ADDRESS_API=electrum BTCEXP_ELECTRUM_SERVERS=tcp://127.0.0.1:50001 BTCEXP_BITCOIND_RPC_TIMEOUT=10000 BTCEXP_ELECTRUM_TXINDEX=true BTCEXP_PRIVACY_MODE=true BTCEXP_NO_RATES=false BTCEXP_RPC_ALLOWALL=false DEBUG=btcexp:app,btcexp:error,www
Guardamos con 芦control + O禄 y salimos con 芦control + X禄
Ahora al igual que los otros servicios vamos a hacer que el BTC RPC Explorer se arranque autom谩ticamente con cada reinicio de la Raspberry Pi. Para ello volvemos al usuario 芦admin禄 y creamos el fichero para el servicio:
admin@bitcoinnode$ sudo nano /etc/systemd/system/btcrpcexplorer.service
# /etc/systemd/system/btcrpcexplorer.service [Unit] Description=BTC RPC Explorer After=network.target bitcoind.service After=electrs.service [Service] WorkingDirectory=/home/btcrpcexplorer/btc-rpc-explorer ExecStart=/usr/bin/npm start User=btcrpcexplorer Restart=on-failure StartLimitIntervalSec=600 StartLimitBurst=2 [Install] WantedBy=multi-user.target
Ahora simplemente vamos a habilitar el servicio y a activarlo:
admin@bitcoinnode$ sudo systemctl enable btcrpcexplorer.service
admin@bitcoinnode$ sudo systemctl start btcrpcexplorer.service
Si todo ha ido bien deber铆amos poder acceder desde el navegador a trav茅s de la IP de nuestro nodo y el puerto 3002. En el caso del ejemplo de esta gu铆a ser铆a en ‘http://192.168.1.55:3002/’ y veremos una p谩gina como esta:
Protegiendo la comunicaci贸n con BTC RPC Explorer
Y ya para acabar vamos a hacer que nuestro servicio de BTC RPC Explorer se ejecute bajo Tor. Para ello vamos a volver a a帽adir tres l铆neas en el fichero de configuraci贸n de ‘torrc’ en la secci贸n para los servicios ocultos, tal como hicimos en la parte de Electrs:
admin@bitcoinnode$ sudo nano /etc/tor/torrc
HiddenServiceDir /var/lib/tor/hidden_service_btcrpcexplorer/ HiddenServiceVersion 3 HiddenServicePort 80 127.0.0.1:3002
Reiniciamos Tor y consultamos la direcci贸n .onion:
admin@bitcoinnode$ sudo systemctl restart tor
admin@bitcoinnode$ sudo cat /var/lib/tor/hidden_service_btcrpcexplorer/hostname
隆Y con esto hemos acabado la instalaci贸n y configuraci贸n de nuestro nodo de bitcoin completo! S茅 que es una gu铆a larga y pueden surgir muchas dudas o problemas por el camino. Para cualquier duda o problema no dud茅is en preguntar en los comentarios que estar茅 encantado de intentar ayudaros.
En un futuro os traer茅 otra gu铆a para a帽adir un servidor de Lightning Network a nuestro nodo de Bitcoin.
Comentarios