Ankündigung

Einklappen
Keine Ankündigung bisher.

Reverse Proxy - Kein Zugriff auf Websocket

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Also hab jetzt die Datei "io_smarthome.py.js" im Verzeichnis "/var/www/html/smartVISU/driver" auf dem SHNG-RPi mal so adaptiert:

    Code:
      
          .....................................
           open: function () {
        
            var protocol = '';
            if (!io.address || io.address.indexOf('://') < 0) {
                // adopt websocket security to current protocol (https -> wss and http -> ws)
                // if the protocol should be forced, add it to the address
                protocol = location.protocol === 'https:' ? 'wss://' : 'ws://';
                if (!io.address) {
                    // use url of current page if not defined
                    io.address = location.hostname;
                }
                if (!io.port) {
                    // use port of current page if not defined and needed
                    if (location.port != '') {
                        io.port = location.port;
                    } else {                    
                        if (location.protocol == 'http:') io.port = '80';
                        if (location.protocol == 'https:') io.port = '443';
                        if (io.address == '10.0.0.191') io.port = '2424'
                    }
                }
            }
            alert(protocol + io.address + ':' + io.port);
            io.socket = new WebSocket(protocol + io.address + ':' + io.port);
     
           io.socket.onopen = function () {
                io.send({'cmd': 'proto', 'ver': io.version});
           ................................

    Ist es soweit korrekt die vorhanden "open:function" so zu adaptieren oder muss der Content von Post #17 einfach unten dran?
    Habs jetzt so mal wie oben probiert, aus der SmartVISU die IP/Port raus aber bekomm trotzdem keine Werte (sowohl intern/extern) angezeigt. Sind zusätzlich noch weitere Anpassungen am NGINX (vor allem jene von OnkelAndy in diesem Thread) nötig?
    LG
    Zuletzt geändert von ic14m001; 06.03.2019, 15:21.

    Kommentar


      #47
      „Meine“ Anpassungen sind nur bei Zugriff über Apple nötig (aufm mac funzt auch nur Safari!)

      Kommentar


        #48
        Ok, dann mach ich nochmal "alles auf Anfang" und adaptiere nur die "io_smarthome.py.js" und gehe für NGINX nach Anleitung vor.
        Kann es evtl. auch mit der eingesetzten SmartVISU / SHNG Version zu tun haben? Nutze 2.8 und 1.5.1 master auf Basis des Images "Raspi_SmarthomeNG_public_2.2"

        Kommentar


          #49
          die 2.8 braucht m.e. noch die minifizierte .min der io_smarthome.js

          Kommentar


            #50
            Bei meinem Raspi image musst du nur setup_nginx.sh starten, dann sollte alles funktionieren (mit certs). Auch ohne Hack. Ip und port in der visu config müssen leer bleiben

            Kommentar


              #51
              Onkelandy: Ich nutze einen eigenen RPi für den ReverseProxy - somit ist ja die Konfiguration von NGINX auf dem SHNG-RPi eigentlich nicht nötig oder?
              psilo : Müssen in der .min die selben Adaptionen vorgenommen werden wie in der io_smarthome.py.js?

              Kommentar


                #52
                sorry, hatte ich überlesen.. aber du könntest mit ansible auf Knopfdruck alles für nginx nachstellen: https://github.com/smarthomeNG/ansib...aster/raspbian
                Und dann das Skript laufen lassen: https://github.com/smarthomeNG/ansib...setup_nginx.sh

                Kommentar


                  #53
                  Also soll ich auf dem NGINX-RPi das "Tool" 'ansible' installieren und dann das "Playbook" von der SHNG-NGINX-Installation (Dein GitHubLink) dort ausführen? Somit wird auf dem NGINX-RPi NGINX "richtig" (mit allen Abhängigkeiten) installiert. Und zur eigentlichen Konfiguration das 'ansible_setup_nginx.sh' Script auf dem NGINX-RPi ausführen?

                  Sorry dass ich mich anstelle wie der erste Mensch Aber is alles "Neuland"

                  Kommentar


                    #54
                    ic14m001 du musst die .min neu generieren lassen.. irgendwo gabs da ne anleitung zu... ist leider jahre her, da ich gleich am anfang auf 2.9 umgestiegen bin

                    Kommentar


                      #55
                      Wenn ich den NGINX für den ReverseProxy auf dem SHNG-RPi nutze erspare ich mir die ganzen "Adaptionen"? Sprich Image von OnkelAndy nutzen und gut ists ....

                      Kommentar


                        #56
                        Es ist sinnvoll um schnell auf einem Raspi ein lauffähiges System zu kommen das Image zu nutzen.
                        Es kann aber nicht schaden, die Installation wie in der Komplettanleitung beschrieben einfach mal auf einer VM durchzuspielen damit man einen Einblick in die einzelnen Komponenten bekommt.
                        Sonst ist das wie eine riesige Blackbox bei der man im Fehlerfall nicht weiß, wie man den Deckel abschrauben kann um reinzugucken ...

                        Kommentar


                          #57
                          ic14m001 Das hast du im Prinzip richtig verstanden. Auf dem "normalen" Raspi ziehst du dir am besten das ganze Ansible Repo https://github.com/smarthomeNG/ansible.git runter, installierst ansible, passt das hosts File an (da musst du den Rpi NGINX mit IP Adresse und root Zugang definieren) und lässt das nginx playbook laufen. Das setup_nginx File musst du auf den Rpi NGINX kopieren und dort ausführen. Kann jetzt nicht garantieren, dass das so 1:1 funzt, aber die Chancen sind hoch.

                          bmx In die Blackbox gucken kannst auch wenn die Playbooks im Ansible Repo durchschaust Aber ja, selbst Sachen nachbauen schadet nie, gerade auch zum Lernen gut...

                          Kommentar


                            #58
                            Ich versuche verzweifelt die websocket Verbindung zur smartvisu zum Laufen zu bekommen.
                            Mein Provider stellt IPV6 zur Verfügung, darüber habe ich eine Verbindung zum raspi auf dem nur nginx läuft. Ich habe das ganze mit
                            "/nginx-als-reverseproxy"
                            eingerichtet und die GeoIP Sachen rausgenommen um es erstmal zum Laufen zu bekommen.
                            Nachdem was ich in diesem thread gefunden habe, habe ich die "io_smarthome.py.js geändert
                            Code:
                            if (!io.port) {
                            // use port of current page if not defined and needed
                            if (location.port != '') {
                            io.port = location.port;
                            } else {
                            if (location.protocol == 'http:') io.port = '80';
                            if (location.protocol == 'https:') io.port = '443';
                            if (io.address == '10.0.10.9') io.port = '2424'
                            }
                            }
                            }
                            alert(protocol + io.address + ':' + io.port);
                            io.socket = new WebSocket(protocol + io.address + ':' + io.port);
                            das "alert(protocol + io.address + ':' + io.port);" gibt
                            über https folgendes aus:
                            Code:
                            wss://<mydomain>.<myds>.<me>:443
                            über http im lan
                            Code:
                            ws://10.0.10.9:2424
                            die config in meiner /etc/nginx/conf.d/<mydomain>.<myds>.<me>.conf
                            sieht folgendermaßen aus
                            Code:
                            server {
                            server_tokens off;
                            
                            # https://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html
                            ## Block download agents ##
                            if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
                            return 403;
                            }
                            
                            ## Block some robots ##
                            if ($http_user_agent ~* msnbot|scrapbot) {
                            return 403;
                            }
                            
                            ## Deny certain Referers ##
                            if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|pok er|porn|sex|teen) )
                            {
                            return 403;
                            }
                            
                            listen 443 ssl default_server;
                            listen [::]:443 ipv6only=on ssl;
                            server_name <mydomain>.<myds>.<me>;
                            allow ::1;
                            
                            ##
                            # SSL
                            ##
                            
                            ## Activate SSL, setze SERVER Zertifikat Informationen ##
                            # Generiert via Let's Encrypt!
                            ssl on;
                            ssl_certificate /etc/letsencrypt/live/<mydomain>.<myds>.<me>fullchain.pem;
                            ssl_certificate_key /etc/letsencrypt/live/<mydomain>.<myds>.<me>/privkey.pem;
                            ssl_session_cache builtin:1000 shared:SSL:10m;
                            ssl_prefer_server_ciphers on;
                            # unsichere SSL Ciphers deaktivieren!
                            ssl_ciphers HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!RC4;
                            
                            ##
                            # HSTS
                            ##
                            
                            add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
                            
                            ##
                            # global
                            ##
                            
                            root /var/www/<mydomain>.<myds>.<me>;
                            index index.php index.htm index.html;
                            
                            # Weiterleitung zu SmartHomeNG (Websocket Schnittstelle) mit Basic Auth
                            # Nur Verbindungen gegen "/" durchlassen! Also weder auf Dateien noch Verzeichnisse (= nur Websocket Connects)
                            location = / {
                            auth_basic "Restricted Area: smartvisu";
                            auth_basic_user_file /etc/nginx/.smartvisu;
                            proxy_pass http://10.0.10.9:2424;
                            }
                            
                            # Zugriff auf die smartVISU mit Basic Auth
                            location /smartvisu {
                            auth_basic "Restricted Area: smartvisu";
                            auth_basic_user_file /etc/nginx/.smartvisu;
                            proxy_pass http://10.0.10.9/smartvisu;
                            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;
                            }
                            
                            # Weiterleitung zu zoneminder mit Basic Auth
                            location /zm/cgi-bin {
                            auth_basic "Restricted Area: smartvisu";
                            auth_basic_user_file /etc/nginx/.smartvisu;
                            proxy_pass http://10.0.10.9/zm/cgi-bin/;
                            }
                            
                            
                            }

                            In meiner Verzweiflung habe ich heute morgen eine zweite sd-Karte genommen raspi-os Buster neu installiert, Ansible über repo installiert und beim Versuch das playbook zu starten kommt folgendes:
                            Code:
                            ERROR! Syntax Error while loading YAML.
                            mapping values are not allowed in this context
                            
                            The error appears to have been in '/home/pi/04_nginx.yml': line 112, column 65, but may
                            be elsewhere in the file depending on the exact syntax problem.
                            
                            The offending line appears to be:
                            ich würde mich sehr freuen wenn mir jemand helfen kann das endlich zum Laufen zu bekommen.An openvpn bin ich schon gescheitert weil mein handy Provider die ICMP ports blockt.

                            Kommentar


                              #59
                              Die Änderung am io-Treiber bewirkt, dass der Websocket im internen Netz gefunden wird. Das fehlt bisher noch, wenn man für den Reverse Proxy die Adresse und den Port in der Konfiguration weglässt. Funktioniert denn dieser Zugang von innerhalb des LANs über HTTP wenigstens?

                              Welche shNG-Version verwendest Du und welche smartVISU-Version?
                              Mit aktuellem shNG solltest Du das Websocket-Modul verwenden - nicht das veraltete Plugin. Hast Du Deine Let'sencrypt Schlüssel- und Zertifikatsdateien im Ordner /usr/local/smarthome/etc abgelegt und dem Websocket-Modul die Namen mitgeteilt?

                              Die Weiterleitung der Websocket-Anfrage auf den Port 2424 kann so nicht gehen, weil das der unverschlüsselte Port des Websocket-Moduls ist. Entweder muss der nginx dazu gebracht werden, innerhalb des LANs über HTTP zu gehen (aus meiner Sicht die Vorzugslösung), oder die Weiterleitung muss auf denTLS-Port gehen.

                              Gruß
                              Wolfram
                              Zuletzt geändert von wvhn; 16.07.2021, 14:38.

                              Kommentar


                                #60
                                Einfacher wäre es, wenn man in der SmartVISU sowohl einen Host und einen Port für HTTP, als auch einen für HTTPS einstellen könnte. Dann wäre das Problem gelöst und man muss nicht immer selbst an den Treibern rumfummeln.

                                Kommentar

                                Lädt...
                                X