Meshtastic: otevřená meshová síť s dlouhým dosahem pro každého

16. 10. 2024
Doba čtení: 10 minut

Sdílet

 Autor: Meshtastic.org
Projekt Meshtastic je open-source iniciativa zaměřená na vývoj platformy pro off-grid komunikaci s dlouhým dosahem, využívající šifrování a snadno dostupný hardware založený na technologii LoRa.

Projekt Meshtastic je open-source software a hardware projekt, který se snaží vytvořit platformu pro off-grid komunikaci s dlouhým dosahem, šifrováním a snadno dostupným hardware, postavenou na technologii LoRa (Long Range).

Autorem Meshtasticu je Kevin Hester, který zveřejnil kód na začátku roku 2020 pro platformu ESP32. Projekt se od té doby rozrostl a nyní na něm pracují desítky dobrovolníků, podporuje několik různých hardware desek, běží na Linuxu, macOS, Androidu a iOS a poslední dobou nabírá na popularitě mezi bastlíři.

V následujícím textu se pokusím shrnout moje zkušenosti s Meshtasticem, ukážu hardware, na kterém síť provozuji, a vysvětlím, k čemu se to dá využít.

Co je Meshtastic?

Základem Meshtastic je technologie LoRa, což je známý a rozšířený rádiový protokol na volně přístupných frekvenčních pásmech, která nevyžadují speciální licenci nebo registraci. LoRa má nízké vysílací výkony (méně než 1 W) a tedy i nízkou spotřebu, ale díky chytře navržené modulaci má velký dosah. Snadno dosáhnete na jednotky kilometrů, s trochou snahy i desítky kilometrů a pokud víte, co děláte, tak i stovky kilometrů. Je tedy ideální na IoT (Internet věcí).

LoRa ovšem definuje pouze fyzickou vrstvu (rádiovou) a už se nijak nezabývá tím, co se vzduchem fakticky přenáší. Proto vzniklo několik různých protokolů, které se dají využít jako síťová vrstva nad technologií LoRa. Asi nejznámější je protokol LoRaWAN, který umožňuje přenos dat mezi koncovým zařízením a bránou.

Meshtastic nad technologií LoRa vytváří síť typu mesh, ve které (na rozdíl od LoRaWAN) neexistuje žádný centrální uzel a kde jednotlivá koncová zařízení komunikují mezi sebou a zároveň přeposílají přijaté zprávy dál, aby se zvýšil jejich dosah.

Ukázková topologie sítě postavené na Meshtastic.

Autor: Meshtastic.org

Po takovéto meshové síti se pak dají posílat šifrované zprávy buď mezi dvěma uživateli nebo mezi skupinou uživatelů. Je důležité zmínit, že síť Meshtastic neobsahuje žádný koordinační prvek, síť se neustále mění a zprávy se šíří různými směry tak, jak je zrovna možné.

Meshtastic lze provozovat na všech frekvenčních pásmech, na kterých lze provozovat samotné LoRa. V Evropě nás zajímají pouze pásma 433 MHz a 868 MHz, obě jsou pro bezlicenční užití a tedy vhodné pro makery a kutily, kteří nejsou zároveň radioamatéry.

Nejzajímavější vlastnost Meshtasticu je fakt, že všechna zařízení mají na začátku stejné nastavení rádia a jeden otevřený kanál pro komunikaci se všemi ostatními uživateli. Tím vzniká síť pro komunikaci s lidmi ve vašem okolí, což je asi nejčastěji zmiňovaná vlastnost projektu, která přitahuje nejvíce nadšenců, kutilů a radioamatérů. Kromě toho lze přes síť také posílat svá vlastní data, která budou zašifrovaná a tím pádem nečitelná pro třetí stranu.

Pro další a podrobnější informace o Meshtastic odkážu na oficiální dokumentaci, článek na Hackaday a na video od Andrease Spiesse s praktickou ukázkou.

Podporovaný hardware

Seznam podporovaných desek je dostupný v dokumentaci. Aktuálně jsou podporovány platformy ESP32, nRF52840 a RP2040 a dva různé typy rádia LoRa – SX1276 a SX1262.

