blog.vyoralek.cz

Centrum chytré domácnosti – HomeAssistant (Hass.io) – 11 část – vzdálený přístup do Hass.io

Jak nastavit vzdálený přístup do Hass.io z Internetu pomocí šifrovaného SSL připojení.

Jednou z nejužitenějších vlastností, které můžeme pro HomeAssistent nastavit je vzdálený přístup, tak abychom mohli mít přehled a ovládat svou domácnost v podstatě odkudkoliv. Zároveň to ale znamená určité bezpečnostní riziko.

V dnešním článku si ukážeme krok za krokem jak tuto funkcionalitu nastavit a to hned ve dvou možnostech – použití domény třetího řádu, kterou nevlastníme tak i v případě využití naší vlastní domény.

Tři kroky k vzdálenému přístupu do Hass.io z Internetu:

  1. Volba domény
  2. DDNS – dynamické DNS
  3. Hass.io Addon – Nginx Proxy Manager

1. Volba domény

První věc kterou potřebujeme, je nějaká internetová adresa pro vzdálený přístup. Možnosti máme v základě dvě:

1.1 Hass.io na vlastní doméně

Bude nás stát nějaký roční poplatek za doménu, ale zároveň zjednodušuje adresu.

Jedná se o tzv. doménu druhého řádu, tj. text v adrese před tečkou, tj. například tento blog má doménu 2.řádu vyoralek.cz

1.2 Doména třetího řádu, kterou nevlastníme

Tato možnost je zpravidla součástí služby dynamického DNS a bývá velice často zdarma. Příkladem domény třetího řádu může být například adresa vyoralek.myddns.rocks – níže si ukážeme jak ji získat.

?Pokud ještě vlastní doménu nevlastníte, tak zejména pro prvotní odkoušení se není potřeba bát využít i domény třetího řádu. Z dlouhodobého hlediska pak zřejmě budeme tíhnout spíše k variantě provozování Hass.io na doméně vlastní.

2. DDNS – dynamické DNS

Pokud nemáme přidělenou veřejnou pevnou IP adresu od našeho poskytovatele připojení k Internetu, budeme potřebovat rozchodit tzv. dynamické DNS ? pokud IP adresu máte pevnou, můžete tuto kapitolu přeskočit.

Jedná se o službu, která na jedné straně zpravidla běží uvnitř vaší lokální sítě a je schopna zjistit naší aktuální veřejnou IP adresu, kterou pak je schopna aktualizovat přímo ve veřejných DNS záznamech naší domény.

Firem poskytující dynamické DNS existuje více. Já vám dnes představím jednu z nich – dynu.com, která má jak variantu zdarma tak i rozšířenou placenou verzi.

? Rozdíl mezi placených a účtem zdarma na dynu.com, je pro naše účely zejména v počtu domén a počtu DNS záznamů pod jednou doménou. Na úplně základní nastavení si vystačíte s verzi zdarma. Pokud však budete svou doménu používat naplno pak bude potřeba využít verzi placenou, která však není nikterak drahá – cca. 10USD za rok.

2.1 Registrace uživatelského účtu

Než začneme s nastavením, je potřeba si vytvořít na dynu.com účet. To můžeme udělat buď kliknutím na Create Account v horním pravém rohu a nebo na tomto odkazu.

Vytvoření účtu pro Dynu.com
Vytvoření účtu pro Dynu.com

2.2 Vytvoření DDNS služby

Po přihlášení klikneme na ikonku s modrou vlajkou – DDNS Service.

Ovládací panel účtu
Ovládací panel Dynu.com účtu

.. a kikneme na ikonku vpravo Add

Nyní bychom měli vidět dvě možnosti, které korespondují s první kapitolou – tj. můžeme buď:

  • vytvořit službu Dynamického DNS třetího řádu pod „cizí“ doménouOption 1: Use Our Domain Name – adresa pak bude obsahovat náš vlastní prefix kombinovaný s jednou z dostupných domén, tj. například já si vytvořil záznam vyoralek.myddns.rocks, kde vyoralek odpovídá části hostname a myddns.rocks je jedna z domén se seznamu Top Level.
  • nebo službu Dynamického DNS druhého řádu po naší doménouOption 2: User Your Domain Name. Dále budu rozepisovat pouze první možnost, nicméně takhle druhá se liší jen v jedné věci a to, že budeme potřebovat převést veřejné DNS záznamy po služby dynu.com
    Pro .cz domény můžeme použít již definovaný NSSET s názvem DYNU
Volba typu domény dynamického DNS
Volba typu domény dynamického DNS

