Enviar o cabeçalho do protocolo PROXY do HAProxy

1

Eu provavelmente me perdi na grande quantidade de documentação sobre este assunto, mas estou tentando configurar meu processo HAProxy para enviar o cabeçalho do protocolo PROXY conforme descrito em link . Isso é porque eu estou tendo que escrever suporte para o protocolo PROXY em um servidor C ++ (para que ele tenha acesso ao cliente IP / porta) e eu quero testar meu código está funcionando corretamente com a análise do cabeçalho PROXY.

Aqui está o meu arquivo de configuração mínimo:

global
   maxconn 4096

defaults
   log   global
   mode   http
   retries   3
   option redispatch
   maxconn   2000
   timeout connect 5000
   timeout client  50000
   timeout server  50000

frontend TestServerTest
    bind 10.6.186.24:54781
    mode tcp
    default_backend TestServernodes

backend TestServernodes
    mode tcp
    # Note there is no 'check' after the below line unlike the others as we don't want to send the
    # healthcheck ("OPTIONS / HTTP/1.0"...) string to the TestServer as it doesn't understand it!
    server TestServer01 10.6.186.24:48080

O que eu estou descobrindo é que quando eu inicio o HAProxy e me conecto ao 54781, os primeiros dados que o TestServer em 48080 recebe são os dados que são enviados do meu cliente; não é não o cabeçalho PROXY descrito no link que postei.

Alguém pode me dizer o que estou perdendo na minha configuração que está impedindo que o cabeçalho PROXY seja enviado para o meu servidor de back-end?

    
por Wad 22.03.2017 / 17:42

2 respostas

2

Após postar na lista de e-mails HAProxy ([email protected]), recebi a resposta de que preciso adicionar send-proxy ou send-proxy-v2 às minhas definições de server de back-end.

Meu arquivo de configuração atualizado tem a linha:

server TestServer01 10.6.186.24:48080 send-proxy

... que envia a versão 1 do protocolo PROXY.

Para enviar a versão 2, mude para

server TestServer01 10.6.186.24:48080 send-proxy-v2

    
por 23.03.2017 / 20:51
1

De acordo com o documento vinculado, a configuração completa requer alguns componentes a serem configurados.

Se você tiver uma instância haproxy na frente dos seus back-ends reais, talvez seja necessário aplicar accept-proxy :

the listening sockets accept the protocol when the "accept-proxy" setting is passed to the "bind" keyword. Connections accepted on such listeners will behave just as if the source really was the one advertised in the protocol. This is true for logging, ACLs, content filtering, transparent proxying, etc...

Esta é a parte que você descobriu em sua resposta, os servidores de back-end precisam ser configurados com o send-proxy:

the protocol may be used to connect to servers if the "send-proxy" setting is present on the "server" line. It is enabled on a per-server basis, so it is possible to have it enabled for remote servers only and still have local ones behave differently. If the incoming connection was accepted with the "accept-proxy", then the relayed information is the one advertised in this connection's PROXY line.

E isso é o máximo que pude encontrar na v2:

Haproxy 1.5 also implements version 2 of the PROXY protocol as a sender. In addition, a TLV with limited, optional, SSL information has been added.

    
por 27.03.2017 / 08:20