Convierte tu Raspberry Pi 3 en un servidor anti-anuncios y VPN privada para toda tu vida digital


Hay muy pocos proyectos capaces de transformar tu experiencia digital tanto como el que voy a presentarte. Y lo mejor es que, si tienes una Raspberry Pi olvidada en un cajón —ya sea una RPi 3, RPi 4 o incluso la RPi 5— puedes aprovecharla sin gastar un euro. En mi caso, con una sencilla Raspberry Pi 3 funcionando 24/7, he montado un servidor doméstico que bloquea anuncios en todos mis dispositivos, cifra mi conexión cuando uso redes Wi‑Fi públicas y, además, me permite “estar en casa” aunque físicamente me encuentre en otro país.

No hablamos solo de quitar banners del navegador. Hablamos de eliminar publicidad dentro de apps móviles, reducir rastreadores invisibles, acelerar la carga de páginas y evitar que plataformas como Netflix o Disney+ bloqueen accesos por detección de ubicación fuera del “hogar principal”. Todo esto sin pagar suscripciones mensuales a VPN comerciales y manteniendo el control total de tu infraestructura.

La clave es combinar tres piezas de software open-source que trabajan en conjunto

  • Pi-hole como bloqueador DNS,
  • WireGuard como túnel cifrado ultrarrápido
  • DuckDNS como DNS dinámico para localizar tu casa aunque cambie tu IP pública.

Y por cierto, el despliegue lo hacemos con Docker y Portainer para que todo quede encapsulado, ordenado y fácil de mantener.

Este montaje está probado específicamente en Raspberry Pi 3 con Raspberry Pi OS 64-bit (Bookworm). Funciona de forma estable y con consumo de recursos muy bajo; la Pi 3 es más que suficiente para unos pocos clientes VPN y bloqueo DNS continuo. De hecho el consumo reportado es de tan solo 10.3mA lo que supone unos 0.05 W.

NOTA: Antes de empezar, hay tres requisitos técnicos que debes tener claros. Primero, tu operadora no debe tenerte bajo CGNAT; si lo estás, no podrás abrir puertos y la VPN no funcionará desde fuera. Segundo, tu Raspberry debe tener IP fija en la red local (por ejemplo 192.168.1.10). Tercero, necesitas crear un subdominio gratuito en DuckDNS, algo como tunombre.duckdns.org, y obtener el token que te identifica como propietario.

raspberrypi

Guia paso a paso

1-Requisitos previos IMPORTANTES

✔ Comprobar que NO estás bajo CGNAT. Si tu operadora te tiene en CGNAT, no podrás abrir puertos.
Debes llamar y pedir que te saquen.

✔ IP fija local. Tu Raspberry debe tener una IP fija (ej. 192.168.1.10).

✔ Crear dominio en DuckDNS. Este servicio es gratuito y nos permite usar un nombre del tipo «minombre.duckdns.com» en lugar de la IP como por ejemplo:

tunombre.duckdns.org

Necesitarás por tanto apuntar estos datos:

  • SUBDOMAINS → solo “tunombre”
  • TOKEN → clave que te da DuckDNS

DuckDNS solo necesita dos variables: el subdominio y el token. Su función es silenciosa pero esencial; sin él, cuando cambie tu IP pública, tu móvil no sabrá a dónde conectarse.

2-Preparación inicial en Raspberry

Vamos a partir de una versión de Raspbian de 64 bits instalada en nuestra Raspberry PI. Si me preguntas porque no uso la versión de 32 bits, la respuesta es bien sencilla: la mayoría de los contenedores que necesitamos usar ya no estan actualizados a versiones e 32bits y tras mucho trabajo en mi caso no lo conseguí, así que si puedes intenta partir de una versión actualizada de Raspbian OS de 64 bits (en este tutorial he usado Raspbian 64-bit Bookworm).

