4 votes

Envoyer l'en-tête du protocole PROXY depuis HAProxy

Je me suis probablement perdu dans la masse de documentation sur ce sujet, mais j'essaie de configurer mon processus HAProxy pour qu'il envoie l'en-tête de protocole PROXY comme décrit à l'adresse suivante http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt . En effet, je dois écrire le support du protocole PROXY dans un serveur C++ (afin qu'il ait accès à l'IP/port du client) et je veux tester que mon code fonctionne correctement avec l'analyse de l'en-tête PROXY.

Voici mon fichier de configuration minimal :

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

Ce que je constate, c'est que lorsque je lance HAProxy et que je me connecte au 54781, les premières données que le TestServer au 48080 reçoit sont les données envoyées par mon client, à savoir pas l'en-tête PROXY décrit au lien que j'ai posté.

Quelqu'un peut-il me dire ce qui manque dans ma configuration et qui empêche l'envoi de l'en-tête PROXY à mon serveur dorsal ?

10voto

Wad Points 211

Après avoir posté un message sur la liste de diffusion HAProxy (haproxy@formilux.org), j'ai reçu la réponse que je devais ajouter soit send-proxy ou send-proxy-v2 à mon backend server définitions.

Mon fichier de configuration mis à jour contient la ligne :

serveur TestServer01 10.6.186.24:48080 send-proxy

...qui envoie la version 1 du protocole PROXY.

Pour envoyer la version 2, changez ceci en

serveur TestServer01 10.6.186.24:48080 send-proxy-v2

2voto

iwaseatenbyagrue Points 3533

D'après le document auquel vous avez accédé, la configuration complète nécessite la configuration de quelques composants.

Si vous avez une instance haproxy en face de vos backends réels, vous pouvez avoir besoin d'appliquer accept-proxy :

les sockets d'écoute acceptent le protocole lorsque le paramètre "accept-proxy" est activé. est passé au mot-clé "bind". Les connexions acceptées sur de tels récepteurs se comporteront comme si la source était réellement celle annoncée dans le protocole. protocole. Ceci est vrai pour la journalisation, les ACLs, le filtrage de contenu, le transparent proxys transparents, etc...

C'est la partie que vous avez compris dans votre réponse, les serveurs backend doivent être configurés avec send-proxy :

le protocole peut être utilisé pour se connecter aux serveurs si le paramètre "send-proxy" est présent sur la ligne "server". Il est activé pour chaque serveur, il est donc possible de l'activer pour les serveurs distants uniquement et de faire en sorte que les serveurs locaux se comportent différemment. locaux se comportent différemment. Si la connexion entrante a été acceptée avec le paramètre "accept-proxy", alors les informations relayées sont celles annoncées dans la ligne PROXY de cette connexion.

Et c'est tout ce que j'ai pu trouver sur la v2 :

Haproxy 1.5 met également en œuvre la version 2 du protocole PROXY en tant qu'expéditeur. En outre, une TLV contenant des informations SSL limitées et facultatives a été ajoutée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X