Desky založené na ESP32 většinou poskytují Wi-Fi 2,4 GHz a Bluetooth 4.2 a hodí se pro statické (nepohyblivé) Meshtastic nody napájené ze zdroje. Ty s čipem nRF52840 mají pouze Bluetooth 5.0 a díky minimální spotřebě se hodí na přenosné nody napájené z baterie. Varianty s RP2040 často nemají Bluetooth ani Wi-Fi a nejsou zatím tolik rozšířené.

Obě rádia, SX1276 a SX1262, jsou určená pro LoRa a mají nízkou spotřebu. SX1262 má nižší spotřebu energie, maximální přenosovou rychlost 300 kbps, citlivost až –148 dBm, pracuje na frekvencích 150–960 MHz a má maximální vysílací výkon 22 dBm. Naproti tomu SX1276 má maximální přenosovou rychlost 100 kbps, trochu vyšší spotřebu, citlivost -142 dBm, maximální vysílací výkon 20 dBm a pracuje na frekvenčních pásmech 868 MHz nebo 915 MHz.

Asi nejoblíbenější hardware je momentálně (leden 2024) LILYGO T-Echo – komunikátor s MCU nRF52840 a rádiem SX1262, GPS přijímačem, e-inkovým displejem pro zobrazení přijatých zpráv, akumulátorem a externí anténou.

Další oblíbenou variantou je vývojová deska od Rakwireless WisBlock Base Board RAK19007 s MCU deskou RAK4631. Také obsahuje MCU nRF52840 a rádio SX1262, celý systém pak lze ještě rozšířit o GPS, baterii, solární panel, displej a tlačítka.

WisBlock RAK19007 a RAK4631

WisBlock RAK19007 a RAK4631

Autor: Rakwireless.com
LILYGO T-Echo

LILYGO T-Echo

Autor: Lilygo.cc

Můj hardware

Po přečtení dokumentace k Meshtastic, shlédnutí několika videí a prozkoumání všemožných datasheetů jsem nakonec zvolil RAK19007 s RAK4631 pro frekvenci 868 MHz. Jednak v tu dobu měli v oficiálním e-shopu pětidolarovou slevu a jednak byl skladem Meshtastic started kit. Například T-Echo bylo, v době kdy jsem objednával, vyprodané úplně všude a desky s ESP32 jsem nechtěl kvůli vyšší spotřebě při běhu na baterii.

Pokud budete objednávat hardware, doporučuji podívat se na seznam podporovaných zařízení, jelikož vývoj projektu je velmi rychlý a nové desky přibývají jako houby po dešti. Zároveň si kupte alespoň dvě zařízení, abyste mohli posílat zprávy sami sobě. Je to tak větší zábava hlavně pro ty z nás, kteří bydlí na vesnicích, jelikož v Česku je projekt rozšířen hlavně ve větších městech (viz mapu).

Mým cílem bylo vytvořit přenosný komunikátor s Bluetooth, externí anténou a akumulátorem pro celodenní provoz. Proto bylo nutné k RAK starter kitu objednat ještě následující komponenty:

  • akumulátor LiPol 2500 mAh, 3,7 V s konektorem JST-PH 2.0 mm (laskakit.cz),
  • displej OLED 0,96" 128×64 I2C (laskakit.cz) (pozor, tento displej nepasuje do krabičky úplně přesně),
  • kabel IPEX na SMA-RP, 100 mm (TME.eu nebo Aliexpress),
  • posuvný přepínač SPDT (TME.eu),
  • anténa pro frekvenci 868 MHz (měl jsem v šuplíku, ale vy můžete objednat Gizont 868 SMA-RP z Aliexpress) a
  • 4× šroub M3×20 DIN912 a matici.

Následně je možné vytisknout z PLA krabičku pro RAK19007. Design krabičky obsahuje velké množství variant, já zvolil „hexagons“, 12 mm hluboká záda pro akumulátor, rám s výřezem pro posuvný spínač a čelo s výřezem pro OLED displej. Výběr správných souborů mi dal zabrat a stejně jsem nakonec tiskl rám a záda podruhé, protože jsem zvolil špatně:

  • RAK19007–5005_v15_front-powerswitch-hexagons.stl
  • RAK19007–5005_v15_back_12mm-battery-hexagons.stl
  • RAK19007_v15_button-reset-short.stl
  • RAK19007_v15_frame-no-user-button.stl
Autor: Vlastimil Slinták
Autor: Vlastimil Slinták
Autor: Vlastimil Slinták

