Säker och gratis åtkomst till Home Assistant via Cloudflare

När din Home Assistant växer kan den snart bli en risk på riktigt i ditt hem, och att ha en eller flera öppningar från Internet direkt in i Home Assistant är då kanske inte så kul. Men med hjälp av gratisfunktioner i Cloudflare kan du säkra kommunikationen utan portöppningar.

Ärligt talat – vad är det som är så farligt med om någon skulle hacka sig in i Home Assistant? Det är klart, till en början så spelar det kanske ingen roll om någon utomstående kan se temperaturer och kanske leka med belysning i hemmet. Men troligen stannar det inte där, åtminstone inte när din Home Assistant växt och utvecklats. Troligen har du snart integrerat någonting som du inte vill att någon utomstående för kontroll över.

När blir det ett problem?

Du kanske har en uppkopplad bil. Integrationen kanske kan låsa upp bilen och starta värmare eller rentav motorn? Har du garage med garageport som du kan styra genom Home Assistant? Är det uppkopplade låset på dörren möjligt att låsa upp genom Home Assistant? Kan man slå av och på larmet..?

Har du kameror utanför eller rent av inne i ditt hem? Skulle det kännas okej om någon helt utomstående har tillgång till dem och kanske publicerar filmer som du eller någon i familjen (eller gäster) kan tycka är integritetskränkande?

Läs mer: Risker i hemautomation

”Du vill helt enkelt inte ha öppningar i din brandvägg”

För att kunna komma åt Home Assistant från Internet då du inte är hemma behöver du öppna i brandväggen – troligen port 8123 – i kombination med till exempel DuckDNS. Varje öppning inåt i en brandvägg är en risk. Har du öppnat måste du också hela tiden hålla dig uppdaterad både i form av kunskap och i form av att Home Assistant och allt som hör därtill är up-to-date. Det duger inte att uppdatera ett par veckor efter en release, det kan finnas säkerhetsuppdateringar där som måste in. Dessutom behöver du kunna identifiera om någon utomstående skulle ha tagit sig in. Kort sagt, du vill helt enkelt inte ha öppningar i din brandvägg, eftersom det ställer mycket höga krav.

Bild som visar schematiskt hur anslutning görs från användare med mobiltelefon direkt mot Home Assistant över Internet
I normala fall ansluter du till Home Assistant direkt över Internet, där det är öppnat i brandväggen för inkommande trafik.

Lösningen

Med hjälp av gratistjänster från Cloudflare kan du sätta upp möjligheten till fjärråtkomst utan att öppna upp inåt i din brandvägg. Enkelt uttryckt bygger det på att din Home Assistant kopplar upp en privat, säker och krypterad tunnel mot Cloudflare’s datacenter. Eftersom uppkopplingen görs inifrån behövs inga portöppningar från Internet. När du å din sida kopplar upp dig mot din Home Assistant så kopplar du upp dig mot Cloudflare’s tjänst som förmedlar vidare. Här läggs också ett gratis-certifikat på i tjänsten, så du behöver inte heller ha ett certifikat via exempelvis Let’s Encrypt.

Jag vill nämna att du naturligtvis kan få precis samma funktionalitet genom att använda Nabu Casa molntjänst som använder samma typ av teknik som jag beskriver här. Medan min lösning är gratis så kostar Nabu Casa en slant (i skrivande stund € 7,50 per månad).

Fördelarna är desamma – kommunikationen mellan t.ex. din app i telefonen och din Home Assistant går genom en tunnel, du behöver inte öppna inåt i brandväggen och du behöver heller inget SSL-certifikat – Cloudflare ser till att trafiken är krypterad.

Bild som visar schematiskt hur anslutning görs från användare med mobiltelefon via Cloudflare mot Home Assistant
Använder du proxy via Cloudflare ansluter du till Cloudflares proxy, som i sin tur har anslutning till Home Assistant, krypterat över Internet. Brandväggen öppnas inte för inkommande trafik.

Löser även problemet med CGNAT-baserad bredbandsanslutning

I takt med att publika IPv4-adresser tar slut hos operatörerna blir det vanligare att bredband levereras med CGNAT vilket innebär att man inte får en äkta publik IP-adress till sin anslutning utan att man är placerad bakom en NAT-brandvägg där flera bredbandskunder delar på en och samma publik IP-adress.