Para instalar la versión actualizada de Raspbian OS de 64 bits en tu Raspberry Pi ( si aun no lo has hecho) , sigue estos pasos:

  1. Descarga la aplicación Raspberry Pi Imager desde el repositorio oficial de Raspberry Pi.
  2. Lanza la aplicación y selecciona la opción para instalar imágenes personalizadas.
  3. Elige la opción de 64 bits de Raspberry Pi OS, que es una versión de Debian Bullseye.
  4. Selecciona el soporte (en este caso, una microSD de 128 gigas) donde deseas instalar la imagen.
  5. Confirma la instalación y asegúrate de borrar los datos si se solicita.
  6. Inicia la grabación y verifica la imagen antes de escribir el contenido sobre el soporte. Recuerda que es importante seleccionar el dispositivo correcto para evitar la pérdida de información valiosa.
  7. Insertar la SD en la placa y conectar alimentación Raspberry.
  8. Conectar por SSH:ssh [email protected] ( o la Ip que se le haya asignado). También podemos usar Putty para la mismas finalidad ( recomendado).
  9. Verificar contenedores:docker ps
  10. Cuando hayamos terminado este tutorial si usaste --restart=always, Portainer y los stacks (VPN, Pi-hole, etc.) deberían iniciarse automáticamente.
  11. Crear estructura de carpetas
    mkdir -p ~/docker/{wireguard,pihole,duckdns}/config

En Raspberry Pi OS Bookworm 64-bit:

  • El usuario pi ya no existe por defecto.
  • Docker requiere configuración adicional para usuarios no root.
  • Portainer puede bloquearse en el primer acceso (reinicio simple lo soluciona).
  • Con --restart=always, los servicios sobreviven a reinicios.

En instalaciones recientes de Raspberry Pi OS 64-bit por tanto ya no existe el usuario “pi” por defecto. Si intentas añadirlo al grupo docker y aparece el error “el usuario ‘pi’ no existe”, simplemente comprueba primero con whoami qué usuario estás utilizando. Puedes trabajar con tu usuario actual o crear uno nuevo y añadirlo a los grupos sudo y docker. Lo importante es que Docker pueda ejecutarse sin necesidad de usar root en cada comando.

Hay un problema común en Raspberry OS 64-bit (Bookworm). En versiones nuevas ya no existe el usuario pi. Si aparece:

usermod: el usuario 'pi' no existe

Verifica usuario actual:

whoami
id

Si quieres usar el esquema clásico:

sudo adduser pi
sudo usermod -aG sudo,docker pi
sudo su - pi

Otros comandos útiles desde SSH

Apagar Raspberry Pi de forma segura

sudo shutdown -h now

O:

sudo poweroff

La conexión SSH se cerrará automáticamente.

Reiniciar la placa

sudo reboot

-Otros comandos útiles

uptime # Tiempo encendido
docker ps # Ver contenedores activos

3-Crear dominio personalizado

En nuestra Raspberry Pi vamos a utilizar un «Stack» en Portainer, que es un archivo de texto (Docker Compose) que contiene las instrucciones para levantar tres contenedores a la vez:

  • WireGuard: La VPN. Se configuran los puertos (por defecto 51820 para el servicio y 51821 para el panel web) y la ruta donde se guardarán los archivos.
  • Pi-hole: El bloqueador. Se configura en modo «host» para que use la misma IP del servidor. Aquí defines la contraseña de administrador y la IP local de tu máquina.
  • DuckDNS: El actualizador automático que vincula tu IP con el dominio que creaste.

Crear dominio DDNS con DuckDNS.

Este es un paso necesario que debemos hacer antes de seguir la instalación porque nos devolverá información relevante para crear el contenedor en Docker que levante los servicios comentados. Es una trabajo bastante sencillo:

  • Ve a duckdns.org, loguea con Google/GitHub.
  • Crea una cuenta gratuita para validarte
  • Crea subdominio (ej. tudominio.duckdns.org).
  • Apunta token para Docker.​

4- Instalación mediante Docker y Portainer