2.3 Instalace a konfigurace služby ddclient

Jakmile máme aktivní záznam v Dynamic DNS na dynu.com je potřeba zajistit propopisování naší veřejné IP adresy do DNS záznamů na dynu.com.

K tomu budeme potřebovat doinstalovat na náš lokální počítač – ideálně na tentýž kde máme Hass.io – službu ddclient.

V případě Linux distribucí Ubuntu/Armbian/Debian je instalace jednoduchá – stačí zadat příkaz:

apt-get install ddclient

a po instalaci bude potřeba upravit konfigurační soubor, který najdeme v /etc/ddclient.conf

# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf
daemon=60
syslog=yes
protocol=dyndns2
use=web, web=checkip.dynu.com/, web-skip='Current IP Address: '
server=api.dynu.com
ssl=yes
login=<NAHRADTE_UZIVATELSKYM_JMENEM_PRO_DYNU_COM>
password=<NAHRARTE_UZIVATELSKYM_HESLEM_PRO_DYNU_COM>
vyoralek.myddns.rocks

Pokud máme vlastní doménu a chceme aktualizovat DNS pro záznam třetího řádku pak řádek v konfiguraci bude vypadat takto:

<VASE_DOMENA>&alias=<TRETI_RAD>
#tj. např. pro hassio.vyoralek.cz by to bylo:
vyoralek.cz&alias=hassio

V případě, že jsme použili SSL komunikaci bude potřeba doinstalovat ještě pár dalších balíčků:

apt-get install libio-socket-ssl-perl

Restartujeme pomocí service ddclient restart a DNS záznam by se měl aktualizovat automaticky každých 5 minut v případě změny naší veřejné IP adresy.

Pokud si nejsme jistí konfigurací, můžeme klienta spustit v debug módu pomocí:

ddclient -daemon=0 -debug -verbose -noquiet

3. Hass.io Addon – Nginx Proxy Manager

Instalace Nginx Proxy Manageru nám přináší dvě základní funkcionality:

  1. možnost provozovat proxy (bránu) na portu 80, resp. 443 (https) pro více služeb běžících na různých portech podle domény.
  2. získávat SSL certifikáty a šifrovat provoz směrem k internetu
Schéma Nginx proxy manažeru
Schéma Nginx proxy manažeru

Dle schématu výše si pak můžeme představit, že na lokálním počítači máme dvě služby – jednu na portu xxx (např. hassio) a druhou na portu yyyy (např. Ubiquiti Controller).

Zároveň máme dvě domény xxx.cz a yyy.cz a chceme, že pokud kdekoliv na světe zadáme do prohlížeče adresu xxx.cz abychom se dostali na hassio a pokud yyy.cz tak na ubiquiti. Pokud bychom nepoužili proxy pak bychom museli služby i z internetu odlišovat portem, jelikož na úrovni routeru můžeme jeden port přesměrovat jen na jeden počítač. Pokud však máme proxy tak router nastavíme na tuto proxy a samotné přesměrování dle domény už nastavíme na proxy.

Dost bylo teorie jdeme si to ukázat podrobnosti na našem příkladu domény a hassia.

3.1 Instalace a nastavení addonu

Přihlásíme se do HomeAssistenta a najdeme si položku Hass.io -> Add-on store -> Community Hass.io Add-ons -> Nginx Proxy Manager a addon nainstalujeme.

Nginx proxy manager
Nginx Proxy Manažer jako Add-on Hass.io

Po instalaci není potřeba přidávat nebo měnit cokoliv konfiguraci a tak můžeme rovnou addon spustit. Po kliknutí na Open Web UI bychom měli být přesměrování na port 80 a vidět následující obrazovku:

Přihlašovací obrazovka Nginx Proxy Manager
Přihlašovací obrazovka Nginx Proxy Manager

a vyplníme přihlašovací údaje: [email protected] / changeme. Bezprostředně po přihlášení budeme vyzvání k změně přihlašovácích údajů a poté i hesla.

Nastavení účtu pro Nginx Proxy Manager
Nastavení účtu Nginx Proxy Manager

3.2 Nastavení proxy

Veškeré proxy se nastavují v záložce Hosts a přes položky Proxy Hosts.

Nastavení proxy - hlavní obrazovka
Nastavení proxy – hlavní obrazovka

Nejrpve si vyzkoušíme variantu bez SSL, tj. zmáčkneme Add Proxy Host a nastavíme pouze Details záložku dle obrázku:

Nastavení proxy - detaily položky
Nastavení proxy – detaily položky