Samotné poskládání krabičky je snadné, deska RAK19007 dorazila i se šroubky, které se dají použít pro upevnění PCB k rámu krabičky. Vybraný displej nepasoval přesně do výřezu v čelu krabičky, tak přišlo ke slovu tavné lepidlo. Na obrázcích zatím chybí posuvný spínač pro zapnutí akumulátoru, já na něj při objednávání zapomněl a doplňoval jsem ho až později.

Nahrání firmware bylo snadné a stačí k tomu:

  1. Stáhnout si ZIP s posledním Meshtastic FW,
  2. zapojit RAK19007 přes USB-C k PC,
  3. dvakrát krátce po sobě zmáčknout RESET tlačítko (vedle USB-C konektoru),
  4. zařízení se k PC připojí jako mass-storage,
  5. na tento disk zkopírovat soubor firmware-rak4631-X.X.XX.XXXXXXX.uf2 ze souboru ZIP,
  6. po úspěšném zkopírování se zařízení samo resetuje a po chvíli se na displeji zobrazí logo Meshtastic.

Konfigurace

Pro základní nastavení a následně i používání Meshtastic node je několik možností:

  1. Aplikace pro Android dostupná v Google Play,
  2. aplikace pro iOS dostupná v Apple Store,
  3. aplikace pro macOS dostupná v App Store,
  4. webový klient,
  5. klient CLI v Pythonu.

Ve všech případech je možné připojit zařízení přes Bluetooth nebo sériovou linku (USB). Poté je nutné nastavit region a frekvenci (EU868), jméno vašeho uzlu (jakékoliv lidsky čitelné jméno) a modem preset (určuje rychlost přenosu, spread factor, coding rate a další).

Asi nejdůležitější parametr je modem preset, který určuje základní parametry přenosu po LoRa. Firmware Meshtastic má několik předpřipravených nastavení, které je možné zvolit. Výběr toho správného je velmi důležitý, protože vaše zařízení se pak dokáže spojit pouze s nody, které mají stejný preset. Výchozí a zároveň nejpoužívanější preset je „Long/Fast“, který je ale dost pomalý a v kombinaci s EU omezením na 10% klíčovací poměr (duty cycle) pro pásmo 868 MHz způsobuje problémy ve větších sítích. Nadšenci do Meshtasticu v ČR se proto domluvili a používáme Medium/Fast.

Další důležitý parametr je jméno vašeho uzlu. Jedná se o dva parametry „Long name“ (dlouhé popisné jméno vašeho zařízení, které se zobrazuje ostatním uživatelům v seznamu okolních node) a „short name“ (zkratka pro vaše zařízení, která se ostatním uživatelům zobrazí v chatu a na mapě). Jména mohou obsahovat cokoliv, ale v czmesh jsou domluvena tato základní pravidla:

  • Emoji 📟 na konci jména značí koncový node, který máte u sebe a je spárovaný s telefonem. Přes tento node budete komunikovat.
  • Emoji 🗼 na konci jména značí router/repeater, který má dobré umístění a slouží primárně pro rozšíření mesh sítě. Na tomto node si pravděpodobně nikdo zprávy nepřečte.
  • Emoji 🌐 na konci jména značí, že je node připojen do MQTT sítě. Tento node bude pravděpodobně přeposílat zprávy do a z MQTT serveru, čímž se mohou snadno propojit dvě izolované Meshtastic sítě. V takovém případě bude jméno node ještě obsahovat řetězec „.czmesh“.

Následující screenshoty jsou z aplikace pro Android a mého node, který je připojen přes Bluetooth. Zařízení se jmenuje „VascoCZ Red“ (podle barvy krabičky), krátké jméno „vsrd“ (zobrazuje se například na displeji) a má nastaven region EU868. Screenshoty jsou už starší, takže jméno ještě nemá výše popsané emoji pro czmesh.

Autor: Vlastimil Slinták

Po úspěšném nastavení se vám pak v záložce zpráv (obrázek chatu úplně vlevo v záložkách) objeví výchozí kanál „LongFast“ (pokud jste se rozhodli zachovat výchozí nastavení) nebo „MediumFast“ (pokud jste přepnuli na preset používaný v czmesh), na kterém komunikují všechny ostatní nody. Zprávy, které odešlete v tomto kanálu, se odešlou všem ve vašem okolí.