Una vez instalado Docker y Portainer ( vienen ya preinstalados en la ultima versión de raspbian 64bits) , el despliegue se realiza mediante un Stack (Docker Compose). Conceptualmente, el archivo define tres contenedores que se levantan a la vez y se comunican entre sí. WireGuard crea el túnel VPN y expone el puerto 51820/udp. Pi-hole se ejecuta en modo host para poder actuar como servidor DNS real de la red doméstica. DuckDNS corre en segundo plano actualizando tu IP pública asociada al dominio.

Se despliega todo mediante un Stack en Portainer (Docker Compose), pero antes, crea estructura de carpetas:

mkdir -p ~/docker/{wireguard,pihole,duckdns}/config

Estructura del Docker Compose

Para levantar los servicios en Docker necesitaremos un archivo en formato yaml . Dichos archivo levanta tres contenedores conectados: WireGuard, Pi-hole y DuckDNS.

🔹 WireGuard (la VPN).Variables críticas:

  • SERVERURL=tu-dominio.duckdns.org
  • SERVERPORT=51820
  • PEER_DNS=192.168.1.10 ← CLAVE
  • PUID=1000
  • PGID=1000

🔥 El punto más importante: PEER_DNS debe apuntar a la IP de tu Raspberry. Eso obliga a que TODO el tráfico DNS pase por Pi-hole.

Puertos:

  • 51820/udp → VPN
  • 51821/tcp → Panel web (según versión)

🔹 Pi-hole (el bloqueador). Configuración crítica:

  • network_mode: host
  • WEBPASSWORD=tu_password
  • FTLCONF_LOCAL_IPV4=192.168.1.10

El modo host permite que actúe como DNS de toda la red doméstica.

🔹 DuckDNS (actualizador IP). Variables:

  • SUBDOMAINS=tunombre
  • TOKEN=tu_token

Este contenedor solo actualiza tu IP pública.

Despliegue en Portainer del archivo de configuración de docker

  1. Entrar en: http://192.168.1.10:9000


2-Stacks → Add Stack

3-Pegar Docker Compose con el contenido comentado en el apartado anterior rellenando lógicamente con tus datos particulares como el dominio de duckdns, la pwd, la zona horaria , direccion IP, etc

A continuación un ejemplo del contenido;

textversion: '3.8'
networks:
  principal:
    driver: bridge
    ipam:
      config:
        - subnet: 10.42.42.0/24
services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:15
    container_name: wg-easy
    hostname: wg-easy
    restart: unless-stopped
    environment:
      - WG_HOST=tudominio.duckdns.org  # ⚠️ Tu dominio DuckDNS
      - PASSWORD=tucontraseña_segura  # ⚠️ Password web UI WireGuard
    networks:
      principal:
        ipv4_address: 10.42.42.2
    volumes:
      - /home/pi/docker/wg-easy/config:/etc/wireguard  # ⚠️ Directorio real en tu Pi
    ports:
      - "51820:51820/udp"  # VPN puerto (cambia externo si ocupado)
      - "51821:51821/tcp"  # Web UI (cambia externo si ocupado)
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    depends_on:
      - pihole

  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    hostname: pihole
    restart: unless-stopped
    network_mode: host  # Usa IP del host para DNS
    environment:
      - TZ=Europe/Madrid  # ⚠️ Tu zona horaria
      - WEBPASSWORD=tucontraseña_pihole  # ⚠️ Password web UI Pi-hole
      - PIHOLE_SERVER_IP=192.168.1.10  # ⚠️ IP fija de tu Pi/servidor
      # - WEB_PORT=8080  # Descomenta si puerto 80 ocupado
      PIHOLE_UID=1000  # ⚠️ Tu UID (id -u)
      PIHOLE_GID=1000  # ⚠️ Tu GID (id -g)
    volumes:
      - /home/pi/docker/pihole/config:/etc/pihole  # ⚠️ Directorio real

  duckdns:
    image: linuxserver/duckdns:latest
    container_name: duckdns
    restart: unless-stopped
    network_mode: host
    environment:
      - PUID=1000  # Tu UID
      - PGID=1000  # Tu GID
      - TZ=Europe/Madrid
      - SUBDOMAINS=tudominio  # ⚠️ Tu subdominio DuckDNS
      - TOKEN=tu_token_duckdns  # ⚠️ Copia de duckdns.org
    volumes:
      - /home/pi/docker/duckdns/config:/config  # ⚠️ Directorio real
  • Verificar:
    docker ps
  • Deploy the stack. Espera ~1 min. Verifica con docker ps.

