LINUX.ORG.RU

5
Всего сообщений: 72

Передача IP адреса Openvpn клиента на сервер Openvpn через HAProxy. TCP mode.

Всем доброго времени суток! На работе стоит задача по передаче IP адреса Openvpn клиента на сервер Openvpn через HAProxy. Схематично в тестовой среде выглядит так: Оpenvpn-Client 192.168.10.206 -> HAProxy 192.168.10.216 -> Openvpn-Server 192.168.10.121.

Openvpn-client:

#cat /etc/openvpn/client/Client1.conf

client  
dev tun  
proto tcp  
remote 192.168.10.216 1194  
remote 192.168.10.216 443  
resolv-retry infinite  
nobind  
cipher AES-256-CBC  
remote-cert-tls server  
comp-lzo  
log Client1.log  
verb 3  
tls-auth ta.key 1  
ca ca.crt  [br]
cert Client1.crt  
key Client1.key  

HAProxy:

#cat haproxy.cfg

global 
	log /dev/log	local0  
	log /dev/log	local1 notice  
	chroot /var/lib/haproxy  
	stats socket /run/haproxy/admin.sock mode 660 level  
 admin expose-fd listeners  
	stats timeout 30s  
	user root  
	group root  
	daemon	
	ca-base /etc/ssl/certs  
	crt-base /etc/ssl/private  
	ssl-default-bind-ciphers  
ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS 
	ssl-default-bind-options no-sslv3defaults  
	log	global  
	mode	http  
	option	httplog  
	option	dontlognull  
        timeout connect 5000  
        timeout client  50000  
        timeout server  50000  


frontend vpn-in01
	mode tcp  
	option tcplog  
	bind *:443  
	bind *:1194  
	default_backend servers01  

backend servers01  
	mode tcp  
	server vpn2-clone 192.168.10.121:1194 check fall 3 rise 2  
#	server vpn2-clone 192.168.10.121:1194 check send-proxy   

Openvpn-Server:
#cat /etc/openvpn/srv-openvpn.conf

port 1194  
proto tcp  
dev tun  
multihome  
ca ca.crt  
cert srv-openvpn.crt  
key srv-openvpn.key 
dh dh2048.pem  
tls-auth ta.key 0  
cipher AES-256-CBC  
server 172.16.124.0 255.255.254.0  
keepalive 10 120  
persist-key  
persist-tun  
mute 20  
client-config-dir ccd  
status srv-openvpn-status.log  
log /var/log/srv-openvpn.log  
log-append /var/log/srv-openvpn.log  
management localhost 7505  
verb 3  
comp-lzo  
sndbuf 0  
rcvbuf 0  
client-to-client  
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem  
push "register-dns"  
push "redirect-gateway"  
push "dhcp-option DNS 192.168.10.22"  
route 192.168.43.0 255.255.255.0  
route 192.168.44.0 255.255.255.0  

С данными настройками клиент подключается, но у всех клиентов ip адрес источника = ip адресу HAProxy. Если в настройках бэкэнда прописать строку:

server vpn2-clone 192.168.10.121:1194 check send-proxy

вместо текущей:

server vpn2-clone 192.168.10.121:1194 check fall 3 rise 2

То на впн сервере при подключении следующие ошибки:

Mon Jun 1 16:53:02 2020 192.168.10.216:57348 SIGUSR1[soft,connection-reset] received, client-instance restarting
Mon Jun 1 16:53:04 2020 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1400)
Mon Jun 1 16:53:04 2020 TCP connection established with [AF_INET]192.168.10.216:57350
Mon Jun 1 16:53:04 2020 192.168.10.216:57350 WARNING: Bad encapsulated packet length from peer (20562), which must be > 0 and <= 1527 — please ensure that --tun-mtu or --link-mtu is equal on both peers — this condition could also indicate a possible active attack on the TCP link — [Attempting restart...]
Mon Jun 1 16:53:04 2020 192.168.10.216:57350 Connection reset, restarting [0]

На клиенте и на сервере настройки MTU и иже с ними изменял разнообразным образом, впн клиент не подключается. Быть может кто то сможет подсказать возможные пути решешия данной задачи?

