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

HAProxy, протокол PROXY и дополнительные возможности SSL

Я пытаюсь настроить HAProxy для передачи информации SSL с помощью протокола PROXY. Пока у меня ничего не получалось. Моя тестовая конфигурация:

global
        chroot /tmp/haproxy-chroot
        log stderr format raw local0 debug

defaults
        mode tcp

frontend testpp
         bind *:5000
         mode tcp
         option tcplog
         option logasap
         log global
         timeout client 1s #15s
         default_backend nginx

backend nginx
        mode tcp
        log global
        timeout server 1s #20s
        timeout connect 1s #10s
        server nginx1 localhost:443 send-proxy-v2-ssl

Однако, когда я запускаю tcpdump, я не вижу дополнительных данных:

        0x0000:  4500 029e 0918 4000 4006 3140 7f00 0001  E.....@.@.1@....
        0x0010:  7f00 0001 c55c 05a3 905c 04de 5983 fd53  .....\...\..Y..S
        0x0020:  8018 0156 0093 0000 0101 080a 96ee 0dcb  ...V............
        0x0030:  96ee 0dcb 0d0a 0d0a 000d 0a51 5549 540a  ...........QUIT.
        0x0040:  2111 0014 47a2 f3d2 0a01 015c d6b2 1388  !...G......\....
        0x0050:  2000 0500 0000 0000 1603 0102 4101 0002  ............A...
                                      ^-------------------TLS starts here

Если я буду бегать с send-proxy-v2 (нет -ssl) Я вижу то же самое.

Я что-то упускаю из виду, как это должно работать?

Судя по вашей конфигурации, HAProxy не обрабатывает SSL-часть соединения, поэтому он не может предоставить информацию SSL в заголовке протокола PROXY.

Добавить crt <cert> директива к вашему интерфейсу bind и вы должны увидеть информацию SSL в заголовке протокола PROXY.

Если подумать, это довольно нормально, поскольку, если HAProxy должен был предоставить вам эту информацию, несмотря на то, что он не обрабатывал завершение SSL, он не мог надлежащим образом запрашивать сертификаты клиентов, предлагать наборы шифров или любые другие параметры, которые согласовываются во время рукопожатия.

Чтобы добавить к ответу @Ginnungagap, вы можете увидеть дополнительные TLV протокола прокси в выводе tcpdump, установив send-proxy-v2 proxy-v2-options crc32c. Прекращение SSL не требуется.