Har man CGNAT-baserad anslutning går det alltså inte att använda sig av exempelvis DuckDNS eller annan dynamisk DNS-tjänst kombinerat med portöppning i din brandvägg.

Lösningen med en Cloudflare-tunnel (eller en Nabu Casa anslutning) löser detta eftersom det är din Home Assistant som initierar anslutningen mot tjänsten och därmed behövs ingen anslutning från Internet direkt in till din Home Assistant.

Så gör du

Skapa en domän

För att kunna använda Cloudflares proxytjänster behöver du en egen domän som du kontrollerar fullt ut. Detta är en stor skillnad mot om du till exempel använder Nabu Casa, DuckDNS eller annan dynamisk DNS-tjänst. Om du inte har en domän kan du registrera en gratis på flera ställen, till exempel på Freenom. Eftersom det finns massor med alternativ kommer jag inte att visa detaljerat hur det går till – det du behöver kunna göra är att välja dina helt egna DNS-servrar i tjänsten. Dessa kommer vara Cloudflares.

Skapa ett konto hos Cloudflare

Det första du gör är att skapa ett konto hos Cloudflare. När du loggat in i dashboard’en klickar du på ”Websites” och därefter väljer du ”Add site”

Gå längst ner och välj gratisplanen för privat- och hobbyprojekt

Nu kommer Cloudflare att söka efter domänen och se vilka existerade DNS-servrar som finns – men om du precis registrerat en domän så kommer det inte att fungera.

Klicka på ”DNS” och scrolla ner på sidan för att se vilka namnservrar Cloudflare använder sig av och som du behöver registrera i din domän.

Gå till administratörskonsolen där du har din domän registrerad och välj att du vill använda dina egna namnservrar. Se till så att namnservrarna för din domän matchar de som visas på Cloudflares sida enligt bilden ovan.

Installera tillägget för Cloudflare i Home Assistant

Dags att bege sig till Home Assistant – gå till Inställningar och Tillägg och klicka på ”Add-On Store”. Väl där klickar du på ”kebab-menyn” (de tre prickarna) och väljer Repositories. Klistra där in länken till Cloudflared Github Repository och klicka på ”Add”. Efter det ska du se Cloudflared i listan.

Tillbaka i Add-On store klickar du in dig i Cloudflared och installerar tillägget. Ett tips är att se till att inlägges startas automatiskt vid uppstart samt att slå på ”Watchdog” så att tillägget startas om automatiskt ifall det av någon anledning skulle stoppas oavsiktligt.

Gå till ”Configuration” – det enda du behöver göra i nuläget är att skriva in ditt domännamn i rutan ”External Home Assistant Hostname” – alltså domännamnet exakt som det är registrerat.

Spara, gå tillbaka till ”Info” och starta tillägget. Efter några sekunder kan du gå till ”Log” – där kommer det finnas en länk som du ska gå till för att auktorisera tillägget hos Cloudflare. Kopiera hela länken (jag har maskat bort en del i bilden) och skriv in i din webläsare där du kör Cloudflare Dashboard (du kan behöva logga in igen).

Du kommer nu att få välja vilken zon du vill koppla tunneln mot, välj då den zonen du tidigare skapade i Cloudflare och tryck på ”Authorize” för att auktorisera. Om ingenting gått fel får du meddelande om att auktoriseringen lyckades.

Gå tillbaka till loggen för tillägget Cloudflared i Home Assistant – där ska du nu se att tunneln är startad. Längst ner i loggen ska du se information om att tillägget skapat en tunnel till Cloudflares datacenter.

Du ska se att minst en men troligen två eller flera anslutningar skapats. ”location=XXX” är till vilket Cloudflare-datacenter den aktuella anslutningen går mot. I fallet ovan är den ena mot Stockholm (ARN) och den andra mot Tallinn (TLL). Här finns en komplett lista över datacenter och dess status.

