HaProxy перенаправляет исходный IP-адрес на внутренний сервер

avatar
Cyril N.
1 июля 2021 в 16:04
1395
1
1

У меня есть следующая конфигурация HaProxy:

frontend smtp
    bind :25 accept-proxy
    default_backend smtp_backend


backend smtp_backend
    mode tcp
    timeout server 1m
    timeout connect 5s

    server srv1 127.0.0.1:2500 send-proxy check maxconn 500

Это балансировщик нагрузки (AWS). Мне нужно знать IP-адрес балансировщика нагрузки.

Глядя на журналы HaProxy, я вижу следующие строки:

1 июля 16:00:03 ip-172-31-1-100 haproxy[10350]: подключение с 172.31.1.5:35040 до 172.31.1.100:25 (smtp/TCP)

Таким образом, HaProxy получает правильный исходный IP-адрес балансировщика нагрузки (я не ищу клиента на этом уровне).

Но при отображении IP/порта на целевом сервере я получаю локальный IP: 127.0.0.1.

Я подозреваю, что это из-за строки server srv1 127.0.0.1:2525 send-proxy check maxconn 500, но как мне получить IP-адрес балансировщика нагрузки на моем конечном сервере?

Заранее спасибо!

(примечание: как только соединение установлено, AWS Target Group отправляет мне команду Proxy v2, которая позволяет мне получить IP-адрес клиента, и это работает, но сначала мне нужно получить этот IP-адрес 172.31.1.5 из балансировщика нагрузки ).

Источник
bedrin
13 июля 2021 в 19:13
0

haproxy.com/blog/…

Ответы (1)

avatar
lokanadham100
15 июля 2021 в 07:52
1

К сожалению, Haproxy будет поддерживать переадресацию IP только в режиме HTTP через некоторые заголовки.

В вашем случае нужно использовать специально скомпилированный HAproxy - TProxy.

Документы: https://www.haproxy.com/blog/howto-transparent-proxying-and-binding-with-haproxy-and-aloha-load-balancer/

Это будет поддерживать переадресацию IP-адреса клиента (IP-адрес балансировщика нагрузки AWS в вашем случае) даже в режиме TCP.

Cyril N.
27 августа 2021 в 10:27
0

Проверяя конфигурацию HaProxy (haproxy -vv), я не вижу «OPTIONS = USE_LINUX_TPROXY=1» в «сборке с», но вижу «Построено с поддержкой прозрачного прокси с использованием: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND». Это то же самое?