Aqui está a solução: Com o TPROXY, podemos passar o IP dos clientes para o servidor real sem a necessidade de um cabeçalho encaminhado e funciona para conexões TCP.
Requisitos:
-
Linux com kernel 2.6.28 e superior
-
iptables e HAProxy com suporte a TPROXY
-
Os servidores de back-end devem usar o nó em que o HAPRoxy está instalado como um gateway padrão
-
Você já tem uma configuração HAProxy em funcionamento
Procedimento:
- Execute o comando abaixo para marcar e rotear pacotes
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 111
iptables -t mangle -A DIVERT -j ACCEPT
ip rule add fwmark 111 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
- Defina o nó no modo de encaminhamento:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/eth0/send_redirects
- Na seção de configuração do proxy de backend HAProxy, adicione:
source 0.0.0.0 usesrc clientip
-
Reinicie o serviço HAProxy.
-
Concluído
Eu encontrei a solução para isso seguindo as etapas fornecidas no guia mencionado no link abaixo: link