HAProxy: Rule Verständnisfrage

Started by ThomasH, May 13, 2019, 11:27:13 PM

Previous topic - Next topic
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...

May 16, 2019, 07:11:06 AM #16 Last Edit: May 16, 2019, 07:16:50 AM by superwinni2
Also muss wohl eine andere Problemsuche her...


Du kannst auch PortForwarding und HA Proxy Parrallel benutzen.. Da der HAProxy aktuell dann die "Test" Methode ist, würde ich hier einen anderen Port nehmen wie z.B. 8080.

Firewallregel nicht vergessen zu ändern ;)
Dazu auf den HAProxy -> PublicService gehen und 0.0.0.0:8080 als Listener eintragen und das bestehende Löschen.


Zudem im PublicService mal einen "Default Backend Pool" auswählen und nochmals probieren. Am besten wieder mit einem Blick in die Logs.


Wenn du dann auf den dementsprechenden Backend Pool kommst, wissen wir das der HAProxy richtig mit dem Server kommuniziert. Dann stimmt irgendwas mit dem Regeln nicht...


PS. Falls du und vielleicht die Zukünftigen Leser nicht wissen wie man die Zugriffe direkt über die Konsole/SSH ausliest:

Config:   cat /usr/local/etc/haproxy.conf
Zugriffe: clog -f /var/log/haproxy.log
Proxmox VE
i3-4030U | 16 GB RAM | 512 GB SSD | 500 GB HDD
i3-2350M | 16 GB RAM | 120 GB SSD | 500 GB HDD

FW VMs:
2 Cores | 1 GB RAM | 20 GB SSD

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

Mhmmm seeehr komisch....

Was mir nur mal noch testweise weiterhin einfallen würde... Schnapp dir ne Linux Maschine (Debian, Ubuntu etc.) und installier nen Apache oder Nginx drauf und versuch es mal damit...Alles Standart auf Port 80...
Nicht, dass der Fehler Am Backend liegt...
Ansonsten fällt mir aktuell leider nichts mehr ein...


Die Anfragen kommen bis zum HAProxy (somit stimmt die FW das Anfragen bis zum HAProxy kommen) und Standartmäßig darf ja von der FW alles raus. somit sollte die FW ja auch deine Server erreichen...




Neukonfiguration wäre natürlich die andere möglichkeit wobei ich sowas immer unschön finde...
Proxmox VE
i3-4030U | 16 GB RAM | 512 GB SSD | 500 GB HDD
i3-2350M | 16 GB RAM | 120 GB SSD | 500 GB HDD

FW VMs:
2 Cores | 1 GB RAM | 20 GB SSD

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!

Hallo,

erstmal schön zu lesen, das am ende alles funktioniert.

Ich habe jetzt 3x probiert nach diversen Anleitungen Haproxy mit letsecrypt aufzusetzten,scheietere aber bisher immer.

Ich möchte am Ende 3 instanzen einbinden und mit ssl ansichern.

Hat jemand mal von seiner config ein paar Bilder? Mein Beispiel wäre zb ein Nextcloud.


Anfrage nextcloud.example.com ----> Opnsense-haproxy ---> nimmt entgegen ----> Weiterleitung auf den Client (192.168.1.2) Port 80.

Beim letsencrypt plugin stand immer pending. Hatte aber gesehen das er es über port 444 probiert hat. (hatte die opnsense Gui https auf den Port gelegt wie es in der Anleitung geschrieben stand).

Derzeit habe ich alle plugins wieder heruntergeworfen. Ich würde mich freuen, wenn mir jemand einen Anstoß geben kann.

Danke

Hallo wirehire


Naja.. Zeig uns doch mal her wie deine Config aussieht und wir schauen mal wie wir die Problemchen lösen.
Habe hier zwar auch etwas ähnliches in meiner Config stehen mit 3 Instanzen + Let'sEncrypt, aber da steht noch um einiges mehr weil das eine gut gewachsene Struktur in letzter Zeit war.
Dann können wir sicher schauen wo der Schuh drückt.


Quote from: wirehire on May 24, 2019, 08:08:43 AM
Beim letsencrypt plugin stand immer pending. Hatte aber gesehen das er es über port 444 probiert hat. (hatte die opnsense Gui https auf den Port gelegt wie es in der Anleitung geschrieben stand).
Naja.. Aber eigentlich will Let'sEncrypt doch auf Port 80 für die Authentifizierung?!?




Schreib doch mal deine Config wie du für gut empfindest und lade diese dann am besten in Textform hoch. Befehle stehen ja hier im Thread.
Proxmox VE
i3-4030U | 16 GB RAM | 512 GB SSD | 500 GB HDD
i3-2350M | 16 GB RAM | 120 GB SSD | 500 GB HDD

