haproxy

Ответить
ya
^-^
Сообщения: 2747
Зарегистрирован: 16 дек 2021, 19:56

haproxy

Сообщение ya »

Параметр send-proxy-v2 в конфигурационном файле HAProxy (/etc/haproxy/haproxy.cfg) используется для передачи информации о клиентских соединениях на серверы с использованием протокола PROXY версии 2.

В случае настройки ocserv, убедиться что включен параметр listen-proxy-proto = false , иначе отключить в /etc/ocserv/ocserv.conf

Код: Выделить всё

# Конфигурация первого сервера HAProxy
frontend my_frontend
    bind *:80  # Порт, на котором HAProxy принимает соединения
    default_backend my_backend

backend my_backend
    option http-server-close  # Закрывать соединение после обработки запроса
    # Отправить данные клиента на второй сервер HAProxy с использованием PROXY v2
    server second_haproxy 192.168.1.20:80 send-proxy-v2
На втором сервере HAProxy вам необходимо убедиться, что он настроен на прием PROXY-протокола. Это можно сделать, добавив параметр accept-proxy в конфигурацию второго сервера.
ya
^-^
Сообщения: 2747
Зарегистрирован: 16 дек 2021, 19:56

Re: haproxy

Сообщение ya »

объединение сертификата и ключа для haproxy

Код: Выделить всё

cat /etc/letsencrypt/live/o.fnx1.ru/fullchain.pem /etc/letsencrypt/live/o.fnx1.ru/privkey.pem > /etc/haproxy/cert.o.fnx1.ru.pem
/etc/haproxy/haproxy.cfg

Код: Выделить всё

frontend http_in
    bind *:80
    bind *:443 ssl crt /path/to/cert.pem  # если нужен HTTPS

    # Проверка домена
    acl host_ha1 hdr(host) -i ha1.ly
    acl host_ha2 hdr(host) -i ha2.ly

    # Перенаправление на бэкенды
    use_backend backend_ha1 if host_ha1
    use_backend backend_ha2 if host_ha2

backend backend_ha1
    mode tcp
    server server1 172.16.16.16:0 check

backend backend_ha2
    mode tcp
    server server2 172.17.17.17:0 check
bind *:80 и bind *:443 — слушает все входящие соединения на портах 80 и 443.
hdr(host) — проверяет заголовок Host.
acl host_ha1 и acl host_ha2 — определяют, какой домен запрашивают.
use_backend выбирает нужный бэкенд в зависимости от домена.
В бэкендах используется mode tcp и указывается IP, но порт 0. В этом случае HAProxy будет проксировать весь трафик на порт, указанный в исходящем соединении. Однако, чтобы прокинуть все порты, необходимо использовать tcp-mode и proxy-режим.
Важно:
Чтобы проксировать все порты, нужно использовать mode tcp и выбрать tcp-проксирование. Также, нужно удостовериться, что HAProxy работает в tcp-режиме и использует transparent или tcp-режим, чтобы проксировать все порты. Это не стандартная настройка для HAProxy — он обычно проксирует на конкретный порт.

Если вы хотите, чтобы HAProxy слушал все порты на внешнем интерфейсе и перенаправлял их на внутренние IP, то это делается так:

Код: Выделить всё

# Слушает все порты на внешнем интерфейсе
bind *:0-65535

frontend all_ports
    mode tcp
    bind *:0-65535

    acl host_ha1 hdr(host) -i ha1.ly
    acl host_ha2 hdr(host) -i ha2.ly

    tcp-request inspect-delay 5s
    tcp-request content accept if true

    use_backend backend_ha1 if host_ha1
    use_backend backend_ha2 if host_ha2

backend backend_ha1
    mode tcp
    server server1 172.16.16.16:0

backend backend_ha2
    mode tcp
    server server2 172.17.17.17:0
Указание порта 0 в server означает "использовать порт, с которым идет соединение".
Для полноценной работы с любыми портами, возможно потребуется использовать transparent режим и настройку iptables для перенаправления.
ya
^-^
Сообщения: 2747
Зарегистрирован: 16 дек 2021, 19:56

Re: haproxy

Сообщение ya »

Проверяем правильность конфигурации и перезапускаем haproxy

Код: Выделить всё

haproxy -c -f /etc/haproxy/haproxy.cfg
Узнать систему инициализации командой ps -p 1 -o comm=

Alpine (init)

Код: Выделить всё

rc-service haproxy restart
Devuan (runit)

Код: Выделить всё

service haproxy restart
или

Код: Выделить всё

sv haproxy restart
Debian или CentOS (systemd)

Код: Выделить всё

systemctl restart haproxy
Ответить