Om du nu testar att ansluta till den domänen som du registrerat med i exemplet https://cooldomainname.cf/ så ska du få ett svar, men ett felmeddelande ”400: Bad Request” vilket är precis som det ska vara. Gå tillbaka till dokumentationen för tillägget Cloudflared så ser du under ”Home Assistant Configuration” att du behöver göra tillägg i Home Assistants konfigurationsfil.

Kopiera stycket och klistra in i Home Assistants configuration.yaml som det är, spara och starta sedan om Home Assistant. Om du redan har ett http: stycke i filen lägger du in de tre understa raderna där. Därefter kan du återigen prova att ansluta till ditt domännamn och faktiskt komma fram till Home Assistant.

Tips: Lägga till fler tjänster

Om du har fler tjänster i ditt nätverk som du vill komma åt via Cloudflare-tunneln så går det alldeles utmärkt. Under inställningarna för Tillägget Cloudflared i Home Assistant definierar du lista under ”Additional Hosts” – exempel nedan:

  - hostname: "www.cooldomainname.cf"
    service: "http://192.168.1.10:8080"

hostname: är det namn som man ansluter till från Internet, och service: är den interna adressen på nätverket som tjänsten svarar på.

Här vill jag dock varna: I dokumentationen ges exempel på att publicera ut router och disklagring – det rekommenderar jag inte att du gör eftersom då vem som helst på Internet får tillgång till funktionen. Använd bara tunneln till sådant du verkligen vill att hela världen ska kunna komma åt – till exempel en webbsida.

Mattias Sjödin

Jag arbetar till vardags som CISO inom finansvärlden med bakgrund både som CISO inom IT-branchen och som konsult inom informations- och cybersäkerhet, med bevisad kompetens och erfarenhet i ryggen genom bland annat CISA- och CISSP-certifieringar. Privat grottar jag gärna ner mig i hemautomation och allt som hör till. Jag kör Home Assistant (supervised), och blandar friskt mellan enheter som kör Zigbee, Z-Wave, 433MHz och Wi-Fi. Att leka med microcontrollers som kör ESPhome och Tasmota är hur kul som helst.

4 kommentarer till “Säker och gratis åtkomst till Home Assistant via Cloudflare”

  1. Hej,
    Tack för intressant artikel, det skall prövas!

    Har du någon aning om hur mycket data en tunnel använder i ”viloläge”, utan session?

    Tänker på om det är rimligt att köra HA via 4G/5G med kontantkort i sommarstuga eller om GB kommer ätas upp av pollning, etc. även om ingen interaktion äger rum.
    Jag skulle naturligtvis behöva stänga av de tjänster/integrationer i HA som förbrukar data.

    Jag har idag remote styrning över 4G av Panasonic värmepump samt ett par Raychem termostater som är snälla och förbrukar knappt något. Men skulle vilja ha ett par temp/rörelse-sensorer, kunna monitorera elförbrukning och även någon kamera att titta in på.

    Mvh, Börje

    1. Hej!

      Tack för din kommentar! Väldigt bra fråga – jag har letat runt i dokumentationen och funnit att man ska kunna justera inställningarna för en tunnel genom parametern tcpKeepalive (som standard 30 sekunder) och då borde man kunna laborera med den för att få så lite overhead-trafik som möjligt.

      https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/local/local-management/ingress/

      //Mattias

  2. Det har visat sig att Cloudflare gjort om lite i uppsättning av tunnlar vilket innebär att det automatiska sättet att registrera en tunnel genom att kopiera och använda logglänken (avsnittet ”Installera tillägget för Cloudflare i Home Assistant” ovan) inte alltid fungerar.

    Det man då måste göra är att i Cloudflare Dashboard (under sin domän) gå till Traffic –> Cloudflare Tunnel – gå till Zero Trust Dashboard –> Tunnels och skapa en tunnel där. Tunnel-token som där visas anger man sedan i Home Assistant tillägget. Under konfiguration av tunneln ställer man också in vilket externt hostnamn man vill använda sig av. Bättre guide kommer!

    Dessutom har det visat sig att exemplet på domännamnsleverantören FreeNom som jag använde har problem som gör att det inte går att registrera nya domäner. Det finns andra aktörer, har dock inget bra tips i nuläget eftersom jag vill känna mig någorlunda trygg i mina rekommendationer.

Kommentarer är stängda.