Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    OpenVPN hinter HAProxy Reverse Proxy - wie?

    Deutsch
    haproxy openvpn reverse proxy
    4
    15
    2.6k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • V
      viragomann @iHaveAstream
      last edited by viragomann

      @ihaveastream
      Ich glaube schon mal gelesen zu haben, dass jemand so etwas umgesetzt hat. Selbst habe ich aber keine Erfahrung.
      Aber du könntest es mit der Port-Sharing Funktion von OpenVPN versuchen, ist vielleicht einfacher einzurichten: Sharing a Port with OpenVPN and a Web Server

      Damit leitet OpenVPN alles weiter, was es nicht als OpenVPN Paket interpretiert.
      Als IP kannst du bspw. auch 127.0.0.1 angeben und HAProxy auf diese lauschen lassen.

      Sollte noch hinzufügen, dass auch dies in Verbindung mit HAProxy von Leuten hier schon erfolgreich umgesetzt wurde.

      I nonickN 2 Replies Last reply Reply Quote 1
      • I
        iHaveAstream @viragomann
        last edited by

        @viragomann

        wow, nice - danke für den Tipp! Das sieht mal richtig gut aus und hat auch auf Anhieb und ohne bisher erkennbare Nebeneffekte geklappt 👍

        Bin begeistert!

        JeGrJ 1 Reply Last reply Reply Quote 0
        • JeGrJ
          JeGr LAYER 8 Moderator @iHaveAstream
          last edited by

          @ihaveastream Umleitung via OpenVPNs Passthrough kann man machen, ist aber normalerweise nicht schön, lahmt und laggt. Kann man via HAproxy mit Paketunterscheidung realisieren oder direkt einen Demultiplexer wie SSLH einsetzen, der den Kram auseinanderdröselt. Wenns aber jetzt erstmal so genügt - auch schön :)

          Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

          If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

          I 1 Reply Last reply Reply Quote 0
          • I
            iHaveAstream @JeGr
            last edited by

            @jegr

            Ich bin immer für Vorschläge offen... mit SSLH hatte ich in der Vergangenheit schon mal experimentiert, damals aber nur auf meinem NAS, was performance-technisch nicht brauchbar war.

            Ich suche nach einer möglichst eleganten Lösung, die zentral auf der pfSense laufen kann, deren Performance sollte ausreichend sein (läuft in einer Proxmox VM auf einem i5-6400 und genügend RAM).

            Kannst du das mit der Paketunterscheidung etwas erklären oder gibt es da irgendwo einen Guide?

            Ich bin noch nicht ganz dahintergestiegen, aber ich glaube das Portsharing mittels OVPN und dem damit verbundenen HAProxy auf localhost stellt mich an einer anderen Stelle gerade vor ein Problem, was ich vorher so nicht hatte...

            Danke.

            JeGrJ 1 Reply Last reply Reply Quote 0
            • JeGrJ
              JeGr LAYER 8 Moderator @iHaveAstream
              last edited by

              @ihaveastream

              bei HAproxy kann man im Frontend via ACL einiges rausfiltern. Beispielsweise wenn man SSH demultiplexen möchte (es gibt Leute, die tcp/22 auf 443 umbiegen und via DNS dann rausfiltern :)) kann man das via bspw. mit

              acl foo_proto_ssh payload(1,7) -m bin 5353482d322e30
              tcp-request content accept if foo_proto_ssh
              

              und später selektieren mit

              use_backend foo_bk_ssh if foo_proto_ssh
              

              OpenVPN könnte man rausfischen nach den HTTPS/SNI Sachen mit

              use_backend openvpn         if  !{ req.ssl_hello_type 1 } !{ req.len 0 }
              

              Da OpenVPN keinen Hello Type hat (kein HTTPS) aber die Request Länge größer 0 hat.
              Oder man kann es sich noch einfacher machen und einfach alles als Default Backend zu OpenVPN schicken, was man nicht vorher mit ACLs abgegriffen und auf ein HTTP(S) Backend abgeworfen hat. Kommt ganz drauf an. Und klappt natürlich nur für OpenVPN Server mit TCP mode, nicht mit UDP ;)

              Auf dem "braucht dringend Zeit um sich damit zu beschäftigen" Zettel steht immer noch, aus SSLH ein simples kleines pfSense Paket zu machen. Komme aber aktuell kaum zu was - man bräuchte einfach mehr Hände und mehr Zeit.
              Das Package selbst ist aber extrem simpel und es wäre kein großer Aufwand, das manuell auf der pfSense zu installieren, sich eine Config zu schreiben und es zu starten. Konfiguration sieht ebenfalls nicht wirklich schwierig aus:

              # Once configuration ready, you *must* set RUN to yes here
              # and try to start sslh (standalone mode only)
              
              RUN=yes
              
              # binary to use: forked (sslh) or single-thread (sslh-select) version
              DAEMON=/usr/sbin/sslh
              
              DAEMON_OPTS="-u sslh -p MYPUBLICIP:443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194 --ssl 127.0.0.1:443 -P /var/run/sslh/sslh.pid"
              

              Also effektiv 3-4 Zeilen Config, MYPUBLICIP ist die IP auf WAN Seite auf die gehört wird, die 127er sind dann eben die Dienst-IPs. OpenVPN wäre dann wahrscheinlich auf localhost gebunden, also 127.0.0.1:1194 (für tcp1194 local aber von extern via 443), SSH wird wahrscheinlich nicht gebraucht und SSL kann man auf localhost (oder eine IP der pfSense) mit 443 setzen, da kann dann der HAproxy drauf lauschen - hauptsache er kommt dem SSLH Agent nicht in die Quere.
              Somit bspw. auf WAN:443 SSLH aufsetzen, HAproxy lauscht auf LAN:443 und OpenVPN auf localhost:1194

              DAEMON_OPTS="-u sslh -p WANIP:443 --openvpn 127.0.0.1:1194 --ssl LANIP:443 -P /var/run/sslh/sslh.pid"
              

              Das wäre dann so ein Beispiel.

              Nur als Ideen und Vorschläge :)

              Cheers

              Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

              If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

              I 2 Replies Last reply Reply Quote 1
              • I
                iHaveAstream @JeGr
                last edited by

                @jegr

                Das klingt sehr interessant!

                Ursprünglich war ja mein Vorhaben OVPN als Backend laufen zu lassen, aber ich kam da (bisher) nicht weiter.
                Am besten gefällt mir tatsächlich die Idee mit dem SSLH Paket, aber ich habe leider nicht die Skills das zu coden. Vielleicht ist das also mal was für später, wenn du die Zeit dazu finden konntest :)

                Also zurück zum OVPN mit dem SSL Hello.
                Wäre das dann auf Localhost als IP und Port 443?

                Reicht es (in der GUI) beim Backend unter "Health Check Method" lediglich SSL auszuwählen oder müssen weitere Dinge konfiguriert werden, bzw. geht es nur über die Konsole?

                Thx

                JeGrJ 1 Reply Last reply Reply Quote 0
                • JeGrJ
                  JeGr LAYER 8 Moderator @iHaveAstream
                  last edited by

                  @ihaveastream said in OpenVPN hinter HAProxy Reverse Proxy - wie?:

                  Am besten gefällt mir tatsächlich die Idee mit dem SSLH Paket, aber ich habe leider nicht die Skills das zu coden. Vielleicht ist das also mal was für später, wenn du die Zeit dazu finden konntest :)

                  Muss man für quick'n'dirty nichts coden. Nur das entsprechende Package per SCP/SFTP auf die Sense kopieren, installieren, Config erstellen, fertig. Also so wie bspw. beim Wireguard Package auch bevor es fertig war.

                  Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                  If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                  JeGrJ 1 Reply Last reply Reply Quote 0
                  • JeGrJ
                    JeGr LAYER 8 Moderator @JeGr
                    last edited by

                    Wenn du mit dem Paket mal spielen willst:

                    auf der Konsole

                    curl https://pkg.freebsd.org/FreeBSD:12:amd64/latest/All/sslh-1.21c.txz --output sslh-1.21c.txz
                    

                    Dann hast du das Paket vom offiziellen Mirror. Hat keine Abhängigkeiten.

                    pkg install sslh-1.21c.txz
                    

                    installiert das dann. sslh Binary selbst liegt in /usr/local/sbin und die Config in /usr/local/etc.
                    Examples gibt es in /usr/local/share/examples/sslh/example.cfg

                    Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                    If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                    I 1 Reply Last reply Reply Quote 0
                    • I
                      iHaveAstream @JeGr
                      last edited by

                      @jegr

                      danke dafür noch.
                      Angenommen die Sense würde sich ein Update ziehen, würde das Paket nebst Konfig dann danach noch vorhanden sein wenn man es auf diesem Wege installiert?

                      JeGrJ 1 Reply Last reply Reply Quote 0
                      • JeGrJ
                        JeGr LAYER 8 Moderator @iHaveAstream
                        last edited by

                        @ihaveastream Das kommt auf das Update an. Das nächste "große" Update (wenn das Base OS aktualisiert wird auf FreeBSD !=12.2) wäre wahrscheinlich schwierig. Aber solang das Paket nicht durch eine Änderung von was anderem deinstalliert wird, würde auch ein Update via Paketaktualisierung das Paket eigentlich nicht ohne Grund löschen.

                        Die Config kann man sicherstellen, indem man diese bspw. nicht selbst manuell anlegt, sondern das Filer Package dazu benutzt und die Config darin ablegt. Das ist dann auch komplett Update-safe.

                        Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                        If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                        1 Reply Last reply Reply Quote 0
                        • I
                          iHaveAstream @JeGr
                          last edited by

                          @jegr said in OpenVPN hinter HAProxy Reverse Proxy - wie?:
                          [...]

                          OpenVPN könnte man rausfischen nach den HTTPS/SNI Sachen mit

                          use_backend openvpn         if  !{ req.ssl_hello_type 1 } !{ req.len 0 }
                          

                          Da OpenVPN keinen Hello Type hat (kein HTTPS) aber die Request Länge größer 0 hat.
                          Oder man kann es sich noch einfacher machen und einfach alles als Default Backend zu OpenVPN schicken, was man nicht vorher mit ACLs abgegriffen und auf ein HTTP(S) Backend abgeworfen hat. Kommt ganz drauf an. Und klappt natürlich nur für OpenVPN Server mit TCP mode, nicht mit UDP ;)

                          [...]

                          ich glaube ich würde mich aktuell dann doch lieber erst mal mit diesem Thema befassen.
                          Leider ist mir noch nicht ganz klar wie ich...

                          • Hierbei einerseits das OpenVPN Backend zu konfigurieren habe (lauscht ja dann vermutlich auf 127.0.0.1 und einem definierten Port, z.B. default 1194?)...

                          • Wie ich die ACLs entsprechend konfiguriere...

                          • Ob ich ein weiteres Frontend zusätzlich zum allgem. HTTPS Frontend benötige?..

                          Würde da die GUI bevorzugen, wenn hierüber entsprechend konfigurierbar.

                          Danke.

                          1 Reply Last reply Reply Quote 0
                          • nonickN
                            nonick @viragomann
                            last edited by

                            @viragomann Das ganze funktioniert sehr gut und ist einfach umzusetzen, leider ist dann auf den Webservern und auch Matomo kein vernünftiges loggen möglich. Als IP-Adresse steht dann immer die angegebene 127.0.0.1 drin, da der OpenVPN Server die eigentliche Verbindung annimmt.

                            Gibt es eine Möglichkeit das die anfragende IP-Adresse zum HAProxy durchgereicht wird?

                            Netgate 6100

                            V 1 Reply Last reply Reply Quote 0
                            • V
                              viragomann @nonick
                              last edited by

                              @nonick
                              Ich verwende das nicht selbst. Ich hatte es mal entdeckt und auf meine Todo Liste fürs Heimnetz mit dem Präfix "vielleicht" gesetzt.
                              Mein Heim OpenVPN lauscht auf TCP 587, damit hatte ich bislang noch keine Probleme. Der Port sollte heutzutage zumeist erlaubt sein und zuhause brauche ich ihn nicht.

                              Gibt es eine Möglichkeit das die anfragende IP-Adresse zum HAProxy durchgereicht wird?

                              Das ist by-design von OpenVPN und muss so sein, damit das bedenkenlos funktioniert, wenngleich es sich auf der pfSense theoretisch auch anders lösen ließe.

                              Es gäbe nur die Möglichkeit, noch ein Verzeichnis mit anzugeben, in das OpenVPN dann temporäre Verbindungs-Logs mit den Quell-IPs u. -ports und Ziel-IPs u. -ports schreibt.
                              Diese müssten aber weggesichert werden, solange die Proxy-Verbindung besteht, weil sie beim Trennen gelöscht werden.
                              Siehe dazu: https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage

                              nonickN 1 Reply Last reply Reply Quote 0
                              • nonickN
                                nonick @viragomann
                                last edited by

                                @viragomann Dachte ich mir schon, ist aber ist trotzdem schade. Irgendwas ist immer, vor allem wenn etwas einfach umzusetzen ist. Das ganze funktioniert ja überraschend gut, nur das die IP-Adressen von der anfragenden Quelle nicht an den HAProxy weitergereicht werden.

                                Netgate 6100

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post
                                Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.