Na routeru si nastavíme přesměrování pro port 80 na počítač, kde běží nginx proxy a stejný port 80.

Nastavení přesměrování na routeru
Nastavení přesměrování routeru

Nyní už můžeme v prohlížeči zkusit zadat novou adresu, tj. v našem příkladu vyoralek.myddns.rocks.

Přihlášení bez SSL
Přihlášení do HA bez SSL (http)

Pokud nám naskočila obrazovka s přihlášením do Home Assistenta tak už máme napůl vyhráno.

Můžeme se tedy vrhnout na konfiguraci včetně SSL. Otevřeme si konfiguraci proxy z předchozí části a přepneme se do záložky SSL, kde v sekci SSL Certificate vybereme volbu Request a new SSL Certificate.

Nastavení proxy
Nastavení proxy – vytvoření nového SSL certifikátu
Nastavení proxy
Nastavení proxy – odeslání požadavku na SSL certifikát

Vrátíme se do nastavení routeru a přidáme přesměrování pro port 443.

Nastavení přesměrování na routeru
Nastavení přesměrování na routeru

Nyní můžeme zkusit refreshnout stránku HomeAssistenta v prohlížeči a automaticky bychom měli být přesměrování na https.

Přihlášení s SSL
Přihlašení do HA s SSL

Alternativa pro doménu třetího řádu

Pokud neplánujete používat více domén/subdomén můžete použít řešení bez Nginx Proxy Manageru a pak nejjednodušší variantou je využití služby DuckDNS, který má plugin přímo v Hassio Add-on storu.

Plugin obsahuje také generování SSL certifikátu, takže je takové all-in-one řešení, které má však omezení, že lze použít pouze pro doménu třetího řádu od DuckDNS a nelze použít více domén najednou.

Na routeru je pak potřeba nastavit přesměrování na DuckDNS addon, tj. velice podobně jako pro Nginx Proxy Manager.

Addon DuckDNS
DuckDNS – add-on Hass.io

Kompletní série o HomeAsistantovi obsahuje následující články:

  • 1. část – Instalace HomeAsisstent
  • 2. částIntegrace Sonoff s firmware Sonoff-Tasmota
  • 3. částIntegrace Homekit
  • 4. částIntegrace Sonoff s firmware Sonoff-Tasmota – 2 část
  • 5. částIntegrace s Wemos D1 a senzory teploty
  • 6. částIntegrace Sonoff s firmware ESPHome
  • 7. částIntegrace Sonoff POW s firmware ESPHome
  • 8. částIntegrace LED Magic Home s firmware ESPHome
  • 9. částIntegrace Xiaomi Mijia a Aqara
  • 10. část – Integrace vlastní Zigbee gateway
  • 11. část – Vzdálený přístup do Hass.io z Internetu
  • 12. část – zobrazení senzorových data pomocí InfluxDB a Grafany
  • 13. část – Hass.io Add-ony, které používám
  • 14. část – Integrace Xiaomi Mi Flora
  • 15. část – Integrace Withings (Nokia)
  • 16. část – náhrada SQLite databází MySQL
  • 17. část – HACS Add-ony – instalace a konfigurace
  • 18. část – Integrace Sonoff s firmware eWeLink
  • 19. část – nová integrace Sonoff pro HA
  • 20. část – měření spotřeby
  • 21. část – automatické zálohy a obnovení ze zálohy
  • 22. část – napojení hlasového asistenta Amazon Alexa
  • 23. část – automatické zálohy na síťový sdílení disk (Samba)
  • 24. část – Bluetooth zařízení a ESPHome proxy
  • 25. část – nefunkční aktualizace HomeAssistanta
  • 26. část – integrace SwitchBot produktů
  • 27. část – integrace fotovoltaiky Growatt