Pokud budete chtít komunikovat šifrovaně jen s vybranými nody (například jen s vlastními nody nebo nody svých kamarádů), pak je nutné přidat další kanál (v konfiguraci „Channels“) a dát mu náhodně zvolený šifrovací klíč, který uchováte v tajnosti a uložíte do všech node, se kterými chcete bezpečně komunikovat.

Pak už je vše připraveno k experimentům. Já si komunikátor beru pokaždé, když jdu ven a zkouším vysílat, kde se dá. Od ledna se síť Meshtastic hodně rozšířila a aktuálně mám víc než 150 nodů v Brně, Praze a Vídni.

Můj dosavadní rekord je přes 15 km mezi dvěma nody. Jeden byl na střeše dvoupatrového rodinného domu a s druhým jsem vyjel na kole na blízký kopec (Bílé Karpaty). Asi bych zvládl i větší vzdálenost, ale už se mi nechtělo šlapat. :-)

Signál LoRa se nejlépe šíří na viditelnou vzdálenost, tedy když mezi vysílačem a přijímačem nejsou žádné překážky.

Bezpečnostní odbočka

Jednou z prezentovaných vlastností projektu Meshtastic je šifrovaná komunikace. Pojďme se podívat na detaily. Odesílaná zpráva (paket) obsahuje hlavičku (komu, od koho…), která se nešifruje. ID vašeho node je tedy vždy veřejně známá informace. Šifruje se pouze payload, tedy samotný obsah zprávy.

K šifrování se používá symetrická šifra AES128 nebo AES256, konkrétní varianta se zvolí podle dodaného klíče. Každý kanál (představte si to jako skupinový chat) má svůj vlastní tajný klíč. Aby dva nebo více nodů mohly komunikovat, musí mít stejnou konfiguraci kanálu (jméno a tajný klíč).

Klíče se do nodů nahrávají ručně, například přes QR kód, který umí aplikace v Androidu vygenerovat. Tento kód je pak nutné držet v tajnosti, jelikož obsahuje vaše tajné klíče. AES je symetrická šifra. To znamená, že kdokoliv má tajný klíč, může zprávy šifrovat i dešifrovat. Může to udělat i zpětně, protože AES nemá forward secrecy.

Meshtastic není odolný proti replay útokuZprávy nemají žádnou formu elektronického podpisu. Původ zprávy není možné nijak zaručit.

Takzvané „direct messages“, kdy se posílá zpráva konkrétnímu uživateli, používají klíč společného primárního kanálu, takže každý kdo má stejný kanál (a tedy i stejný tajný klíč) může zprávu rozšifrovat a přečíst. Direct messages není možné považovat za soukromé.

Výše uvedené platí pro firmware do verze 2.5.0. Od verze 2.5.0 (včetně) se situace výrazně zlepšila zavedením asymetrické šifry (eliptické křivky) a výměny klíčů algoritmem Diffie-Hellman, které se budou používat pro „direct messages“. Pro skupinový chat se i nadále používá symetrické AES.

Princip výměny klíčů v Meshtastic

Princip výměny klíčů v Meshtastic

Autor: Meshtastic.org

Každý node s FW 2.5.0+ si jednou, po prvním spuštění, vygeneruje tajný klíč a veřejný klíč bude pravidelně posílat do svého okolí všesměrovou (broadcast) zprávou. Kdokoliv může vzít veřejný klíč vašeho node a spolu se svým tajným klíčem zašifrovat zprávu určenou jen pro vás.

Každá zpráva je navíc opatřena elektronickým podpisem (MAC), takže je zaručena nejenom její důvěrnost (nikdo cizí ji nerozšifruje), ale i její autenticita (nikdo cizí ji nezmění).

ict ve školství 24

Tento nový šifrovací algoritmus se používá i pro vzdálenou administraci, kdy je možné měnit konfigurační parametry vzdáleného node přímo přes síť Meshtastic. Každá administrační zpráva také nově obsahuje osmibajtový klíč relace, který je platný 300 sekund, což by mělo zvýšit bezpečnost hlavně proti replay útokům.

(Původně vyšlo na blogu µArt.cz.)

Autor článku

Před lety vystudoval fakultu elektrotechniky a komunikačních technologií v Brně, zaměření na telekomunikace a od té doby dělá embedded vývoj. Zajímá se o elektroniku, programování, 3D tisk a občas vaří pivo.