HAProxy, разъясните пару вопросов.



  • Пытаюсь настроить для доступа из вне по одному адресу(IP) доступ к поддоменам находящимся во внутренней сети.
    Сколько гайдов не находил ничего не заработало.
    https://blog.devita.co/pfsense-to-proxy-traffic-for-websites-using-pfsense/#step2configurehaproxy
    http://nathandarnell.com/haproxy-in-pfsense-as-a-reverse-proxy
    более менее актуальные. но всеравнол не сработало.
    На текущий момент 2 портала в во внутренней сети один из них https. может быть в этих гайдах чтото не так?



  • Порядок я правильно понимаю? сначала создаю фронтенд с указанием какой порт слушает HAProxy(предварительно в правилах сделал рарешение на вход с wan интерефейса http). затем уже в бэкэнд добавляю непосредтсвенно правила по перебросу(домен+ип+порт)
    нужно ли как отстраивать днс?



  • Покажите ваш текущий конфиг на haproxy - в Service > Haproxy > Settings - внизу есть кнопка "Show" - automatically generated configuration - content of /var/etc/haproxy/haproxy.cfg



  • @vladimirlind
    Причем я добился того что присходит редирект на портале с http на https, но все стопорится на том что неверный сертификат(на прямую через порт маппинг работает без проблем).

    Automaticaly generated, dont edit manually.

    Generated on: 2019-04-24 16:12

    global
    maxconn 1000
    stats socket /tmp/haproxy.socket level admin
    gid 80
    nbproc 1
    hard-stop-after 15m
    chroot /tmp/haproxy_chroot
    daemon
    server-state-file /tmp/haproxy_server_state

    listen HAProxyLocalStats
    bind 127.0.0.1:2192 name localstats
    mode http
    stats enable
    stats admin if TRUE
    stats show-legends
    stats uri /haproxy/haproxy_stats.php?haproxystats=1
    timeout client 5000
    timeout connect 5000
    timeout server 5000

    frontend http
    bind 82.142.165.226:80 name 82.142.165.226:80
    mode http
    log global
    option http-keep-alive
    maxconn 500
    timeout client 30000
    acl httpRedirectACL var(txn.txnhost) -m str -i er.vokod34.ru
    http-request set-var(txn.txnhost) hdr(host)
    http-request redirect scheme https if httpRedirectACL
    default_backend help.vokod34.ru_ipvANY

    frontend https
    bind 82.142.165.226:443 name 82.142.165.226:443
    mode tcp
    log global
    timeout client 30000
    tcp-request inspect-delay 5s
    acl er req.ssl_sni -i er.vokod34.ru
    tcp-request content accept if { req.ssl_hello_type 1 }
    use_backend er.vokod34.ru_ipv4 if er

    backend help.vokod34.ru_ipvANY
    mode http
    id 100
    log global
    timeout connect 30000
    timeout server 30000
    retries 3
    server help.vokod34.ru 193.125.5.27:80 id 101 weight 50

    backend er.vokod34.ru_ipv4
    mode tcp
    id 10102
    log global
    timeout connect 30000
    timeout server 30000
    retries 3
    source ipv4@ usesrc clientip
    server er.vokod34.ru 193.125.5.9:443 id 10104 ssl weight 50 verify none



  • @k0st1k said in HAProxy, разъясните пару вопросов.:

    acl er req.ssl_sni -i er.vokod34.ru
    tcp-request content accept if { req.ssl_hello_type 1 }

    Если неправильный сертификат - то, наверное, маршрутизация по acl на фронтенде не срабатывает. Сертификат какой, вебгуя пфсенса? Скриншот настроек acl на фронтенде https было бы интересно посмотреть.



  • @vladimirlind скрин с утра сделаю, для понимания, использовать сертификат сайта не выйдет? придется свой подсовывать?





  • @k0st1k В текущей конфигурации у вас SSL устанавливается между сервером и клиентом, без терминации на haproxy. Можно использовать режим SSL offloading - для того того, чтобы SSL сессия клиента перехватывалась haproxy, на котором был бы установлен сертификат сайта. В этом случае надо сертификат сайта импортировать на пфсенс и указать его на фронтенде.
    Вы говорите - неверный сертификат при попытке зайти на сайт - а какой сертификат?
    Если на фронтенде https убрать ACL и установить на нем er.vokod34.ru_ipv4 как дефолтный бекенд - будет работать?



  • Если терминировать SSL на haproxy, то стоит попробовать ssl_fc_sni вместо req.ssl_sni в АСL:

    e972ed6f-c8d6-4b6c-96d3-e802615ea539-image.png



  • @vladimirlind доковыярл настройки на столько что откат конфига не спасает и отваливаются правила фаервола) на праздниках планирую переставить с нуля и импортировать бэкапом часть основных настроек.
    Как Подскажите как правильно отстроить.
    Как я вижу порядок:
    1.в бэкенд добавляю нужные ресурсы вида ИП*порт.
    2. в фронтенд добавляется правило перекидывания.
    необходимо ли дополнительно настраивать NAT?



  • HAproxy проксирует запросы, приходящие на айпи:порт, указанные на фронтенде с учетом правил ACL, если таковые настроены, на сервер(ы) в в бекенде (тоже с учетом правил, если таковые настроены). Как правило, на фронтенде указывается айпи внешнего интерфейса, а на бекенде - айпи серваков во внутренней сети. Правил НАТ никаких делать не надо.



  • Вот пример бэкенда для сервиса https, все верно?
    для каждой пары ип+порт свой бэкенд или в один добавлять как альяс?
    8f1a42f7-0dd2-4ad3-9474-3680115046fc-изображение.png
    a237a79e-397b-47a5-b1ce-3a77ab83afda-изображение.png
    787ac073-0551-4628-9f9a-527cfe3481c1-изображение.png



  • сложно сказать - айпи сервера бекенда внешний? Ок, может на то есть причина. Если серверов бекенда несколько - то можно балансировать трафик между ними. Тут много возможностей и вариантов, все зависит от желаемого результата.



  • Нужна одна реализация
    domain.ru - 85.125.125.125
    er.domain.ru - 85.125.125.125 (но во внутренней сети свой адрес, в примере 193.125.5.9)
    post.domain.ru - 85.125.125.125 (так же свой 193.125.5.4)
    cloud.domain.ru - 85.125.125.125 (так же свой 193.125.5.2)

    адресация 193.125.5.* внутренняя( не я её придумал такой) порталы все разные гдето есть ssl гдето нет.



  • Я так понимаю, фронтенд один для 85.125.125.125:443 (ну, + еще 80 фронтенд для перенаправления на 443), и с помощью трех правил ACL разруливать на три разных бекенда: если обращение идет к er.domain.ru -> бкенед с 193.125.5.9 и так далее для остальных. Тут еще SSL offloading на фронтенде просится с wildcard сертификатом для *.domain.ru



  • @vladimirlind не совсем, просто по найду на фронтенде был настроен переброс с http на https, а так нам необходимо чтобы отдельно http и https(переброс сделан на стороне веб сервера если требуется).


Log in to reply