Todos deben estar en estado Up

5-Abrir puerto en router Movistar (HGU Fibra)

Después de desplegar el Stack en Portainer y verificar con docker ps que todos los contenedores están en estado “Up”, llega el paso de red más importante: abrir el puerto 51820/udp en tu router. En un router HGU de fibra de Movistar se hace desde 192.168.1.1, entrando en configuración avanzada, sección NAT o Virtual Servers, creando una regla que redirija el puerto externo 51820 hacia la IP local fija de la Raspberry usando protocolo UDP. Si este paso está mal configurado, la VPN no será accesible desde el exterior.

Acceder a:

http://192.168.1.1

Ir a:

Configuración Avanzada
Advanced Setup → NAT → Virtual Servers

Crear regla:

  • Service Name: WireGuard
  • IP: 192.168.1.10
  • Puerto externo: 51820
  • Puerto interno: 51820
  • Protocolo: UDP

Guardar.

6-Vincular VPN con Pi-hole (paso crítico)

Configurar Pi-hole

En el caso de Pi-hole, el modo de red host simplifica todo porque el servicio escucha directamente en la IP de la Raspberry sin mapeos adicionales de puertos. Definir una contraseña segura para el panel web es importante, ya que desde ahí verás estadísticas de dominios bloqueados, dispositivos y consultas DNS

  • Accede: http://IP_PI:80/admin (o https://IP_PI:443/admin).
  • Login con WEBPASSWORD.
  • Recomendado: En Settings > DNS > Conditional Forwarding: escribir true,192.168.1.0/24,192.168.1.1 (Red local y gateway router). Muestra nombres dispositivos en dashboard.​
  • Activar «Blocking indefintely» tal y como aparece mas abajo.

Una vez hecho esto, en nuestros PC’s conectados a nuestra red local, simplemente en la configuración de Red, en DNS tenemos que cambiar modo automático por manual y escribiendo la IP de nuestro servidor:

192.168.1.58 (  o la dirección de tu Raspberry Pi) 

Sin esto, no habrá bloqueo de anuncios en nuestro equipos y lógicamente lo deberemos hacer para cada uno de estos equipos de nuestra red donde deseemos usar estos servicios. Otro tema son los smartphones y tabletas donde tenderemos que habilitar el servicio wireguard para cada dispositivo, al igual que también deberemos hacer en nuestros PC con el DNS, pero con una ventaja adicional pues lo podremos usar fuera de casa.

Configurar WireGuard

Con el puerto abierto y el dominio funcionando, solo queda generar clientes en el panel de WireGuard.

  • Crea admin user/password.
  • Host: tudominio.duckdns.org | Port: 51820.
  • En Config > DNS: Borra defaults, añade solo IP_PI (ej. 192.168.1.10) para routing a Pi-hole.
  • Crea cliente (ej. «iphone»): QR o descarga .conf.

En el móvil basta con instalar la app oficial y escanear el código QR. En una Android TV o dispositivo similar se puede importar el archivo de configuración. A partir de ese momento, cuando actives la VPN, tu tráfico viajará cifrado hasta tu casa y saldrá a Internet con la IP de tu conexión doméstica. Para las plataformas de streaming, estarás físicamente en tu salón aunque estés a cientos de kilómetros.

7- Configuración en dispositivos

Hay un detalle técnico que marca la diferencia entre “funciona” y “funciona perfecto”.En la configuración de WireGuard existe una variable que define qué servidor DNS usarán los clientes cuando se conecten. Esa variable debe apuntar a la IP local de tu Raspberry (por ejemplo 192.168.1.10). De este modo, cualquier móvil que active la VPN enviará sus consultas DNS a tu Pi-hole, incluso usando datos 4G o 5G. Eso es lo que permite tener bloqueo de anuncios fuera de casa.

