Metainformationen zur Seite
- Deutsch (de)
- English (en)
SmartHomeNG hinter einen Reverse Proxy betreiben
Dieser Artikel beschreibt, wie SmartHomeNG hinter einem Reverse Proxy betrieben werden kann. Ein Reverse Proxy ist eine Möglichkeit, Anfragen an einen anderen Server weiterzuleiten. In diesem Beitrag wird der Reverse Proxy dazu verwendet, um auf Informationen und Dienste aus einem anderen Netz zuzugreifen. Es ist sinnvoll, ein internes Netz, oder IoT oder sensibles Netz zu haben, z.B. für die Wärmepumpe, PV Wechselrichter etc. sowie ein normales LAN für die normalen Consumer-Geräte wie Smartphone, Smart TV oder Tablet. Folgende Gründe kann solch eine Trennung haben:
- Verhindern, das IoT Geräte (vor allem billige IP Cams aus Fernost) nach Hause telefonieren
- Direkten Zugriff von Extern auf interne Geräte verhindern
Schema
Vorausetzungen
Folgende Voraussetzungen müssen gegeben sein:
- Zwei physisch getrennte Netze (Subnetz od. VLAN)
- Ein Gateway mit 2 Netzwerkports und installiertem Debian mit Apache2
- eine laufende SmartHomeNG Instanz
- eine laufende SmartVISU Instanz
Konfiguration
Die Konfiguration umfasst zwei Bereiche:
- Das Admininterface von SmarthomeNG
- Das Websocket Modul von SmarthomeNG
SmartHomeNG
Die Module von SmartHomeNG benötigen eine feste IP, da der interne Python Webserver nicht auf mehreren IPs hören kann, im Gegensatz zum Apache. Deshalb im Admininterface unter System, Konfiguration jeweils unter
- Http Modul
- Websocket Modul
- Admin Modul
im Paramter „ip“ eine feste IP eintragen. Es muss die IP des SHNG Hosts sein, empfehlenswert ist die im internen Netz. Diese IP wird dann auch in den nächsten Konfigurationsschritten benötigt und ist gleichzeitig der Platzhalter <ip shng internes Netz>.
Apache2
Grundkonfiguration für das Admin Interface als auch für das Websocket Modul. Zunächst müssen folgende Module aktiviert werden:
a2enmod proxy a2enmod proxy_http a2enmod proxy_wstunnel
Port konfigurieren
/etc/apache2/ports.conf bearbeiten und folgenden Eintrag hinzufügen:
Listen 80 # Port 8080 für shng Admin 8383 Listen 8080 # Port 2426 für shng Admin 2424 Listen 2426
Site anlegen
Neue Datei unter /etc/apache2/sites-available/ anlegen. Entweder, wie von den Entwicklern empfohlen, die 000-default.conf kopieren oder eine neue Datei mit dem bevorzugten Editor anlegen. Beispiel wie eine neue .conf Datei angelegt werden kann:
cp 000-default.conf 001-shng.conf
Danach die Datei anpassen. Ports der VirtualHosts können frei gesetzt werden. Die Ports von SmarthomeNG müssen korrekt sein. Hier werden die Standard-Ports verwendet.
- 001-shng.conf
<VirtualHost *:8080> # Kommentar wg. der Übersichtlichkeit entfernt, siehe 000-default.conf für Details ServerAdmin webmaster@localhost #DocumentRoot /var/www/html ProxyPass / http://<ip shng internes Netz>:8383/ ProxyPassReverse / http://<ip shng internes Netz>:8383/ ErrorLog ${APACHE_LOG_DIR}/error-8080.log CustomLog ${APACHE_LOG_DIR}/access-8080.log combined </VirtualHost> <VirtualHost *:2426> ServerAdmin webmaster@localhost #DocumentRoot /var/www/html ProxyPass / ws://<ip shng internes Netz>:2424/ ProxyPassReverse / ws://<ip shng internes Netz>:2424/ ErrorLog ${APACHE_LOG_DIR}/error-2426.log CustomLog ${APACHE_LOG_DIR}/access-2426.log combined </VirtualHost>
Site aktivieren und Apache2 neustarten
Die Site wurde soweit vorbereitet und kann nun aktiviert werden:
/etc/apache2/sites-available# a2ensite 001-shng.conf
Nachdem dies getan wurde, erscheint der Hinweis, dass der Apache2 Dienst neu gestartet werden muss:
systemctl restart apache2
Sollte es nicht funktionieren, kann die Seite mit folgendem Befehl wieder deaktiviert werden:
/etc/apache2/sites-available# a2dissite 001-shng.conf
Das SmartHomeNG Admininterface ist nun über beide Netzwerkports über Port 8080 erreichbar z.B. http://192.168.1.1:8080, sofern 192.168.1.1 der Apache Webserver ist.
SmartVISU
Nun kommt die „Magic behind the scences“. Damit das ganze Konstrukt auch funktioniert, muss das Gateway in beiden Netzten den gleichen Hostnamen haben. In der Konfiguration muss nun der Hostname des Gateway eingetragen werden. Achtung: Ohne Angabe der Domain!