Я пытаюсь настроить 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 не требуется.