Móvil

  • Instalar app WireGuard
  • Escanear QR generado en el panel

Smart TV / Android TV

  • Instalar app WireGuard
  • Importar archivo de configuración

Al activar VPN:

  • Navegas como si estuvieras en casa
  • Tienes bloqueo de anuncios incluso con 5G

El flujo final es como podemos imaginar, a modo de resumen, el siguinte

  • Tu móvil activa VPN.
  • Se conecta a tu dominio DuckDNS.
  • Router redirige puerto 51820 a Raspberry.
  • WireGuard crea túnel cifrado.
  • Todas las consultas DNS pasan por Pi-hole.
  • Publicidad bloqueada antes de llegar.

En resumen para conectar clientes estos son los pasos

PlataformaPasos
iOS/AndroidApp WireGuard oficial > Escanear QR o importar .conf > Activar.
Windows/macOS/LinuxApp oficial > Importar .conf > Activar.
Android TV/Google TVApp WireGuard > Importar .conf desde USB > Activar. Bloquea ads en streaming.
Smart TV (sin app)Config DNS manual a IP_PI (usa Pi-hole sin VPN full). ​

Verificación y tips

  • Con VPN activa + datos móviles: IP sale por casa, ads bloqueados (ver Pi-hole dashboard).
  • Check puertos libres pre-instalación: sudo netstat -tuln | grep PUERTO.
  • CGNAT: No funciona (llama operadora para salir; alternativas como Tailscale).​
  • Raspberry Pi Zero OK para 1-2 clientes; Pi 4/5 mejor para multiuso. Personalmente probada con Raspberry Pi 3 con dos clientes móviles y dos PC y funciona perfectamente​

El resultado final es un sistema silencioso, estable, extremadamente útil y además con un consumo ínfimo de energia de sólo 10mA. La Raspberry Pi 3 apenas consume energía, puede estar encendida permanentemente y actúa como núcleo de tu privacidad digital. No dependes de terceros, no pagas cuotas y tienes control total sobre tu red. Una vez que lo montas y ves las estadísticas de miles de dominios bloqueados en Pi-hole, entiendes rápidamente por qué merece la pena dedicarle una tarde a configurarlo.

raspberr

Al combinar Pi-hole (el filtro) con WireGuard (el túnel), obtienes beneficios que normalmente requerirían suscripciones mensuales caras o hardware profesional.

Supongo ya las habras adivinado querido lector ,pero por si acaso aquí te detallo las utilidades principales:

1. Navegación Limpia y Acelerada (Pi-hole).La función de Pi-hole es actuar como un «sumidero» para la publicidad.

  • A nivel de red: Bloquea anuncios no solo en el navegador, sino también dentro de aplicaciones de juegos o noticias en móviles y tablets.
  • Ahorro de datos y batería: Al no tener que descargar los pesados banners y vídeos publicitarios, las páginas cargan más rápido y tu dispositivo consume menos energía.
  • Privacidad: Bloquea los rastreadores (trackers) que usan las empresas para saber qué páginas visitas.

2. Tu Propia VPN «Cero Coste» (WireGuard). A diferencia de servicios como NordVPN o ExpressVPN, aquí el servidor es tu casa.

  • Seguridad en redes públicas: Si te conectas al Wi-Fi de un aeropuerto o cafetería, activas tu VPN y todo tu tráfico viaja cifrado hasta tu casa. Nadie en esa red pública puede «espiar» lo que haces.
  • Acceso remoto: Puedes entrar a los archivos de tu ordenador, a tu cámara de seguridad o a tu impresora de casa desde cualquier lugar del mundo como si estuvieras allí mismo..