Спасибо всем кто дочитал до конца)

 ,

WinsentVega ()

бесконечный рефреш страницы (haproxy)

Всем привет, помогите разобраться с напастью, начал познавать haproxy в связи с рабочей необходимостью. Задача при ввода Url типа https://my.server.ru/ сразу редиректить на каталог типа https://my.server.ru/1c_bd/ru_RU/ Это я сделал, но есть проблема, которая скорее всего связанная со структурой конфига haproxy, при переходе по ссылке и после редиректа старница начинает бесконечно рефрешится или редиректиться. прикрепляю полный конфиг моего haproxy. haproxy -c -f /etc/haproxy/haproxy.cfg ни на что не ругается, в логах кроме Apr 30 12:55:12 localhost haproxy[3124]: 192.168.1.92:53661 [30/Apr/2020:12:55:12.000] https-proxy~ 1c_path/s1 0/0/15/9/24 200 18570 - - ---- 2/1/0/0/0 0/0 "GET /SoftOnIT/ru_RU/ HTTP/1.1" так же ничего нет…

#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
	ssl-server-verify none
	ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3
    tune.ssl.default-dh-param 4096

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#-----------------------------------------------------------
frontend http-proxy
    bind *:80
	redirect scheme https code 301 if !{ ssl_fc } #редирект на https
	default_backend 1c_web
	########Для установки и обновления letsencrypt##############
	acl letsencrypt-acl path_beg /.well-known/acme-challenge/
	use_backend letsencrypt-backend if letsencrypt-acl
#---------------------------------------------------------------
frontend https-proxy
    bind *:443 ssl crt /etc/letsencrypt/live/my.server.ru/my.server.ru.pem
	acl 1c hdr_end(host) -i my.server.ru
	http-request set-path /SoftOnIT/ if 1c
	use_backend 1c_path if 1c
	default_backend 1c_web
#---------------------------------------------------------------
backend letsencrypt-backend
    server letsencrypt 127.0.0.1:8888
#---------------------------------------------------------------
backend 1c_web
    mode http
    cookie SERVERID insert indirect nocache
    server 1cweb 10.255.10.26:80 check cookie 1cweb
#---------------------------------------------------------------
backend 1c_path
    server s1 10.255.10.26:443 ssl

 ,

gidrotormoz ()

haproxy не пишет логи

Делаю всё по этой (и многим похожим инструкциям). Но всё что вижу в логе:

Mar 22 00:16:59 vault13 haproxy[11840]: Proxy main started.
Mar 22 00:16:59 vault13 haproxy[11840]: Proxy nginx started.

Хочу аналог access.log nginx, т.е. запись с ip клиента и временем для каждого подключения...
P.S. просто зла уже на эту тварь не хватает...

 ,

atrus ()

Прозрачный haproxy не работает

Что пытаюсь сделать: Пропустить трафик на nginx через haproxy на том же компе, но так, чтобы в логах nginx оставался реальный ip-адрес. Судя по записям в интернете это сверхпростая задача. Но, увы... (SELinux на время тестирования выключен.)

Вот это минимально работающий конфиг, в котором адреса остаются локальными (haproxy.conf):

frontend ssl_v4
    bind *:443 transparent
    mode tcp
    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }
    default_backend nginx_v4

backend nginx_v4
    mode tcp
    server nginx localhost4:1443

Вот так работает. Но ip пишутся локальные. Изменяем бэкенд:

backend nginx_v4
    mode tcp
    source 0.0.0.0 usesrc clientip
    server nginx localhost4:1443

Поскольку в ядре CentOS 8 в nftables ещё не завезли поддержку tproxy - ставим из репозитория elrepo kernel-ml (5.5.10-1.el8.elrepo.x86_64), из пакетов Fedora 31 пересобираем libnftnl-1.1.3-2.el8.x86_64.rpm и nftables-0.9.1-3.el8.x86_64.rpm. Перезапускаем - текущий фаервол работает.

Добавляем правила:

table inet filter {
    chain divert {
        type filter hook prerouting priority -150; policy accept;
        tcp dport https tproxy to :1443 meta mark set 777 accept
    }
}

