Назад | Перейти на главную страницу

HAProxy как балансировщик нагрузки TCP (сквозная передача SSL) не работает?

У меня возникли проблемы с настройкой HAProxy в качестве балансировщика нагрузки TCP (уровень 4), и я хотел бы получить ваш совет по этому поводу.

Я следил за многими руководствами в Интернете, и я придумал эту конфигурацию (не показывая никаких ошибок в журналах, она запускается хорошо):

примечание: реальные доменные имена замаскированы

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
 daemon
 user                haproxy
 group               haproxy
 log                 /dev/log local6 debug
 maxconn             50000
 chroot              /var/lib/haproxy
 pidfile             /var/run/haproxy.pid

#---------------------------------------------------------------------
# common defaults 
#---------------------------------------------------------------------
defaults
 mode                 tcp
 log                  global
 option               dontlognull
 timeout connect      5000
 timeout client       50000
 timeout server       50000

#---------------------------------------------------------------------
# dedicated stats page
#---------------------------------------------------------------------
listen stats
 mode http
 bind :22222
 stats enable
 stats uri            /haproxy?stats
 stats realm          Haproxy\ Statistics
 stats auth           xxxxxx:xxxxxxxx
 stats refresh        30s

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main_https_listen
 bind *:443
 mode                tcp
 option              tcplog

# -------------------------------
# ACLs - SIT
# -------------------------------

acl acl_SIT_CI5      req.ssl_sni -i url1.domain.net
acl acl_SIT_HR8      req.ssl_sni -i url2.domain.net

# -------------------------------
# Conditions - SIT
# -------------------------------

use_backend backend_SIT_CI5 if acl_SIT_CI5
use_backend backend_SIT_HR8 if acl_SIT_HR8

#---------------------------------------------------------------------
# Backends
#---------------------------------------------------------------------

backend backend_SIT_CI5
 mode tcp
 balance source
 option ssl-hello-chk
 server server_SIT_CI5_1 host1.domain.net:443 check
 server server_SIT_CI5_2 host2.domain.net:443 check

backend backend_SIT_HR8
 mode tcp
 balance source
 option ssl-hello-chk
 server server_SIT_HR8_1 host1.domain.net:443 check
 server server_SIT_HR8_2 host2.domain.net:443 check

Я указал host1.domain.net на свой haproxy vIP (он имеет конфигурацию keepalived с виртуальным IP).

сейчас при доступе https://url1.domain.net (или даже https: // loadbalancerURL но я предполагаю, что это нормально для этого) у меня есть ошибка Эта страница не может быть отображена. Включите TLS 1.0, TLS 1.1 и TLS 1.2 в дополнительных настройках и попробуйте подключиться к https://host1.domain.net очередной раз.

один openssl s_client дает ошибка подтверждения ssl (сертификатов нет блабла).

ты хоть представляешь, что я сделал не так? Кроме того, мне нужно установить некоторые сертификаты, когда я слушаю на 443? (даже если я не хочу, чтобы эти сертификаты расшифровывались или что-то еще, поскольку я хочу, чтобы мой HAProxy действовал только как прокси).

Я также попытался активировать режим отладки для ведения журнала, но он не показал никаких ошибок (ни новых журналов)

примечание: бэкэнды расположены за межсетевыми экранами, связь между бэкэндами с HAProxy не открывается на 443 (только ОТ Haproxy к бэкэндам), должно ли оно быть направленным? и почему ?

note2: в статистике haproxy я могу видеть все бэкэнды UP

кроме того, есть ли способ узнать / проверить, работает ли перенаправление на основе имени хоста (SNI) или нет? (у меня такое впечатление, что соединение остается на балансировщике нагрузки и не перенаправляется на бэкэнд, поэтому у меня ошибка)

а haproxy -vv дает:

HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

Build options :
  TARGET  = linux2628
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -fno-strict-aliasing -DTCP_USER_TIMEOUT=18
  OPTIONS = USE_LINUX_TPROXY=1 USE_GETADDRINFO=1 USE_ZLIB=1 USE_REGPARM=1     USE_OPENSSL=1 USE_PCRE=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200

Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.7
Compression algorithms supported : identity, deflate, gzip
Built with OpenSSL version : OpenSSL 1.0.2k-fips  26 Jan 2017
Running on OpenSSL version : OpenSSL 1.0.2k-fips  26 Jan 2017
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.32 2012-11-30
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT     IP_FREEBIND

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.

фу, я заставил его работать, добавив это в интерфейс (после просмотра эта почта:)

tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }

дело в том, что я не знаю, что делают эти параметры ... или зачем мне их указывать. Означает ли это, что поведение HAProxy по умолчанию - отклонять что-либо?