3. El «Truco» para el Streaming y Cuentas Compartidas. Esta es quizás la utilidad más buscada actualmente debido a las restricciones de plataformas como Netflix o Disney+.

  • Simulación de hogar: Si le das un acceso VPN a un familiar, su televisor (aunque esté en otra ciudad) se conectará a internet a través de tu router. Para Netflix, ese televisor está físicamente en tu casa, evitando el bloqueo por «hogar principal».
  • Contenido geolocalizado: Si viajas al extranjero, puedes conectarte a tu VPN y seguir viendo el catálogo de España o acceder a la banca online sin que te bloqueen por acceder desde una IP extranjera.

4. Control total y «DNS Everywhere«. Al unir ambos sistemas, disfrutas del bloqueo de anuncios de Pi-hole estando en la calle con datos 5G.

  • Normalmente, Pi-hole solo funciona cuando estás conectado al Wi-Fi de tu casa.
  • Con este montaje, al activar la VPN en tu móvil, tus consultas DNS pasan por tu Raspberry Pi, por lo que dejas de ver anuncios en el móvil incluso usando tu tarifa de datos.

POSIBLES PROBLEMAS , TRUCOS Y SOLUCIONES

Problema común en Raspberry Pi OS 64-bit (Bookworm): el usuario pi no existe

Al instalar Raspberry Pi OS 64-bit (Bookworm) recientemente, muchos usuarios encuentran este error:

usermod: el usuario 'pi' no existe

Esto ocurre porque el usuario por defecto ya no es pi en las versiones nuevas del sistema.

Antes de continuar, verifica qué usuario estás usando:

whoami
id

Docker y usuarios no root

Al instalar Docker, es habitual ver este mensaje:

To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode…

Existen dos opciones:

🔹 Opción 1 — Modo rootless (más seguro) Permite ejecutar Docker sin privilegios root:

dockerd-rootless-setuptool.sh install

Documentación oficial:
https://docs.docker.com/go/rootless/

🔹 Opción 2 — Docker como servicio privilegiado (más común en Raspberry)

Permite que usuarios normales ejecuten Docker añadiéndolos al grupo docker.

⚠ Advertencia importante: El acceso al socket de Docker equivale a acceso root en el sistema. Más información:
https://docs.docker.com/go/daemon-access/
https://docs.docker.com/go/attack-surface/

Solución: Crear usuario pi y habilitar Docker

Si quieres mantener la configuración clásica:

Crear el usuario pi

sudo adduser pi

(Contraseña típica: raspberry, aunque puedes definir la que prefieras.)

Añadir al grupo sudo y docker:

sudo usermod -aG sudo,docker pi

Cambiar a ese usuario:

sudo su - pi

Nuevo acceso SSH:

Probar Docker como usuario pi

Actualizar sesión de grupos:

newgrp docker

Probar contenedor:

docker run hello-world

Si funciona, Docker está correctamente configurado.

Instalación de Portainer

Crear volumen

docker volume create portainer_data

Lanzar Portainer

docker run -d --name portainer --restart=always \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce

Acceder desde navegador:

http://192.168.1.50:9000

Problema común: “Portainer instance timed out”

Mensaje típico:

Your Portainer instance timed out for security purposes.

Es normal en el primer acceso.
Solución simple:

docker restart portainer

Esperar ~30 segundos y volver a entrar:

http://192.168.1.50:9000

Login inicial:

Usuario: admin
Password: admin123

⚠ Cambia la contraseña inmediatamente.

Verificar que está activo:

docker ps

Debe aparecer portainer en estado Up.

Configuración totalmente funcional en Bookworm 64-bit..

1. Update + IP fija (~1min)

sudo apt update && sudo apt upgrade -y
sudo raspi-config
  • Network > Static IP: 192.168.1.50/24 gw 192.168.1.1
  • Localisation > WLAN Country: ES
  • SSH: Yes
  • Finish > Reboot

Re-SSHssh [email protected]

2. Docker oficial (~2min)

textcurl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker pi
newgrp docker

3. Portainer

textdocker volume create portainer_data
docker run -d --name portainer --restart=always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
docker ps

http://192.168.1.50:9000 > admin/admin123

Como comunicar dos dispositivos sin la red movil