Перезагружаем фаервол, добавляем маршрутизацию:

# ip rule add fwmark 777 lookup 100
# ip route add local 0.0.0.0/0 dev lo table 100

Увы, не работает. Если запустить haproxy в консоли как haproxy -d -V -f /etc/haproxy/haproxy.cfg - получим при попытке обратиться к серверу: 00000000:ssl_v4.accept(0008)=000d from [172.24.0.1:59462] ALPN=<none> 00000000:nginx_v4.clicls[000d:adfd] 00000000:nginx_v4.closed[000d:adfd] [ALERT] 080/163214 (5778) : sendmsg logger #1 failed: No such file or directory (errno=2)

И всё... Что дальше делать - не знаю... :(

 , ,

atrus ()

haproxy with blue coat proxy

Коллеги, здравствуйте!

Никак не могу победить проблему, кажется уже, что проблему невозможно решить настройками haproxy. В общем надо реализовать такой проход: Инициатор сигнала (https запрос) - haproxy - blue coat proxy - tls (https) endpoint . blue coat как non transparent proxy.

С haproxy выполняется запрос через команду curl -x https://bluecoatproxy:port -vvk -X GET https://endpoint:port/test Как результат я получаю сообщение в формате JSON как и надо.

Такой запрос с haproxy отдает html мтраницу с ообщением network error: curl -vvk https://bluecoatproxy:port/test

Т.е.обычный проброс как в прозрачный прокси не срабатывает, нужно как то перебросить именно такой запрос, сконфигурить настройками в haproxy.cfg. curl -x https://bluecoatproxy:port -vvk -X GET https://endpoint:port/test

Может быть кто-нибудь встречался с подобным?

По нерабочим настройкам сейчас так и возвращается от блюкота 503 ошибка. --------------------- frontend http_front log /dev/log local2 notice bind *:443 stats uri /haproxy?stats default_backend http_back

acl golden_member path_sub test use_backend http_enpdoint if golden_member

backend http_back balance leastconn server 1.1.1.1:1 1.1.1.1:1 check inter 10000 fall 3

backend http_enpdoint balance leastconn #http-request set-method CONNCET пробовал проброс server 2.2.2.2:2 2.2.2.2:2 weight 1 maxconn check ssl verify none#check inter 10000 fall 3 #tls соединение к blue coat

backend no-match http-request deny

 

KITIT ()

http2 через http к бэкенду haproxy

Добрый день.
Как можно проверить, что haproxy использует http2 при работе с бэкендом ? Не смог загуглить опции для бэкенда, они существуют или всё работает при дефолтном конфиге ?

 , ,

Deleted ()

Прозрачный прокси HTTPS

Всем привет!

Как сделать прозрачный прокси, чтоб он посылал запросы клиентов далее стоящему cache_peer-у (обычный forward proxy) методом CONNECT.

Вторгаться в сертификаты не надо.

То есть он должен принять коннект от клиента, взять оттуда SNI заголовок и послать на cache_peer вот такое

 CONNECT gmail.com:443 HTTP/1.1
 Host: gmail.com
 Proxy-Connection: Keep-Alive

После чего соединить получивший сокет с сокетом от клиента.

Пока я нашел только 3proxy+tcppm, но в прозрачном режиме он отправляет CONNECT ip.ip.ip.ip:443, а не имя.

 , , ,

Bers666 ()

Настройка HAPROXY

Добрый день, помогите пож-та разобраться с задачей:

Нужно поднять хост с балансировщиком Haproxy и настроить его таким образом, чтоб при обращении на адрес http://<адрес балансировщика>:9090/zab

Выполнялось перенаправление на два сервера: http://ms1/zabbix http://tz-eis-devops.atbmarket.com/zabbix

Настроить таким образом, чтоб одно из пяти обращений шли на сервер http://ms1/zabbix

Какой должен быть конфиг?

 

denis_85 ()

Haproxy не запускается при загрузке сервера

Тестовая система из пяти виртуальных машин. На 192.168.56.147 Debian x86_64 GNU/Linux, на котором Haproxy слушает порт 7100.

После загрузки у службы haproxy статус failed. Но если запустить её командой «sudo systemctl start haproxy service», всё работает. Journalctl после загрузки пишет:

$ sudo journalctl | grep -i haproxy
Jun 26 16:00:43 debian systemd[1]: Starting HAProxy Load Balancer...
Jun 26 16:00:43 debian systemd[1]: Started HAProxy Load Balancer.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[293]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Jun 26 16:00:43 debian haproxy-systemd-wrapper[293]: Note: setting global.maxconn to 2000.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[293]: [ALERT] 176/160043 (296) : Starting frontend localnodes: cannot bind socket [192.168.56.147:7100]
Jun 26 16:00:43 debian haproxy-systemd-wrapper[293]: haproxy-systemd-wrapper: exit, haproxy RC=1
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Main process exited, code=exited, status=1/FAILURE
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Unit entered failed state.
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Failed with result 'exit-code'.
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Service hold-off time over, scheduling restart.
Jun 26 16:00:43 debian systemd[1]: Stopped HAProxy Load Balancer.
Jun 26 16:00:43 debian systemd[1]: Starting HAProxy Load Balancer...
Jun 26 16:00:43 debian systemd[1]: Started HAProxy Load Balancer.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[319]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Jun 26 16:00:43 debian haproxy-systemd-wrapper[319]: Note: setting global.maxconn to 2000.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[319]: [ALERT] 176/160043 (322) : Starting frontend localnodes: cannot bind socket [192.168.56.147:7100]
Jun 26 16:00:43 debian haproxy-systemd-wrapper[319]: haproxy-systemd-wrapper: exit, haproxy RC=1
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Main process exited, code=exited, status=1/FAILURE
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Unit entered failed state.
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Failed with result 'exit-code'.
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Service hold-off time over, scheduling restart.
Jun 26 16:00:43 debian systemd[1]: Stopped HAProxy Load Balancer.
Jun 26 16:00:43 debian systemd[1]: Starting HAProxy Load Balancer...
Jun 26 16:00:43 debian systemd[1]: Started HAProxy Load Balancer.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[352]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Jun 26 16:00:43 debian haproxy-systemd-wrapper[352]: Note: setting global.maxconn to 2000.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[352]: [ALERT] 176/160043 (355) : Starting frontend localnodes: cannot bind socket [192.168.56.147:7100]
Jun 26 16:00:43 debian haproxy-systemd-wrapper[352]: haproxy-systemd-wrapper: exit, haproxy RC=1
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Main process exited, code=exited, status=1/FAILURE
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Unit entered failed state.
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Failed with result 'exit-code'.
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Service hold-off time over, scheduling restart.
Jun 26 16:00:43 debian systemd[1]: Stopped HAProxy Load Balancer.
Jun 26 16:00:43 debian systemd[1]: Starting HAProxy Load Balancer...
Jun 26 16:00:43 debian systemd[1]: Started HAProxy Load Balancer.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[388]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Jun 26 16:00:43 debian haproxy-systemd-wrapper[388]: Note: setting global.maxconn to 2000.
Jun 26 16:00:43 debian haproxy-systemd-wrapper[388]: [ALERT] 176/160043 (391) : Starting frontend localnodes: cannot bind socket [192.168.56.147:7100]
Jun 26 16:00:43 debian haproxy-systemd-wrapper[388]: haproxy-systemd-wrapper: exit, haproxy RC=1
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Main process exited, code=exited, status=1/FAILURE
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Unit entered failed state.
Jun 26 16:00:43 debian systemd[1]: haproxy.service: Failed with result 'exit-code'.
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Service hold-off time over, scheduling restart.
Jun 26 16:00:44 debian systemd[1]: Stopped HAProxy Load Balancer.
Jun 26 16:00:44 debian systemd[1]: Starting HAProxy Load Balancer...
Jun 26 16:00:44 debian systemd[1]: Started HAProxy Load Balancer.
Jun 26 16:00:44 debian haproxy-systemd-wrapper[434]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Jun 26 16:00:44 debian haproxy-systemd-wrapper[434]: Note: setting global.maxconn to 2000.
Jun 26 16:00:44 debian haproxy-systemd-wrapper[434]: [ALERT] 176/160044 (435) : Starting frontend localnodes: cannot bind socket [192.168.56.147:7100]
Jun 26 16:00:44 debian haproxy-systemd-wrapper[434]: haproxy-systemd-wrapper: exit, haproxy RC=1
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Main process exited, code=exited, status=1/FAILURE
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Unit entered failed state.
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Failed with result 'exit-code'.
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Service hold-off time over, scheduling restart.
Jun 26 16:00:44 debian systemd[1]: Stopped HAProxy Load Balancer.
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Start request repeated too quickly.
Jun 26 16:00:44 debian systemd[1]: Failed to start HAProxy Load Balancer.
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Unit entered failed state.
Jun 26 16:00:44 debian systemd[1]: haproxy.service: Failed with result 'exit-code'.

Конфиг:

$ cat /etc/haproxy/haproxy.cfg
global
        debug

frontend localnodes
        bind 192.168.56.147:7100
        mode tcp
        default_backend nodes
        timeout client          1m
        acl block_1 src 192.168.56.1
        acl block_2 src 192.168.56.149

        use_backend ls1 if block_1
        use_backend ls2 if block_2

backend ls1
        mode tcp
        balance roundrobin
        server mytestweb1 192.168.56.150:7189
        timeout connect        10s
        timeout server          1m

backend ls2
        mode tcp
        balance roundrobin
        server mytestweb2 192.168.56.151:7189
        timeout connect        10s
        timeout server          1m

backend nodes
        mode tcp
        balance roundrobin
        server web01 192.168.56.150:7189
        server web02 192.168.56.151:7189
        timeout connect        10s
        timeout server          1m

После запуска вручную journalctl показывает:

Jun 26 16:11:04 debian systemd[1]: Starting HAProxy Load Balancer...
Jun 26 16:11:04 debian systemd[1]: Started HAProxy Load Balancer.
Jun 26 16:11:04 debian haproxy-systemd-wrapper[677]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Jun 26 16:11:04 debian haproxy-systemd-wrapper[677]: Note: setting global.maxconn to 2000.

В чём проблема? Почему ошибка «cannot bind socket [192.168.56.147:7100]» возникает при автозагрузке и не возникает при ручном запуске?

Ответ: Haproxy запускается до того, как машина получает адрес по DHCP. Помогло сменить адрес на 0.0.0.0:

frontend localnodes
        bind 0.0.0.0:7100

Либо можно в /etc/systemd/system/multi-user.target.wants/haproxy.service в строку After добавить network-online.target

 , ,

olegd ()

Поругайте схему: haproxy + varnish

Здравствуй, All.

Решил поднять кэширующий прокси для веб-сервиса. Остановился на varnish (раньше с ним не работал вообще, ну, разве что 500-е ошибки видел с ним).

Хочу поднять следущий конфиг:

На 80-м порту - varnish. На 443-м порту - haproxy.

Дальше есть множественные бэкенды (апач, к слову). Лоад-балансер для бэкендов сделан средствами haproxy.

Хочу сделать так:

80-й порт: varnish -> haproxy_backends -> backend1/backend2/.../backendN.

443-й порт: haproxy -> varnish -> см. выше.

Почему хочу лоадбалансер на haproxy - банально приятнее его веб-админка, по сравнению с консольными тулзами varnish. Haproxy, как минимум, уже есть, настроен, освоен и работает как надо.

Чем нравится эта схема:

1. минимум вмешательств по сравнению с текущей (сейчас просто haproxy с 80/443 шлют запросы на бэкенды).

2. varnish вообще опционален (настрою haproxy, что б был fallback на свои же бэкенды, если varnish не отвечает).

На какие подводные камни я могу напороться и почему так никто не делает? :)

 , ,