18 comments

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..

  • Chapu to dobre, ze to resi jen problem dynamicke verejne IP, ale neni to nic jak vyresit pristup bez verejne IP ze?

    • No já nevím, ale četl jsem ten návod celý a už na začátku jsem se dověděl toto:

      „Pokud nemáme přidělenou veřejnou pevnou IP adresu od našeho poskytovatele připojení k Internetu, budeme potřebovat rozchodit tzv. dynamické DNS ? pokud IP adresu máte pevnou, můžete tuto kapitolu přeskočit.“

    • Obecně nějakou veřejnou IP adresu mít budete. Otázka je, zda bude na úrovni vašeho routeru a nebo o úroveň výše, kdy poskytovatel připojení routuje veřejný trafic už na jeho úrovni. Pak návod s největší pravděpodobností fungovat nebude, jelikož byste musel napsal provideru o nastavení přesměrování portů na vnitřní adresy o kterém píšu u routeru. Na druhou stranu je zde ještě jedna možnost použití Cloudu od HomeAssistenta, který by myslím mohlo fungovat i bez veřejné IP. Nicméně nemám zatím vyzkoušeno a jedná se o placenou službu.

      • Děkuji za skvělé články. Sám jsem případ, kdy poskytovatel má pod veřejnou IP adresou své klienty a DDns bohužel nefunguje. Většinou za veřejnou a statickou IP adresu chce poskytovatel příplatek. Teď otázka, jestli se tedy peníze nevyplatí dát za Cloud Home Asistent. Co jsem četl, mělo by to být 5$ měsíčně. Prozatím zkouším variantu měsíc zdarma a naprostá spokojenost.

  • Jakým způsobem je třeba nastavit přesměrování portu pro DuckDNS? Setkal jsem se s přesměrováním 8123 na 8123, 443 na 8123 s IP, kde běží HA. Ani jeden způsob mi nefunguje 🙁

    • Na jedné takové pomocné instanci HA používám DuckDNS a mám tam zřízenou veřejnou IP adresu.
      Přesměrovávám 443 na 8123 s IP kde běží HA.
      V configuration.yaml mám ještě tento zápis:
      http:
      base_url: https://mojejmeno.duckdns.org
      ssl_certificate: /ssl/fullchain.pem
      ssl_key: /ssl/privkey.pem
      A takto se k tomuto HA připojuji adresou https://mojejmeno.duckdns.org

  • Po istalaci Nginx proxy manažeru verze 0.5 nejde spustit.
    V návodu autora čtu, že vyžaduje MarinaDB.
    Nainstaloval jsem a zprovoznil, ale stále nejde spustit.
    Neví co s tím.

    • V HomeAssistentovi a sekci s addony je potřeba se podívat do toho pro Nginx Proxy Manager a v záložce log by mělo být vidět co je špatně, resp. proč to nejde spustit.

      • Nginx Proxy Manager v záložce log není nic, žádný záznam.V Dockeru Synology NAS není addon vidět aby se dál spustit. V HomeAssistentovi a sekci s addony pro Nginx Proxy Manager je nainstalovaný a po stisku start jen blikne a nespustí se.

        • Oh, tak to bude skutečně asi někdy úplně na začátku. Z nějakého důvodu se zřejmě vůbec nespustí Docker container s addonem, ale divný, že říkáte že ho ani v seznamu nevidíte. Obávám se, že vám takhle neporadím, jelikož Synology s Dockerem nemám a netuším takhle na dálku co by tam mohlo být špatně. Ale třeba se najde někdo s podobnou konfigurací. Je to taková zoufalost trochu, ale ještě mě napadá kouknout se přes Addon Portainer, ale nevím jeslti vám to přinese nějaké nové informace.

  • Jen bych dodal, že je k takovému řešení třeba modemu/routeru, který podporuje NAT loopback alias Hairpin mode, což defacto žádný z těch „obyčejných/standardních“ prostě nemá, myslím, že by si spousta lidí ušetřila x hodin testování a googlu pro řešení, stejně jako já.

  • Dostal jsem se skoro do cíle, ale když chci uložit nastavení SSL tak mi vyskočí chyba Internal Error, nejaká rada? díky

    • Podíval bych se do logu addonu jestli jsou tam nějaké detaily

    • Zdravím, mám stejný problém. Tady je log (mail a doménu jsem si teď přepsal, aby nebylo viditelné):
      Error: Command failed: /usr/bin/certbot certonly –non-interactive –config „/etc/letsencrypt.ini“ –cert-name „npm-20“ –agree-tos –email „[email protected]“ –preferred-challenges „dns,http“ –domains „xxx.xxxx.cz“
      Saving debug log to /data/logs/letsencrypt/letsencrypt.log
      Plugins selected: Authenticator webroot, Installer None
      Performing the following challenges:
      http-01 challenge for xxx.xxxx.cz
      Using the webroot path /data/letsencrypt-acme-challenge for all unmatched domains.
      Waiting for verification…
      Challenge failed for domain xxx.xxxx.cz
      http-01 challenge for xxx.xxxx.cz
      Cleaning up challenges
      Some challenges have failed.

      at ChildProcess.exithandler (child_process.js:308:12)
      at ChildProcess.emit (events.js:315:20)
      at maybeClose (internal/child_process.js:1048:16)
      at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5)