Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - ThomasH

#1
Hallo zusammen

Gute Neuigkeiten: ich konnte den HAProxy nun endlich erfolgreich zum Laufen bringen!  :)

Folgendes habe ich gemacht:


  • Das HAProxy Plugin komplett entfernt und wieder installiert
  • Die Konfiguration wieder analog neu erstellt
  • Testmässig auf dem Public Service (Frontend) ein Default Backend Pool hinzugefügt (jeweils abwechselnd --> das Backend konnte jeweils problemlos erreicht werden). Sowas war vor der Neuinstallation nicht möglich.
  • Default Backend entfernt und Rules hinzugefügt --> Fehler: die Backends waren nicht mehr erreichbar (wieder gleiche Meldungen: NOSRV)
  • Die Conditions angepasst (statt "Host match" auf "Host contains") --> Anschliessend funktionierte alles problemlos.

Fazit:

  • Entweder das Neuinstallieren des HAProxy Plugins oder die Neuerstellung aller Einstellungen hat mir ermöglicht den Fehler einzugrenzen
  • Bei der Condition hat bei mir der "Host match" nicht funktioniert, stattdessen war "Host contains" notwendig.

Vielen Dank für eure Unterstützung.

Gruss Thomas, der nun happy ist!
#2
Hallo superwinni2

Vielen Dank für deine Rückmeldung. Danke auch für den Hinweis bezüglich Shell Kommando für die Config und Logs.

Mir war/ist bewusst, dass das Forwarding und HAProxy parallel laufen können. Ich wollte bei meinem Test einfach sicherstellen, dass nichts "reinfunkt".

Folgendes habe ich gemacht:

  • Listener auf 8080 angepasst
  • Entsprechende Firewall Rule erstellt

--> Dies hatte leider keine Verbesserung zur Folge, gleiches Verhalten, gleiche Fehlermeldungen


  • Im Public Service einen Default Backend Pool zugewiesen

--> Dies hatte leider keine Verbesserung zur Folge, gleiches Verhalten, gleiche Fehlermeldungen

Ich bin mir nun am Überlegen, ob ich HAProxy ganz lösche und neu installiere und konfiguriere. Ich weiss ansonsten nicht mehr weiter.

Gruss Thomas
#3
Vielen Dank für deine Rückmeldung. Ich habe die bestehende NAT- und Firewall-Rule wie von dir vorgeschlagen gelöscht und nun "nur" eine WAN Rule angelegt:



Leider hat aber auch das keine Verbesserung gebracht. :( Ich habe weiterhin die Fehlermeldungen im HAProxy Log und im Webbrowser erscheint jeweils "503 Service Unavailable". Ich sehe auch im Logfile des Webserververs, dass die Requests jeweils gar nicht bis zum Server kommen.

Ich habe nun testmässig den HAProxy Service deaktiviert und direkt eine NAT Port Forwarding Rule mit Port 89 erstellt. Als Destination habe ich abwechselnd einen der Webserver hinzugefügt. Im Anschluss konnte ich von extern problemlos auf die jeweiligen Webserver zugreifen. Das zeigt mir, dass das Problem irgendwo im HAProxy liegen muss.

Ich bin mittlerweile verzweifelt und weiss echt nicht wo das Problem liegen könnte...
#4
Ja, ich muss den Port 89 auch angeben. Beide Zugriffe funktionieren direkt problemlos:

http://192.168.10.6:89/
http://192.168.10.30:89/

Es ist keinerlei SSL involviert, ganz simpel über Port 89.

Gibt es allenfalls ein Routing Problem, NAT Problem? Ich poste mal die NAT Rule. Gibt es allenfalls hier einen Überlegungsfehler?

OpnSense Firewall Alias:



NAT Rule:




Vielen Dank für eure Bemühungen!

Gruss Thomas
#5
Ich gleich nochmals... ich konnte nun bereits jetzt die HAProxy Config auslesen. Untenstehend das Resultat:

#
# Automatically generated configuration.
# Do not edit this file manually.
#

global
    # NOTE: Could be a security issue, but required for some feature.
    uid                         80
    gid                         80
    chroot                      /var/haproxy
    daemon
    stats                       socket /var/run/haproxy.socket level admin
    nbproc                      1
    nbthread                    1
    tune.ssl.default-dh-param   1024
    spread-checks               0
    tune.chksize                16384
    tune.bufsize                16384
    tune.lua.maxmem             0
    log /var/run/log local0 info

defaults
    log     global
    option redispatch -1
    timeout client 30s
    timeout connect 30s
    timeout server 30s
    retries 3

# autogenerated entries for ACLs

# autogenerated entries for config in backends/frontends

# autogenerated entries for stats


# Frontend: Listener_Test_89 (Listener Test für Port 89)
frontend Listener_Test_89
    bind 0.0.0.0:89 name 0.0.0.0:89
    mode http
    option http-keep-alive
    option forwardfor
    # tuning options
    timeout client 30s

    # logging options
    option httplog
    # ACL: Condition_Test2
    acl acl_5cd8547bc163c6.80550707 hdr(host) -i test2.domain.com
    # ACL: Condition_Test1
    acl acl_5cd853985b9ff4.30025630 hdr(host) -i test1.domain.com

    # ACTION: Test2-rule
    use_backend SRVDC16_Test2_89 if acl_5cd8547bc163c6.80550707
    # ACTION: Test1-rule
    use_backend SRVDB_Test1_89 if acl_5cd853985b9ff4.30025630

# Backend: SRVDB_Test1_89 (Test1-89)
backend SRVDB_Test1_89
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ip size 50k expire 30m
    stick on src
    # tuning options
    timeout connect 30s
    timeout server 30s
    http-reuse never
    server SRVDB_Test1_89 192.168.10.6:89

# Backend: SRVDC16_Test2_89 (Test2-89)
backend SRVDC16_Test2_89
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ip size 50k expire 30m
    stick on src
    # tuning options
    timeout connect 30s
    timeout server 30s
    http-reuse never
    server SRVDC16_Test2_89 192.168.10.30:89

listen local_statistics
    bind            127.0.0.1:8822
    mode            http
    stats uri       /haproxy?stats
    stats realm     HAProxy\ statistics
    stats admin     if TRUE

# statistics are DISABLED

Vielen Dank für eure Hilfe.

Gruss Thomas
#6
Hallo

Vielen Dank für die Rückmeldung. Sämtliche Syntax-Tests sind erfolgreich, es werden keinerlei Fehler angezeigt. Hier ein Auszug aus den Fehlermeldungen (Logs):



Es scheint so, dass der dahinterliegende Server nicht erreichbar ist. Wenn ich auf die Server mittels IP Adresse zugreife kann ich aber problemlos auf die Webseiten zugreifen...

Den Auszug der Config werde ich heute Abend nachliefern.

Gruss Thomas



#7
Hallo superwinni2

Vielen herzlichen Dank für die rasche Rückmeldung. Ich habe die Konfiguration gemäss deinem Input angepasst. Jetzt verstehe ich auch etwas mehr die Logik dahinter. Trotzdem geht es nun immer noch nicht. :( Hier nochmals die aktuelle Konfiguration, inkl. Backend Pool und Real Server:

Frontend



Rule 1



Rule 2



Condition



Backend Pool



Real Server



Vielen Dank auch für den Input bezüglich "Use backend Pool", als ich die Skalierung im Browser angepasst habe (für die Screenshoots) ist auf einmal auch dieser Eintrag erschienen...

Vielen Dank für eure Unterstützung, wäre für mich ein Meilenstein, wenn dies nun endlich laufen würde.

Gruss Thomas


#8
Hallo zusammen

Hier spricht nochmals ein Thomas... der Hilfesuchende :)

Vielen Dank mal vorerst für eure Antworten.
Quote from: superwinni2 on May 14, 2019, 01:51:23 PM
Hallo ThomasH

hast du die Rules auch dem Frontend zugeordnet?

Ansonsten führe mal bitte folgenden Befehl auf deiner OPNsense aus und Poste den Output. Dann sehen wir was du wie konfiguriert hast:
cat /usr/local/etc/haproxy.conf

Ja, die Rules sind den Frontends / Public Services zugewiesen. Untenstehend der Output von der HAProxy Konfiguration:

#
# Automatically generated configuration.
# Do not edit this file manually.
#
global
   # Note: Could be a security issue, but required for some feature.
   uid                     80
   gid                     80
   chroot                  /var/haproxy
   daemon               
   stats                  socket /var/run/haproxy.sockelt level admin
   nbproc                  1
   nbthread               1
   tune.ssl.default-dh-param   1024
   spread-checks            0
   tune.chksize            16384
   tune.lua.maxmem            0
   log /var/run/log local0 info
   
defaults
   log      global
   option redispatch -1
   timeout client 30s
   timeout connection 30s
   timeout server 30s
   retries 3
   
# autogenerated entries for ACLs

# autogenerated entries for config in backends/frontends

# autogenerated entries for stats


# Frontend: Listener_Test2_89 (Listener Test 2 für Port 89)
frontend Listener_Test2_89
   bind 0.0.0.0:89 name 0.0.0.0:89
   mode http
   option http-keep-alive
   option forwardfor
   # tuninng options
   timeout client 30s
   
   # logging options
   option httplog
   #ACL: Condition_Test2
   acl acl_5cd8547bc163c6.80550707 hdr_sub(host) -i test2.domain.com
   # ERROR: missing parameters
   # ACTION INVALID: Test2-rule

   
# Frontend: Listener_Test1_89 (Listener Test 1 für Port 89)
frontend Listener_Test1_89
   bind 0.0.0.0:89 name 0.0.0.0:89
   mode http
   option http-keep-alive
   option forwardfor
   # tuninng options
   timeout client 30s
   
   # logging options
   option httplog
   #ACL: Condition_Test1
   acl acl_5cd853985b9ff4.30025630 hdr_sub(host) -i test1.domain.com
   # ERROR: missing parameters
   # ACTION INVALID: Test1-rule   

   
# Backend: SRVDB_Test1_89 (Test1-89)
backend SRVDB_Test1_89
   # health checking is DISABLED
   mode http
   balance source
   # stickiness
   stick-table type ip size 50k expire 30m
   stick on src
   # tuning options
   timeout connect 30s
   timeout server 30s
   http-reuse never
   server SRVDB_Test1_89 192.168.10.6:89

# Backend: SRVDC16_Test2_89 (Test2-89)
backend SRVDC16_Test2_89
   # health checking is DISABLED
   mode http
   balance source
   # stickiness
   stick-table type ip size 50k expire 30m
   stick on src
   # tuning options
   timeout connect 30s
   timeout server 30s
   http-reuse never
   server SRVDC16_Test2_89 192.168.10.30:89   
   
listen local_statistics
   bind         127.0.0.1:8822
   mode         http
   stats uri      /haproxy?stats
   stats realm      HAProxy\ statistics
   stats admin      if TRUE
   
# statistics are DISABLED

   
Wie ihr sehen könnt gibt es in den Frontends Errors, die allenfalls das Problem erklären:
# ERROR: missing parameters
# ACTION INVALID: Test1-rule      

Hier ein Screenshot eines Public Servers:



...die Konfiguration einer Rule:



... Details zur Condition:



Hinweis: Der Domainnamen wurde entsprechend angepasst auf test1.domain.com etc.

Vielen herzlichen Dank für eure hochgeschätzte Unterstützung!

Gruss vom Hilfesuchenden

Thomas
#9
Hallo zusammen

Ich bin am Konfigurieren des HAProxy und bringe das Teil einfach nicht richtig zum Laufen. Eigentlich ist es ein einfaches Testszenario in welchem zwei verschiedene Domains (test1.domain.com und test2.domain.com) auf
dem selben Port erreichbar sein sollen (Port HTTP 89), ohne SSL nur HTTP.

Meines Erachtens habe ich alles richtig konfiguriert:

1. NAT Rule erstellt: Anfragen via Port 89 werden auf HAProxy / OpnSense weitergeleitet
2. HAProxy: 2 Real Server erstellt
3. HAProxy: 2 verschiedene Conditions erstellt (Host contains test1.domain.com und test2.domain.com)
4. HAProxy: 2 Rules erstellt
5. HAProxy: 2 Backend Pools erstellt mit Zuweisung des jeweiligen Real Servers (Rest default, keine Rules etc.)
6. HAProxy: 2 Public Services erstellt (Listener)

Ich vermute nun ein Problem in den Rules und dort in der Execute function. In älteren Versionen von OpnSense gab es dort die Möglichkeit "Use specified Backend Pool" anzugeben. Nun gibt es diesen Eintrag nicht mehr. Ich sehe einzig "Override server in Backend Pool" und "Map domains to backend pools using a map file". Ist einer dieser Optionen die "Nachfolgefunktion"? Wenn ja, wie muss ich das einrichten, dass aufgrund der Rule
(mit entsprechender Condition "Host contains...") auf den Backend Pool und somit auf den entsprechenden Server zugegriffen wird?

Testmässig habe ich nun mal unter der Rule "Map domains to backend pools using a map file" ausgewählt mit Parameter Map file: none und Default backend pool: der jeweilige Backend Pool. Weiter oben die entsprechende Condition und unter "Logical operator for conditions" AND (default). Keine Ahnung ob das richtig ist und so funktionieren könnte. Im HAProxy Log File sehe ich, dass jeweils Requests an einen der Public Service ankommt. Dort erscheint dann die folgende Meldung:

haproxy[55878]: xxx.xxx.xxx.xxx:49773 [13/May/2019:23:00:10.104] Listener_Test1_89 Listener_Test1_89/<NOSRV> -1/-1/-1/-1/0 503 212 - - SC-- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

Die Backend Webserver laufen aber problemlos.
Was ich auch nicht verstehe ist die Tatsache, dass gemäss Log File die Requests immer an den gleichen Public Service gelangen (obwohl bei beiden eine entsprechende Rule (mit Condition host match) hinterlegt ist).

Weiss hier evtl. jemand Rat, ich bin mittlerweile verzweifelt und weiss nicht mehr, wo das Problem liegen könnte.

Vielen Dank für eure wertvolle Hilfe.

Gruss Thomas