Hallo zusammen,
ich würde gerne die openWB im internen Lan hinter einem ReverseProxy betreiben. Hat das schon jemand mal hinbekommen?
Grüße
Rafael
Reverse Proxy LAN
Re: Reverse Proxy LAN
wird vermutlich schwierig, neben den reinen HTTP Aufrufen gibts auch Kommunikation via MQTT, das wird über den ReversePRoxy nicht klappen.
Was genau hast Du denn vor?
Was genau hast Du denn vor?
15,2kWp SMA (SB4000TL-21, SB3.0, STP6.0-SE + BYD HVS, EnergyMeter), openWB Standard+, openWB Pro, Smart #1 (ersetzt den e2008), Tesla Model Y LR.
Re: Reverse Proxy LAN
Also ich habe zu Hause noch seperat einen kleinen SSH Server. Folgendes funktioniert:
Code: Alles auswählen
ssh user@myserver -D 5459
Das hier funktioniert nicht so richtig:
Code: Alles auswählen
ssh user@myserver -L 5459:OPENWB_IP:80 -L 9001:OPENWB_IP:9001
Es sagt leider nicht so genau warum. Ich vermute, dass openWB den Port nicht entfernt aus der URL und dann die MQTT-Adresse ohne Rücksicht darauf baut. Aber analysiert habe ich es nicht. Nimmt man jedoch:
Code: Alles auswählen
ssh user@myserver -L 80:OPENWB_IP:80 -L 9001:OPENWB_IP:9001
Ich vermute du denkst eher an einen "richtigen" reverse Proxy (Apache oder Squid oder so). Das sollte kein Problem sein. Warum nicht? Hast du denn shcon was ausprobiert?
MQTT geht in dem Fall über WebSockets und das kann auch ein ReverseProxy.
Re: Reverse Proxy LAN
Also ich hab das jetzt erfolgreich eingerichtet, Eckpunkte:
- Fritzbox Portforwarding nur ipv6
- ReverseProxy Nginx auf eigenem Raspi, dieser macht eine Client-Zertifikat-Validierung
- Eigene domain via dynv6.com ... update mit ddclient
- Letsencrypt Zertifikat für meine Domain
- Client-Zertifikat für die Authentifizierung generiert und auf dem iphone unter Device Management installiert
Die obigen Eckpunkte beschreibe ich jetzt nicht bzgl. der Einrichtung, da gibt es genügend Anleitungen im Netz, hier nur das Wichtigste:
- Fritzbox, reine Freigabe auf die ipv6-Adresse des Raspi für die Ports 80 (wegen letsencrypt), 443 (ssl) und 900 (ssl)
- ReverseProxy, siehe unten. Hier hab ich etwas gekniffelt, bis ich eine Konfiguration hatte die nur auf meinem Domain-Namen das Zertifikat verwendet und auch den WebSocket-Upgrade richtig macht. Wer sich beim Handshake nicht mit dem richtigen SNI meldet, bekommt nur ein Dummy-Zertifikat. Das ist ein Versuch der Verschleierung des Hostnames, falls nur jemand die IPv6 in die Hände bekommt. Mehr aber auch nicht, könnt ihr auch weglassen.
- wer will, dass das auch aus dem lokalen Netz aufrufbar ist muss in der Fritzbox bei DNS-Rebind die eigene Domain als Ausnahme eintragen
Hier die Konfiguration für /etc/nginx/sites-available/www.example.com:
Bin auf Feedback gespannt.
- Fritzbox Portforwarding nur ipv6
- ReverseProxy Nginx auf eigenem Raspi, dieser macht eine Client-Zertifikat-Validierung
- Eigene domain via dynv6.com ... update mit ddclient
- Letsencrypt Zertifikat für meine Domain
- Client-Zertifikat für die Authentifizierung generiert und auf dem iphone unter Device Management installiert
Die obigen Eckpunkte beschreibe ich jetzt nicht bzgl. der Einrichtung, da gibt es genügend Anleitungen im Netz, hier nur das Wichtigste:
- Fritzbox, reine Freigabe auf die ipv6-Adresse des Raspi für die Ports 80 (wegen letsencrypt), 443 (ssl) und 900 (ssl)
- ReverseProxy, siehe unten. Hier hab ich etwas gekniffelt, bis ich eine Konfiguration hatte die nur auf meinem Domain-Namen das Zertifikat verwendet und auch den WebSocket-Upgrade richtig macht. Wer sich beim Handshake nicht mit dem richtigen SNI meldet, bekommt nur ein Dummy-Zertifikat. Das ist ein Versuch der Verschleierung des Hostnames, falls nur jemand die IPv6 in die Hände bekommt. Mehr aber auch nicht, könnt ihr auch weglassen.
- wer will, dass das auch aus dem lokalen Netz aufrufbar ist muss in der Fritzbox bei DNS-Rebind die eigene Domain als Ausnahme eintragen
Hier die Konfiguration für /etc/nginx/sites-available/www.example.com:
Code: Alles auswählen
server {
root /var/www/html;
index index.html;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
server_name www.example.com ; # managed by Certbot
if ($host != www.example.com ) {
return 404;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_client_certificate /path/to/cert/ca.crt; # Path to your CA certificate for validating clients
ssl_verify_client optional;
location /openWB/ {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
proxy_pass http://192.168.178.200/openWB/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
root /var/www/html;
index index.html;
listen [::]:9001 ssl ipv6only=on;
server_name www.example.com ;
if ($host != www.example.com ) {
return 404;
}
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_client_certificate /path/to/cert/ca.crt; # Path to your CA certificate
ssl_verify_client optional;
location / {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
proxy_pass http://192.168.178.200:9001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# Default server block to reject all other domains
server {
listen [::]:443 ssl default_server;
listen [::]:9001 ssl default_server;
server_name _;
ssl_certificate /path/to/cert/default_dummy/dummy.crt;
ssl_certificate_key /path/to/cert/default_dummy/dummy.key;
return 444;
}
server {
if ($host = www.example.com ) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen [::]:80 ;
server_name www.example.com ;
return 404; # managed by Certbot
}
-
- Beiträge: 4351
- Registriert: Mi Nov 11, 2020 7:16 pm
- Has thanked: 1 time
- Been thanked: 7 times
Re: Reverse Proxy LAN
Im Endeffekt baust du ein SSL VPN mit nem Client Zertifikat auf.
Die Einrichtung ist nicht trivial, ich hab das auch schon mal mut ner FHEM Instanz getestet, habs dann aber wieder zurück gebaut, da mir die Verteilung von Client Zertifikaten auf alle möglichen Clients zu aufwändig war.
IPSec VPN der Fritz Box hatte ich überall schnell eingerichtet. Und seit Wireguard ist das Handling ja noch einfacher und seit ein paar Wochen auch auf meiner "alten" 7490 verfügbar.
VG
Det
Die Einrichtung ist nicht trivial, ich hab das auch schon mal mut ner FHEM Instanz getestet, habs dann aber wieder zurück gebaut, da mir die Verteilung von Client Zertifikaten auf alle möglichen Clients zu aufwändig war.
IPSec VPN der Fritz Box hatte ich überall schnell eingerichtet. Und seit Wireguard ist das Handling ja noch einfacher und seit ein paar Wochen auch auf meiner "alten" 7490 verfügbar.
VG
Det
10kWp PV mit SMA Tripower 10000TL-10 (PE11 mit SDM72V2); 2,4kWp mit Solis 2.5 G6 (EE11 mit SDM120). OpenWB Standard+. EVU EM540 an einem Raspi mit Venus OS. BEV Mercedes EQA 250 (07/2023) und EQA 300 (06/2024)
Re: Reverse Proxy LAN
Schön gemacht, aber nicht trivial!
Dabei nicht vergessen das software2 derweil eine vollwertige Cloud hat.
Dabei nicht vergessen das software2 derweil eine vollwertige Cloud hat.
Supportanfragen bitte NICHT per PN stellen.
Hardwareprobleme bitte über die Funktion Debug Daten senden mitteilen oder per Mail an support@openwb.de
Hardwareprobleme bitte über die Funktion Debug Daten senden mitteilen oder per Mail an support@openwb.de