AngryElf ()

Разделить конфиг прокси.

Как можно разделить банальный конфиг haproxy.cfg на разные файлы. Когда 2-3 домена, то не страшно. А в случае если будет больше? Не хочется допускать ошибки в файле, так как при 1 ошибке не будет работать ни 1 из бэкендов. Как можно поместить в отдельные файлы например baconcluster.cfg и milshake_cluster.cfg?

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        option forwardfor
        option http-server-close
        stats enable
        stats auth someuser:somepassword
        stats uri /haproxyStats

frontend http-in
        bind *:80

        # Define hosts
        acl host_bacon hdr(host) -i ilovebacon.com
        acl host_milkshakes hdr(host) -i bobsmilkshakes.com

        ## figure out which one to use
        use_backend bacon_cluster if host_bacon
        use_backend milshake_cluster if host_milkshakes

backend baconcluster
        balance leastconn
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server node1 10.0.0.1:8080 cookie A check
        server node1 10.0.0.2:8080 cookie A check
        server node1 10.0.0.3:8080 cookie A check


backend milshake_cluster
        balance leastconn
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server node1 10.0.0.4:8080 cookie A check
        server node1 10.0.0.5:8080 cookie A check
        server node1 10.0.0.6:8080 cookie A check

 , ,

RaptorsWings ()