A veces, como lo demostró el gran apagón sufrido en España, es interesante tener un medio de transmisión donde aun sin la red de telefonia ( e incluso sin la rede de energia pública) podamos comunicarnos entre si. En este contexto si investigamos un poco es fácil encontrar una tecnologia surgida del mundo del IoT : Meshtastic una solución para una comunicación libre fuera de la red.

Meshtastic nació en 2020 gracias a Kevin Hester y hoy cuenta con miles de colaboradores que mantienen el firmware y las apps asociadas. De hecho existen comunidades muy activas en diversos países, incluida la comunidad española y latinoamericana, con grupos de soporte en Telegram y foros especializados.

Meshtastic es un proyecto de código abierto y descentralizado que permite crear redes de comunicación off‑grid usando radios LoRa de bajo coste, sin depender de Internet, cobertura móvil ni infraestructura externa. Solo necesitamos un transceptor de radio (normalmente basado en ESP32 con el fw de meshtastic) y enlazar este por bluetooth a un ordenador o a un smartphone mediante la app Meshtastic. Lógicamente si queremos comunicarnos con otra persona también necesitará este módulo para hacer posible la comunicación bidireccional y por supuesto que ambos nodos esten al alcance de la red.

En la siguiente imagen precisamente tenemos un modulo típico muy utilizado : el LoRa V3 para ESP-32.

¿Qué es Meshtastic?

Meshtastic transforma pequeños módulos LoRa (como LILYGO o Heltec) en dispositivos de comunicación de largo alcance, capaces de enviar y recibir mensajes de texto o datos a través de una red mallada.
Cada nodo actúa como repetidor, retransmitiendo la señal y extendiendo el alcance total de la red. Y si amigo lector si te estas preguntando como se gestiona, esto lo haremos a traves de un smartphone con la app Meshmastic vinculado al modulo Lora.

En efecto la app Meshtastic es una aplicación de código abierto que permite crear redes de comunicación LoRa en forma de malla (mesh), donde cada dispositivo actúa como nodo capaz de retransmitir mensajes a otros, extendiendo el alcance sin necesidad de cobertura móvil ni conexión a Internet. Está disponible para Android, iOS, Windows y Linux, y se conecta mediante Bluetooth o USB a placas compatibles como el ESP32 LoRa V3.

Su función principal es facilitar la mensajería y el intercambio de datos entre dispositivos en entornos donde no existe infraestructura de red, ofreciendo además opciones de geolocalización, configuración remota de parámetros y visualización en mapas. También puede integrarse con plataformas externas mediante MQTT o API REST, lo que lo hace útil tanto para comunicación entre usuarios como para proyectos IoT distribuidos.

Gracias a Meshtastic, los módulos LoRa se convierten en nodos inteligentes capaces de mantener una red de comunicación privada, autónoma y de largo alcance, ideal para actividades al aire libre, entornos rurales, redes de emergencia o experimentos tecnológicos donde la conectividad tradicional no está disponible.

Principales características

  • Comunicación cifrada de extremo a extremo.
  • Red completamente descentralizada: los nodos forman la malla sin routers ni antenas base.
  • Compatible con apps Android/iOS, cliente web y CLI de Python.
  • Alcance extraordinario: en pruebas se han registrado enlaces de hasta 331 km en condiciones ideales.
  • Autonomía prolongada, perfecta para dispositivos alimentados por batería o energía solar.
  • Opcionalmente, integración GPS para enviar la posición de cada nodo.

Usos más comunes

  • Excursiones y senderismo: comunicación fuera de cobertura móvil.
  • Eventos y festivales: redes alternativas cuando las móviles están saturadas.
  • Agricultura e IoT: monitoreo remoto de sensores de temperatura o humedad.
  • Emergencias y desastres naturales: comunicaciones de respaldo sin depender de Internet.

Cómo funciona Meshtastic

Cada nodo Meshtastic transmite mensajes vía LoRa P2P (peer‑to‑peer). Cuando recibe un mensaje, lo reenvía automáticamente, permitiendo múltiples saltos hasta alcanzar el destino.
Los nodos pueden emparejarse con un teléfono por Bluetooth o cable USB, aunque la comunicación entre ellos es independiente.

