Pojďme programovat elektroniku

Detektor garážových vrat: Haló, krabičko, jak se k tobě dostanu z internetu?

  • Minule jsme si postavili detektor garážových vrat
  • Jeho řídící čip je skrze Wi-Fi připojený do domácí sítě
  • Dnes si ukážeme několik technik, jak se k němu dostat z internetu

Zkraje února jsme si ukázali, jak pomocí laserového nebo ultrazvukového dálkoměru a drobné destičky s Wi-Fi čipem ESP8266 postavit jednoduchý zabezpečovací systém do garáže.

Prototyp jsme připevnili na strop a ve smyčce stále dokola měřili vzdálenost k nejbližší překážce pod ním. Z těchto dat jsme pak mohli vyčíst, zda je pod senzorem automobil nebo jsou otevřená vrata.

Základní HTTP server v LAN

Jelikož jsme programovali Wi-Fi čip ESP8266, náš firmware se hned po startu připojil do domácí sítě, získal místní IP adresu a na standardním TCP portu 80 spustil jednoduchý HTTP server. Pak už jen stačilo dohledat adresu čipu třeba skrze populární mobilní aplikaci Fing, vyťukat ji do webového prohlížeče a podívat se, jak je na tom právě teď vaše garáž.

Klepněte pro větší obrázekKlepněte pro větší obrázek
Ultrazvukový dálkoměr na stropě garáže jako jednoduchý detektor otevřených vrat a zaparkovaných automobilů

Primitivní HTTP server běžící přímo na drobném čipu sice v prostředí Arduino naprogramujete velmi jednoduše na několika řádcích kódu, ale má to jeden principiální háček. Web našeho dálkoměru bude ve výchozím stavu dostupný jen z naší vlastní sítě. Sice se tedy podíváme na stav garáže, ale pouze v případě, že budeme doma, což trošku postrádá smysl.

Klepněte pro větší obrázek
Jednoduchá webová stránka Wi-Fi čipu

Jak tedy fungují všechny ty ostatní komerční krabičky internetu věcí počínaje chytrými zásuvkami a konče žárovkami, se kterými se skrze mobilní aplikaci spojíme klidně i z dovolené v Bulharsku? Dnes si ukážeme několik technik, s jejichž pomocí by to mohl domácí bastlíř jednoduše vyřešit.

Přesměrování portů

Tím zdaleka nejjednodušším způsobem, byť zároveň nejméně bezpečným, je primitivní pootevření vrátek do naší domácí sítě s veřejnou internetovou IP adresou.

Pokud bude Wi-Fi čip běžet třeba na LAN adrese 192.168.1.10 a jeho HTTP server na TCP portu 80, na domácím Wi-Fi routeru můžeme v sekci přesměrování portů (port forwarding) nastavit pravidlo, že když se někdo z vnějšího internetu pokusí přihlásit na naši veřejnou internetovou IP adresu a TCP port 80, router jej přesměruje na 192.168.1.10:80.

Klepněte pro větší obrázek
Přesměrování vnějšího TCP portu na vnitřní na routerech se systémem OpenWrt

IPv4 adres je ale relativně omezené množství (zhruba 4 miliardy), a tak celý veřejný rozsah průběžně procházejí roboti z Číny, Ruska a dalších končin a zkoušejí, zda na nich nejsou otevřené právě některé z těchto typických TCP portů. Suma sumárum, náš webový server na ESP8266 by se brzy dostal do obřího indexu vyhledávače internetu věcí Shodan. A to fakt nechcete!

Má to nějaké řešení? Pokud chceme zachovat princip přesměrování portů, podstatnou část podobných automatických čmuchalů odstřelíme volbou nějakého atypického portu, kterým může být prakticky jakékoli kladné celé 16bitové číslo. Zatímco na TCP port 80 se podívá každý bot, takový port 20123 už zkontroluje leda v případě hloubkové analýzy.

Technik, jak zabezpečit přesměrovaný port, je samozřejmě více. Základem je šifrování, nějaká forma autentizace, omezení spojení jen na vybrané IP adresy klientů (white list), anebo třeba namísto přesměrování portů přistupovat do domácí sítě LAN skrze šifrovaný VPN tunel.

HTTP server v internetu

No dobrá, ale co když veřejnou a ideálně neměnnou IP adresu nemáme a do naší domácí LAN se zvenčí prostě nedostaneme? V tom případě můžeme celou komunikaci otočit. Namísto toho, abychom se připojovali k HTTP serveru na čipu ESP8266, se budeme připojovat k libovolnému webovému serveru kdesi na internetu. Buď si jej zaplatíme u některé z běžných hostingových společností, Microsoft Azure, Amazon AWS, anebo využijeme Google Cloud.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Management Google Cloudu a nejslabší virtuální server s Ubuntu, který se však vejde do měsíční bezplatné kvóty – viz přiložená faktura za leden. Spravovat jej mohu třeba skrze standardní konzoli SSH.

Google totiž u svých cloudových služeb nabízí poměrně slušnou základní bezplatnou kvótu, do které se běžný domácí kutil bez velkých nároků hravě vejde. Zdarma dosáhnete v rámci služby Compute Engine dokonce i na nejnižší virtuální stroj f1-micro s Ubuntu600 MB RAM10GB úložištěm a hlavně veřejnou statickou IP adresou.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Webový správce mojí chytré domácnosti, o kterou se stará Raspberry Pi 4. Webový frontend ale neběží přímo na Raspberry Pi, ale právě na virtuálním serveru Google Cloud, který se teprve skrze technologii WebSocket šifrovaně a hlavně obousměrně spojí se základnou v bytě a streamuje z ní údaje v reálném čase ve formátu JSON.

Získáte tedy zhruba výkon Raspberry Pi Zero, který sice opravdu není na to, abyste na něm rozjeli vlastní Facebook, bude však bohatě stačit k tomu, aby na něm poslouchal jednoduchý server s webovou prezentací jen pro naše soukromé účely. Tedy jakási brána naší vlastní zbastlené chytré domácnosti.

Pokračování článku patří k prémiovému obsahu

Získejte neomezený přístup a Živě bez reklam už za 41 Kč měsíčně

Témata článku: Pojďme programovat elektroniku, Python, C++, Arduino, Články z Computeru