opnsense und haproxy: Probleme mit Regeln
Brom 04.11.2021 - 15:46 2184 5
Brom
Addicted
|
hi, vielleicht hat wer eine Idee für mich und mein Problem, welches ich einfach nicht lösen kann.
Umgebung (bei Provider mit funktionierendem Vlan): 3 Rechner: 1x Server mit Opnsense + haproxy 1x Server "web" 1x Server "services"
Was will ich erreichen? Wenn man die Webseite "example.com" aufruft, soll der Content von "web" angezeigt werden. Wenn man die Webseite "services.example.com" aufruft, soll der Content von "services" angezeigt werden.
- Conditions und Rules sind eingerichtet (jeweils per "Host matches" definiert mit dem gesamten Hostnamen (also example.com bzw. services.example.com)) - Real Servers sind konfiguriert, genau so Backend und Public Services.
So. Wenn ich im haproxy jetzt beide public services ("web" und "services") aktiviere, funktioniert NUR der "services..." Aufruf korrekt; "web" bringt einen 503er. Wenn ich im haproxy jetzt NUR den web aktiviere, dann funktioniert dieser Aufruf korrekt und der Inhalt von "web" wird angezeigt.
Ich habe mich mit den Conditions gespielt (da vermute ich den Fehler) und "Hosts starts with" gespielt, aber immer das gleiche Ergebnis: Jeder Service für sich funktioniert, aber wenn beide aktiviert sind, greift NUR der "services".
Jemand eine Idee?
|
berndy2001
|
Ohne config ist´s natürlich schwierig Meine sieht auf der fritzbox so aus, vielleicht hilft dir das zur orientierung. # default sample config
global
tune.ssl.default-dh-param 2048
pidfile /var/run/haproxy.pid
log /dev/log daemon notice
defaults
log global
mode http
option http-server-close
frontend http-in
bind :8443 ssl crt /tmp/flash/haproxy/haproxy.pem
use_backend s1_cluster if { hdr_sub(host) -i s1.yy.xxx.at }
use_backend s2_cluster if { hdr_sub(host) -i s2.yy.xxx.at }
use_backend s3_cluster if { hdr_sub(host) -i s3.yy.xxx.at }
default_backend s1_cluster
backend s1_cluster
server server1 192.168.1.15:8889 maxconn 5
backend s2_cluster
server server2 192.168.1.70:8089 maxconn 5
backend s3_cluster
server server3 192.168.1.1:81 maxconn 5
Bearbeitet von berndy2001 am 04.11.2021, 16:39
|
Brom
Addicted
|
Danke für die Hilfe! Stimmt, mit config isses einfacher Ich habe jetzt beide public services aktiviert (services u. default_website). Wie oben geschrieben, funktioniert so IMMER nur der services.example.com Aufruf. defaults
log global
option redispatch -1
timeout client 30s
timeout connect 30s
timeout server 30s
retries 3
default-server init-addr last,libc
# autogenerated entries for ACLs
# autogenerated entries for config in backends/frontends
# autogenerated entries for stats
# Frontend: services ()
frontend services
http-response set-header Strict-Transport-Security "max-age=15768000"
bind 0.0.0.0:443 name 0.0.0.0:443 ssl prefer-client-ciphers ssl-min-ver TLSv1.2 ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256 ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 crt-list /tmp/haproxy/ssl/6145fcba6545b0.73824703.certlist
mode http
option http-keep-alive
option forwardfor
# tuning options
timeout client 30s
# logging options
# ACL: services
acl acl_6145fc6fe73e06.35216830 hdr(host) -i services.example.com
# ACTION: services
use_backend services if acl_6145fc6fe73e06.35216830
# Frontend: default_website ()
frontend default_website
bind 0.0.0.0:443 name 0.0.0.0:443 ssl crt-list /tmp/haproxy/ssl/6162ccd93a63e8.75304049.certlist
mode http
option http-keep-alive
option forwardfor
# tuning options
timeout client 30s
# logging options
# ACL: Default-site
acl acl_616bf3dc49f8c7.06733028 hdr(host) -I example.com
# ACTION: default_website
use_backend default_website if acl_616bf3dc49f8c7.06733028
# Backend: acme_challenge_backend (Added by ACME Client plugin)
backend acme_challenge_backend
# 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 safe
server acme_challenge_host 127.0.0.1:43580
# Backend: services (services)
backend services
# 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 safe
server services 192.168.1.10:443 ssl verify none
# Backend: default_website (default_website)
backend default_website
# 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 safe
server web 192.168.1.20:80
|
userohnenamen
leider kein name
|
du hast zwei frontends auf die selbe ip und selben port?
ein frontend und dann wie bei berndy per ACLs auf das jeweilige backend schalten
|
Brom
Addicted
|
Tja, und das war mein Fehler... junge junge, was mich das wieder Zeit gekostet hat. Auf jeden Fall vielen Dank an euch beide!
|
bsox
Schwarze Socke
|
Ja, UON hat recht. Zwei Frontends am selben Port ist für deinen Anwendungsfall falsch. Bei mir sieht das mit opnsense / haproxy gekürzt so aus: Die 'find' ACLs sind 'Conditions'. Die 'redirect_' ACTIONs sind 'Rules'. # Frontend: webserver_frontend_443 ()
frontend webserver_frontend_443
http-response set-header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
bind <external_IP>:443 name <FQDN>:443 ssl ssl-min-ver TLSv1.2 ciphers TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305-SHA256:EECDH+AESGCM:EE
CDH+CHACHA20 alpn h2,http/1.1 crt-list /tmp/haproxy/ssl/5bc267d6a888b6.03280918.certlist
mode http
option http-keep-alive
default_backend kopano_backend
option forwardfor
# tuning options
maxconn 100
timeout client 30s
# logging options
# ACL: find_SNIs1_xxx_at
acl acl_5db9582d990974.32721300 hdr(host) -i s1.xxx.at
# ACL: find_SNIs2_xxx_at
acl acl_5db93dc15932b5.52786756 hdr(host) -i s2.xxx.at
# ACTION: redirect_mx
use_backend kopano_backend if acl_5db9582d990974.32721300
# ACTION: redirect_nc
use_backend nc_backend if acl_5db93dc15932b5.52786756
# autogenerated entries for stats
# Backend: kopano_backend ()
backend kopano_backend
# 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
# WARNING: pass through options below this line
option forwardfor
http-reuse never
server fizzi2_apache 10.10.10.22:80
# Backend: nc_backend ()
backend nc_backend
# 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 safe
server docks_nextcloud 192.168.21.211:82
|