Bandas de frecuencia compatibles

Meshtastic utiliza bandas ISM (sin licencia) diferentes según la región y el hardware:

BandaRegiones principalesObservaciones
433 MHzEuropaUso limitado, reservada a radioaficionados.
868 MHzEuropaBanda ISM europea más común y recomendable.
915 MHzAmérica, OceaníaBanda ISM de 902‑928 MHz, muy extendida.

Frecuencia más usada en Europa

En Europa —y especialmente en España— la frecuencia 868 MHz es la estándar preferida, al ser legal, estable y compatible con la mayoría de nodos.
La frecuencia central más habitual según configuración LongFast es 869.525 MHz (slot 1).

Parámetros técnicos (EU 868)

ParámetroValor típicoReferencia
Rango de frecuencia863–870 MHzETSI EN 300 220
Potencia máxima+14 dBm (25 mW EIRP)ETSI/IR‑274
Duty cycle permitido1 % (10 % en subbandas 869.4‑869.65 MHz)ETSI EN 300 220
Ancho de banda típico125–500 kHz

Esto garantiza que Meshtastic funcione dentro de los límites legales europeos, manteniendo compatibilidad con LoRaWAN y otros sistemas IoT.

Configurar la frecuencia o canal de un nodo

  1. Conecta el nodo a tu móvil (app Meshtastic Android/iOS) o a un PC mediante terminal o puerto serie.
  2. Abre la configuración avanzada. En la app o terminal, accede a los parámetros de radio (radioConfig).
  3. Selecciona la región, por ejemplo EU_868.
  4. Cambia la ranura o canal con el parámetro primaryChannelFreq o channel.
    • Ejemplo CLI: bashmeshtastic --set channel 20
  5. Guarda y reinicia el nodo para aplicar cambios.

Importante: todos los nodos de una red deben operar en la misma frecuencia o canal para comunicarse correctamente.

Ejemplo de modulo Mesh: Módulo LoRa V3 para ESP32 – Potencia, conectividad y eficiencia para proyectos IoT

El LoRa V3 para ESP32 es una completa placa de desarrollo diseñada para proyectos IoT de largo alcance y bajo consumo. Combina la potencia del ESP32-S3FN8 con el chip LoRa SX1262, ofreciendo conectividad Wi-Fi, Bluetooth y LoRaWAN en un solo módulo.

Características destacadas

  • Compatibilidad total con Arduino IDE y Meshtastic, facilitando la programación y el despliegue de redes LoRa Mesh.
  • Chip LoRa SX1262, que garantiza gran alcance de comunicación y bajo consumo energético.
  • Procesador ESP32-S3FN8, con doble núcleo Xtensa LX7 de 240 MHz, 8 MB Flash y 512 KB SRAM, ideal para aplicaciones exigentes.
  • Conectividad Wi-Fi (802.11 b/g/n) y Bluetooth 5 / BLE Mesh, ampliando las posibilidades de comunicación inalámbrica.
  • Pantalla OLED de 0,96” (128×64) para visualizar datos, estado de red y nivel de batería en tiempo real.
  • Puerto USB-C con protección ESD y contra cortocircuitos, más gestión avanzada de batería de litio (carga/descarga segura y cambio automático entre batería y USB).
  • Frecuencia LoRa: 868–915 MHz (según versión).
  • Sensibilidad del receptor: hasta –139 dBm.
  • Consumo en modo de sueño profundo: < 10 μA.

Este módulo es Ideal para proyectos IoT, redes Meshtastic, sensores remotos, monitoreo ambiental, automatización y cualquier aplicación que requiera gran alcance de comunicación y bajo consumo energético.

Conclusión

Meshtastic es una alternativa libre y abierta para construir redes de comunicación privadas, ideal para entusiastas de la electrónica, exploradores, agricultores o equipos de emergencia.
Con tan solo unos módulos LoRa, es posible crear tu propia red descentralizada, resistente y completamente independiente de la infraestructura convencional.