Не отрабатывает HaProxy

Добрый день. Решил поиграться с HaProxy и настроить у себя на машине. Использую 3 виртуалки(апачи на 8080 порту) и локалку(80 порт). Пытаюсь понять почему во время обновления страницы в браузере, я не попадаю с одной VM на другую VM, как было продемонстрировано во многих видео. Подскажите пожалуйста, где косяк.

global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
	stats timeout 30s
	user haproxy
	group haproxy
	daemon

	# Default SSL material locations
	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private

	# Default ciphers to use on SSL-enabled listening sockets.
	# For more information, see ciphers(1SSL). This list is from:
	#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
	# An alternative list with additional directives can be obtained from
	#  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
	ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
	ssl-default-bind-options no-sslv3

defaults
	log	global
	mode	http
	option	httplog
	option	dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
	errorfile 400 /etc/haproxy/errors/400.http
	errorfile 403 /etc/haproxy/errors/403.http
	errorfile 408 /etc/haproxy/errors/408.http
	errorfile 500 /etc/haproxy/errors/500.http
	errorfile 502 /etc/haproxy/errors/502.http
	errorfile 503 /etc/haproxy/errors/503.http
	errorfile 504 /etc/haproxy/errors/504.http

frontend front
        bind *:80
	default_backend haproxy_httpd

