haproxy - passa o ip original / remoto no modo tcp

5

Eu tenho haproxy configurado com keepalived para balanceamento de carga e failover de ip de um cluster percona e, como funciona muito bem, eu gostaria de usar o mesmo lb / failover para outro serviço / daemon.

Eu configurei o haproxy dessa maneira:

listen my_service 0.0.0.0:4567
    mode tcp
    balance leastconn
    option tcpka
    contimeout      500000
    clitimeout      500000
    srvtimeout      500000

    server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
    server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3

O balanceamento de carga funciona bem, mas o serviço vê o IP do balanceador de carga em vez dos IPs reais dos clientes. No modo http, é muito fácil fazer com que o haproxy passe pelo IP remoto, mas como faço no modo tcp? Isso é crítico devido à natureza do serviço que eu preciso para balancear a carga.

Obrigado! Vito

    
por Vito Botta 08.07.2012 / 19:52

5 respostas

2

Existe aparentemente algum tipo de modo "transparente" para o haproxy que eu nunca olhei ou que queria saber, que você poderia tentar. Caso contrário, você precisará ensinar qualquer que seja o serviço de back-end sobre o modo especial do haproxy de enviar o IP original ("PROXY blahblah") e fazer com que o serviço retire o IP original disso.

Por que você está incomodando com o haproxy? Você já tem o keepalive em funcionamento e também faz um balanceamento de carga transparente adequado.

    
por 08.07.2012 / 20:30
2

Apenas para referências futuras, keepalived é uma solução para failover não balanceamento de carga (talvez você queira dizer LVS?). o modo de proxy transparente para HAProxy não tem nada a ver com qualquer maneira especial de enviar o IP original, que seria o modo HTTP normal e não transparente, onde você pode usar um cabeçalho HTTP padronizado para isso.

Na minha opinião, a resposta correta à pergunta original é: Você poderia compilar suporte de proxy transparente em HAProxy em um kernel linux habilitado para TPROXY. Isso, juntamente com o TPROXY adequado, suportando a versão + configuração do iptables na mesma máquina, permite o suporte real ao proxy tcp totalmente transparente. Isso significa que os servidores de backend NÃO precisam de nenhuma configuração especial.

Note que esta não é a configuração recomendada para o HAProxy e só deve ser usada se você precisar dela.

    
por 21.02.2013 / 11:07
1

Usar send-proxy em sua configuração (por servidor) fornecerá o IP original de origem no lado do servidor que recebe, mesmo no modo TCP. Isso requer o HAProxy 1.5 +.

Você pode encontrar mais informações sobre o Protocolo de Proxy em HAProxy Documentation .

listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout      500000
clitimeout      500000
srvtimeout      500000

server host1 xxx.xxx.xxx.xx1:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3
    
por 22.06.2015 / 09:18
1

Você pode definir o HAProxy como o Modo NAT, que ainda usa o modo TCP na Camada 4, mas torna o IP transparente.

HAProxy Layer 4 load balancing NAT mode

Por outro lado, o HAPorxy Transparent Mode usa o modo HTTP na Camada 7, o que não atinge seu ponto porque já existe a opção forwardfor no modo HTTP.

HAProxy layer 7 load-balancing transparent proxy mode

    
por 13.07.2017 / 12:26
-4

Essa configuração funcionou para mim. O IP de origem pode ser recuperado em $ _SERVER ['HTTP_X_FORWARDED_FOR']:

global
        [..... usual stuff .... ]   
        ssl-server-verify none

frontend  main *:5000
        bind *:443 ssl crt /etc/ssl/mycert_with_private_key.pem
        mode http
        option forwardfor
        reqadd X-Forwarded-Proto:\ https
        default_backend https_server

backend https_server
        mode http
        balance leastconn
        option tcpka
        stick-table type ip size 200k expire 30m
        server srv04 192.168.1.10:443 ssl check
        server srv05 192.168.1.11:443 ssl check
    
por 09.11.2015 / 17:47