Wichtige Info

Die Inhalte, die du hier siehst stelle ich dir ohne Werbeanzeigen und ohne Tracking deiner Daten zur Verfügung. Trotzdem muss ich die Server bezahlen sowie Zeit in Recherche, Umsetzung sowie Mail Support stecken.
Um dies leisten zu können, verlinke ich in einigen Artikeln auf die Plattform Amazon. Alle diese Links nennen sich Afiliate Links. Wenn du dir mit diesem Link etwas kaufst, dann erhalte ich eine kleine Provision. Dies ändert jedoch NICHT den Preis, den du bezahlst!
Falls du mich also unterstützen möchtest, kannst du auf den Link zum Produkt klicken und hilfst mir dabei, dieses Hobby weiter zu betreiben.
Da ich Keine Werbung schalte und keine Spenden sammle, ist dies die einzige Möglichkeit, meine Systeme und mich zu finanzieren. Ich hoffe du kannst das verstehen :)



Homeassistant via reverse proxy zugänglich machen


Einleitung

Aufgrund einiger Erweiterungen, welche ich gezwungenermaßen Nutzen muss, muss ich meine Smart Homeinstallation aus dem Internet zugänglich machen.
Da ich weder einen Port auf meinem Router öffnen möchte, noch die HASS installation in eine DMZ packen will, habe ich mich dazu entschienden, mein Homeassistant via VPN Tunnel und Reverse Proxy zugänglich zu machen.
Im folgenden zeige ich, wie ich meinen Debian Server konfiguriert habe um dies zu ermöglichen und welche Fallstricke bei mir zu beachten waren.
In dieser Anleitung gehe ich davon aus, dass bereits eine Homeassistant Installation und ein funktionierender Apache2 Webserver vorhanden sind.

Homeassistant

Zuerst müssen wir Homeassistant zur Nutzung eines Reverse Proxys konfigurieren, da HASS diese Verbindung ansonsten von Haus aus blockiert. Dafür tragen wir in der confiiguration.yaml folgendes ein:

http:
  # server_host: 127.0.0.1 - Nur möglich, wenn Proxy auf der selben Maschine wie HASS läuft... 
#Erlaubt diue Nutzuing des forward headers, dafür muss proxy auf whitelist
  use_x_forwarded_for: true 
 #ich habe nur 1 proxy, daher nur eine IP (auch Netz (z.B. /24) ist möglich)
  trusted_proxies: 192.168.100.1 
cors_allowed_origins:
    - https://hass.jr.local
    - https://open.domain.com

Die Proxy Server IP (intern) muss an das vorliegende Netz angepasst werden!

Sobald das geschehen ist, könnt ihr unter Developer Tools > YAML – Die Konfigurationsdatei prüfen und dann neustarten.

Debain Server

Hier sind mir einige Fallstricke begegnet, gerade nach der Anmeldung hatte ich zu Anfang immer die Fehlermeldung (Unable to Connect to Homeassistant) ich hoffe, dass dieser Fehler euch erspart bleibt. In meinem Fall hatte ich Routen vergessen einzutragen, die der Proxy weitergeben soll und dass die Header angepasst werden sollen… Im folgenden meine Konfiguration

Unter /etc/apache2/sites-availiable legen wir eine neue Config datei an, bei mir heißt diese
hass.rev.proxy.conf

<VirtualHost *:80> #euer Port, den ihr im Netz ansprechen wollt
        ServerName <<euer Servername>> bei mir ###.justinritter.de
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/hassError.log
        CustomLog ${APACHE_LOG_DIR}/hassAccess.log combined

        RemoteIPInternalProxy 192.168.100.1 #eure proxy IP
        RemoteIPHeader X-Forwarded-For

        <Location "/">
                Satisfy any
        </Location>
        <Location "/api">
                Satisfy any
        </Location>


        ProxyPreserveHost On
        ProxyRequests off
#Da ich nur SSL nnutze, muss ich die SSL Engine verwenden und die Zertifikatsprüfung für intern deaktivieren
        SSLProxyEngine On
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerExpire off
        SSLProxyCheckPeerName off
#Im folgenden die unterschiedlichen "Routen", die weitergegeben werden sollen
# die urls müssen an die eigene Adresse angepasst werden
# Wenn ihr zwischen Proxy und HASS SSL nutzt, dann nutzt ebenfalls https://* und wss:// - alternativ http:// und ws://
        ProxyPass / https://hass.jr.local/
        ProxyPassReverse / https://hass.jr.local/
        ProxyPass /api/websocket wss://hass.jr.local/api/websocket
        ProxyPassReverse /api/websocket wss://hass.jr.local/api/websocket
        ProxyPass /auth/external/callback https://hass.jr.local/auth/external/callback
        ProxyPassReverse /auth/external/callback https://hass.jr.local/auth/external/callback


# AUch hier die eigene Adresse eintragen 
        RewriteEngine on
        RewriteCond %{HTTP:Upgrade} =websocket [NC]
        RewriteRule /(.*)  wss://hass.jr.local/$1 [P,L]
        RewriteCond %{HTTP:Upgrade} !=websocket [NC]
        RewriteRule /(.*)  https://hass.jr.local/$1 [P,L]

# Wenn ihr nach aussen hin (WAN) SSL nutzt, dann hier die eigenen Zertifikate eintragen
        SSLEngine on

        SSLCertificateFile /etc/letsencrypt/live/cert/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/cert/privkey.pem
</VirtualHost>

Als nächstes müsst ihr die Seite aktivieren mit a2ensite <<Seitenname>>

und zusätzlich müsst ihr noch die folgenden Apachemodule aktivieren
- mod_proxy (a2enmod mod_proxy)
- proxy (a2enmod proxy)
- proxy_http (a2enmod proxy_http)
- proxy_wstunnel (a2enmod proxy_wstunnel)
- remoteip (a2endmod remoteip)
- rewrite (a2enmod rewrite)

Nachdem das geschafft ist, nur noch apache2 neustarten

sudo service apache2 restart

Zuletzt müssen ggf. noch eure Firewall o.Ä. angepasst werden und dann kann es losgehen…
In meinem Fall muss ich den Traffic durch den Tunnel bei meiner Firewal (ufw) freigeben.


Back…