backend haproxy_httpd
        balance roundrobin
        server my_vm1 192.168.110.1:8080 check
        server my_vm2 192.168.110.2:8080 check
	server my_vm4 192.168.110.3:8080 

 , ,

RaptorsWings ()

Haproxy real IP адрес

Добрый день.

В логах балансировщика не отображается реальный ip клиента. Параметр x forward for установлен. Возможно некорректно настроен формат логирования. Как возможно в лог передать ip адрес клиента. Спасибо

 

lubimiisputnik ()

Балансировка HAProxy на linux

Добрый день коллеги. Подскажите, пожалуйста, не выходит с алгоритмом балансировки round robin. Есть 4 backend, на которые необходимо направлять запрос поочередно, по циклу. Применяю roundrobin, но в логах отображается только один IP. Как будто на остальные три запросы не уходят. Как Корректно настроить балансировку? Спасибо

 

lubimiisputnik ()

Сколько информации можно класть в лог?

Запускаю HAproxy для балансировки нагрузки между толстым клиентом и серверами. Один клиент работает, другой (другая программа) — нет. В логах для обоих информация вида

Dec 28 15:57:18 srv8 haproxy[58838]: 192.22.222.28:65134 [28/Dec/2018:15:57:18.821] public static/s2 0/0/8 269 -- 1/1/0/0/0 0/0

Конфиг:

$ cat /etc/haproxy/haproxy.cfg
global
        debug
        log /dev/log   local0 debug
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        log    global
        mode    http
        option  httplog
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend public
        log             global
        bind            srv8:7180 name clear
        mode            http
        log             global
        option          httplog
        maxconn         100
        timeout client  30s
        option          tcplog
        default_backend  static

backend static
        log             global
        mode            http
        balance         roundrobin
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        server          s1 srv17:7100
        server          s2 srv17:7102
        server          s3 srv18:7100
        server          s4 srv18:7102