FW VMs:
2 Cores | 1 GB RAM | 20 GB SSD

okay ,

probiere ich noch mal:

https://forum.opnsense.org/index.php?topic=12126.0
diese Howto habe ich als Vorlage genommen.

Kann ich dann die config auslesen um sie hier zu posten?

Das Problem was ich an solchen Anleitungen finde, ist immer das man oftmals zwar eine Anleitung hat um sich zu orientieren, aber ob es bei einem dann auch wirklich genau gleich funktioniert ist immer etwas fragwürdig... Habe z.B. mehrere (>5) OPNsense im Einsatz... Davon funktioniert keine wie die andere... Jede hat hier oder da ein paar Schrauben die man anderst anziehen muss...
Zudem ist es auch oftmals die Frage ob ne Fritzbox oder ähnliches davor hängt, wie es wirklich hinter der Struktur aussieht etc...
Ich habe z.B. meine Konfig etwas komplizierter gemacht, wenn man jedoch versteht wie es funktioniert finde ich es ganz einfach. Habe es so sogar schon einigen Kollegen verständlcih gemacht ;)


Aber poste doch einfach mal deine Config, änder die privaten Daten wenn du nicht willst wie deine Domain heißt und dann schauen wir mal wie gut wir hinkommen ;)
Es führen ja bekanntlich auch viele Wege nach Rom.

Proxmox VE
i3-4030U | 16 GB RAM | 512 GB SSD | 500 GB HDD
i3-2350M | 16 GB RAM | 120 GB SSD | 500 GB HDD

FW VMs:
2 Cores | 1 GB RAM | 20 GB SSD

Danke superwinni2,

ich stelle es erneut ein und poste dann meine config.

habe es noch einmal eingestellt aber läuft leider nicht.

wo befindet sich (pfad) die config datei zum auslesen?

May 24, 2019, 12:06:26 PM #26 Last Edit: May 24, 2019, 02:21:20 PM by wirehire
gefunden :

# Frontend: mattermost_frontend ()
frontend mattermost_frontend
    bind 127.0.0.1:80 name 127.0.0.1:80
    mode http
    option http-keep-alive
    default_backend Mattermost_back
    # tuning options
    timeout client 30s

    # logging options
    # ACL: Mattermost_ACL
    acl acl_5ce7bccb5fd722.63607215 path_beg -i /*

    # ACTION: Mattermost_aktion
    use_backend Mattermost_back if acl_5ce7bccb5fd722.63607215

# Backend: Mattermost_back ()
backend Mattermost_back
    # 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 Mattermost 192.168.1.20:443 ssl verify none

Die config ist momentan ohne Letsencrypt , auf dem client läuft nginx mit ssl

Wenn ich probiere die Seite aufzurufen kommt :

SSL hat einen Eintrag erhalten, der die maximal erlaubte Länge überschritten hat. Fehlercode: SSL_ERROR_RX_RECORD_TOO_LONG

Ich sehe aber nie eine Anfrage im log von haproxy.

Ich habe noch wie in einem Vorschlag:

die beiden rules eingetragen :

WAN   TCP   *   *   WAN address   443 (HTTPS)   127.0.0.1   443 (HTTPS)

IPv4 TCP   *   *   127.0.0.1   443 (HTTPS)   *      NAT

May 24, 2019, 02:57:11 PM #28 Last Edit: May 24, 2019, 02:59:09 PM by superwinni2
Sorry für die kurze Antwort... Bin grad am Handy und nicht am Rechner...
Das wegen der log liegt wahrscheinlich am frontend... Trage mal die richtige WAN Adresse oder einfach 0.0.0.0 ein... Dann solltest du auch was sehen...

Gute Ansatz zuerst zu schauen ob was in der log kommt *daumenhoch*

Und wegen deiner NAT rule... Ich glaub habe bei mir noch nie eine eingetragen... Immer nur die FW Regel gemacht...
Wenn du eine machst, musst glaub noch das "No RDR" aktivieren

Gesendet von meinem LG-H815 mit Tapatalk
Proxmox VE
i3-4030U | 16 GB RAM | 512 GB SSD | 500 GB HDD
i3-2350M | 16 GB RAM | 120 GB SSD | 500 GB HDD

FW VMs:
2 Cores | 1 GB RAM | 20 GB SSD

@superwinni2

Danke für deine Hilfe.

Habe jetzt das frontend auf 0.0.0.0:80 geändert und die NAT rule entfernt.

Jetzt sehe ich im haproxy log die aufrufe. Wenn ich http://domain eingebe komme ich auch auf die Seite. https leider nicht.

was wäre jetzt der richtige weg? im client nginx die ssl keys löschen und dann auf der sense ssl für haproxy zu erstellen?

Bzw. warum gibt er nur das HTTp durch aber nicht das HTTps vom client?