Информацию ловит rsyslog:

$ cat /etc/rsyslog.d/49-haproxy.conf
# Create an additional socket in haproxy's chroot in order to allow logging via
# /dev/log to chroot'ed HAProxy processes
$AddUnixListenSocket /var/lib/haproxy/dev/log

# Send HAProxy messages to a dedicated logfile
if $programname startswith 'haproxy' then /var/log/haproxy.log
&~

Что сделать, чтобы было больше информации в логе?

Предварительный ответ — запускать в консоли:

haproxy -d -V -f /etc/haproxy/haproxy.cfg

 

olegd ()

haproxy, http балансировка по условию

Здравствуйте! Можно ли сделать балансировку, при которой server2 был бы задействован только если server1 недоступен? Т.е. всегда все запросы должны идти на serever1 и если вдруг server1 упал, то запросы перенаправляются на server2. Как только server1 поднялся, то все запросы опять вернулись на него, а на server2 не идет ни одного запроса.

backend back_my
  server server1 192.168.125.21:8081 check
  server server2 192.168.125.23:8081

 ,

krpsh ()

HAproxy and POSTFIX?

В версии 2.10 был добавлен протокол HAproxy (“preserve source ip address despite reverse proxies”)

Подскажите в чем разница, если включен на POSTFIX этот протокол? Показывает в теле письма адрес майл клиента и только?

Спасибо.

 ,

Fitter ()

Логировать haproxy в локальный файл типа /var/log/haproxy.log

Можно ли без rsyslog типа такого: https://www.debuntu.org/how-to-log-haproxy-messages-only-once/

т.е. без этих плясок, а просто указать файл типа: log_to /var/log/haproxy.log

?

 ,

linlin ()

Сертификаты HAProxy

Добрый день.

Не уверен что обратился по адресу, но больше не знаю где задать свой вопрос. У меня в сети используется HAProxy для перенаправления пользовательских HTTP/HTTPS запросов на внутренние почтовые сервера Exchange 2013, всего их 3шт (не бейте). Все работает хорошо, но на сервере, на который идет переадресация, постоянно появляются ошибки: «Event 36887, Schannel A fatal alert was received from the remote endpoint. The TLS protocol defined fatal alert code is 46.»

Судя по описанию, это ошибка сертификата и связана она с HAProxy, только не могу понять где именно затык. Со стороны Exchange все проверил, думаю тут все настроено правильно - используется сертификат, выданный GeoTrust RSA CA 2018. По Exim мне сильно нехватает знаний.

Возможно кто-нибудь сталкивался с такой ситуацией. Подскажите пожалуйста, влияют ли сертификаты, которые лежат в /etc/ssl/certs на взаимодействие HAProxy и Exchange? У нас там лежит корневой сертификат DigiCert, который выдал сертификат GeoTrust RSA CA 2018, который выдал наш сертификат. Но вот промежуточного сертификат GeoTrust RSA CA 2018 и нашего сертификата там нет.

Пожалуйста памагити.

 , ,

KOTOXJle6 ()

Как принимать HTTP на фронтенде и коннектиться по HTTPS к бэкенду?

Есть API приложения, которое, к огромному сожалению, доступно только по HTTPS. Поскольку приложение находится внутри корпоративной сети и никакие враги там мега-секретные ответы API не перехватывают - хотелось бы избавить клиентскую сторону от геморроя с сертификатами и дать нормальный человеческий HTTP-доступ, при этом также предоставив load-balancing и failover, поскольку на стороне бэкенда не 1 сервер, а целая кластерная россыпь равнозначных серверов, каждый из которых имеет моральное право рухнуть в любой момент.

Конфигурацию проксирования HTTPS в HTTP для haproxу описали бешенное количество раз, а вот с обратным как всегда какая-то дикая проблема, прямо-таки секрет полишинеля какой-то (словно речь идёт о каких-то страшных непристойностях). Я уже делал аналогичную схему для LDAP -> LDAPS, и пока получилось - чуть мозг не вывихнул, теперь вот аналогичный геморрой с HTTP...

Может, у кого уже есть наработки / примеры? Был бы очень благодарен!

 

DRVTiny ()