Les écouteurs de couche 4 du Network Load Balancer (NLB) permettent aux serveurs principaux d'obtenir l'adresse IP du client. Dans la plupart des cas, il suffit d'activer la préservation de l'adresse IP client dans un groupe de serveurs. Toutefois, vous devez activer le protocole Proxy Protocol sur l'écouteur NLB et sur les serveurs principaux lorsqu'un client IPv6 accède à un service IPv4, lorsque l'instance NLB utilise un écouteur TCPSSL ou lorsque l'instance NLB est associée à un groupe de serveurs de type IP.
Méthodes pour obtenir les adresses IP des clients

Utiliser la préservation de l'adresse IP client
Lorsque vous créez un groupe de serveurs pour une instance NLB, activez Client IP Preservation. Une fois cette fonctionnalité activée, le serveur principal reçoit l'adresse IP réelle du client en tant qu'adresse IP source.
Dans certains scénarios, la préservation de l'adresse IP client n'est pas disponible et vous devez utiliser le protocole Proxy Protocol à la place. Pour plus d'informations, reportez-vous à la section Utiliser le protocole Proxy Protocol.
Utiliser le protocole Proxy Protocol
Le protocole Proxy Protocol transmet les informations de connexion originales d'un client depuis un serveur proxy vers un serveur principal.
Sans le protocole Proxy Protocol, le serveur proxy remplace l'adresse IP source et le port du client par les siens dans l'en-tête de la requête, ce qui empêche le serveur principal de voir les détails de la connexion d'origine.
Avec le protocole Proxy Protocol, le serveur proxy ajoute les informations de connexion originales dans un en-tête dédié. Le serveur principal analyse cet en-tête pour récupérer l'adresse IP source, le port source et le protocole de transport du client.
Cela permet une journalisation précise, un contrôle d'accès et une surveillance du trafic sur les serveurs principaux.
Important : le protocole Proxy Protocol doit être pris en charge à la fois par le serveur proxy (dans ce cas, l'écouteur NLB) et par le serveur principal. Si vous activez cette fonctionnalité mais que votre serveur principal ne peut pas analyser l'en-tête Proxy Protocol, l'analyse des requêtes peut échouer et affecter la disponibilité du service.
Les écouteurs NLB utilisent le protocole Proxy Protocol pour ajouter les informations de connexion originales, telles que l'adresse IP source, l'adresse IP de destination, le port source et le port de destination, à l'en-tête des données TCP ou UDP. Ce processus ne supprime ni n'écrase aucune donnée existante.
NLB prend uniquement en charge la version 2 du protocole Proxy Protocol. La version 2 du protocole Proxy Protocol prend en charge plusieurs protocoles de transport, tels que TCP et UDP. Pour plus d'informations, consultez The PROXY protocol.
Activez le protocole Proxy Protocol sur l'écouteur NLB et sur les serveurs principaux dans les scénarios suivants :
Un client IPv6 accède à un service IPv4 sur un serveur principal
L'instance NLB utilise un écouteur TCPSSL (un écouteur TCPSSL ne peut pas être associé à un groupe de serveurs dont la préservation de l'adresse IP client est activée).
L'instance NLB est associée à un groupe de serveurs de type IP (les groupes de serveurs de type IP ne prennent pas en charge la préservation de l'adresse IP client).
Procédure
Préservation de l'adresse IP client
Prérequis
Vous avez créé un groupe de serveurs NLB et y avez ajouté des serveurs principaux. Cette rubrique utilise un groupe de serveurs de type ECS comme exemple. Le protocole principal est TCP, les instances ECS sont utilisées comme serveurs principaux et l'application sur les serveurs principaux utilise le port 80. Pour plus d'informations, consultez la section Groupes de serveurs NLB.
Vous avez créé une instance NLB et y avez ajouté un écouteur. Cette rubrique utilise un écouteur TCP sur le port 80 comme exemple. Pour plus d'informations, consultez les sections Créer et gérer des instances NLB et Ajouter un écouteur TCP.
Étape 1 : Vérifier la préservation de l'adresse IP client
Connectez-vous à la console Network Load Balancer.
Dans la barre de navigation supérieure, sélectionnez la région où l'instance est déployée.
Sur la page Server Groups, recherchez le groupe de serveurs cible et cliquez sur son ID.
Sur la page des détails du groupe de serveurs, vérifiez que le champ Client IP Preservation est défini sur Enabled. S'il est défini sur Disabled, cliquez sur Modify Basic Information et activez la fonctionnalité.
Étape 2 : Vérifier la récupération de l'adresse IP client
Si NGINX est utilisé comme serveur principal, consultez les journaux NGINX pour vérifier que l'adresse IP du client est obtenue.
L'exemple suivant montre la configuration par défaut des champs de journal dans NGINX :
http {
# Default configuration
log_format main '$remote_addr- $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#...
}
Le chemin par défaut du fichier journal NGINX est /var/log/nginx/access.log.
La première adresse IP de chaque entrée de journal est l'adresse IP du client.
140.205.1xxx -- [xxx] xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
140.205.xx.29 -- [27/xxx] xxx xxx xxx xxx xxx xxx 527 xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx
140.205.xx.29 -- [2xxx] xxx xxx 304 xxx xxx xxx xxx xxx
Proxy Protocol
Prérequis
Vous avez créé un groupe de serveurs NLB et y avez ajouté des serveurs principaux. Cette rubrique utilise un groupe de serveurs de type ECS comme exemple. Le protocole principal est TCP, les instances ECS sont utilisées comme serveurs principaux et l'application sur les serveurs principaux utilise le port 80. Pour plus d'informations, consultez la section Groupes de serveurs NLB.
-
Vous avez créé une instance NLB et y avez ajouté un écouteur. Cette rubrique utilise un écouteur TCP sur le port 80 comme exemple. Pour plus d'informations, consultez la section Créer et gérer des instances NLB.
RemarqueAvant d'activer le protocole Proxy Protocol, assurez-vous que vos serveurs principaux prennent en charge la version 2 du protocole Proxy Protocol. Sinon, les nouvelles connexions échoueront.
Si plusieurs écouteurs d'une instance sont associés au même groupe de serveurs, vous devez activer le protocole Proxy Protocol pour tous.
NGINX Plus R16 ou version ultérieure et NGINX open source 1.13.11 ou version ultérieure prennent en charge la version 2 du protocole Proxy Protocol.
Étape 1 : Activer le protocole Proxy Protocol sur l'écouteur
Connectez-vous à la console Network Load Balancer.
Dans la barre de navigation supérieure, sélectionnez la région où l'instance est déployée.
Sur la page Instances, recherchez l'instance cible et cliquez sur son ID.
Sur la page Instance Details, cliquez sur l'onglet Listener, recherchez l'écouteur cible et cliquez sur l'ID de l'écouteur.
Sur la page Listener Details, vérifiez que le champ Enable Proxy Protocol est défini sur Enabled. S'il n'est pas activé, cliquez sur Modify Listener et activez la fonctionnalité.
Étape 2 : Activer le protocole Proxy Protocol sur le serveur principal
Cette section utilise CentOS 7.9 et NGINX 1.20.1 comme exemples. Votre configuration peut varier.
Connectez-vous au serveur principal et exécutez la commande
nginx -tpour trouver le chemin du fichier de configuration. Le chemin par défaut est généralement/etc/nginx/nginx.conf, mais le chemin réel peut varier.-
Modifiez et enregistrez le fichier de configuration pour activer le protocole Proxy Protocol, comme indiqué dans l'exemple suivant.
http { # Make sure to set $proxy_protocol_addr. This variable is used to record the client IP address. log_format main '$proxy_protocol_addr - $remote_addr- $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # For a listener on port 80, add the proxy_protocol parameter. server { listen 80 proxy_protocol; #... } } Exécutez la commande
sudo nginx -s reloadpour recharger le fichier de configuration NGINX.
Étape 3 : Vérifier la récupération de l'adresse IP client
Si NGINX est utilisé comme serveur principal, consultez les journaux NGINX pour vérifier que l'adresse IP du client est obtenue.
Le chemin par défaut du fichier journal NGINX est /var/log/nginx/access.log.
Dans chaque entrée de journal, l'adresse IP de la variable $proxy_protocol_addr correspond à l'adresse IP du client.
140.205.1xxx -- [xxx]
xxx
140.205.xx.29 -- [27/xxx] xxx xxx xxx
xxx
140.205.xx.29 -- [2xxx] 304 xxx xxx xxx
xxx
Référence de l'en-tête Proxy Protocol v2
Si vous n'utilisez pas NGINX, reportez-vous à la structure de l'en-tête Proxy Protocol v2 ci-dessous et à la documentation The PROXY protocol pour implémenter une analyse personnalisée. Consultez la documentation officielle de votre serveur pour plus de détails.
La figure suivante montre le format d'en-tête binaire pour Proxy Protocol v2 lors du transport d'une adresse client IPv4 :

La figure suivante montre le format d'en-tête binaire pour Proxy Protocol v2 lors du transport d'une adresse client IPv6 :

FAQ
Obtenir les adresses IP des clients dans un environnement ACK
Dans un cluster Container Service for Kubernetes (ACK), la méthode est la même, mais certains détails opérationnels diffèrent. Consultez la section FAQ sur la gestion du réseau.
Documents connexes
La méthode d'obtention de l'adresse IP du client varie selon le type d'équilibreur de charge :
Lorsque vous utilisez un écouteur de couche 4 d'une instance Classic Load Balancer (CLB), vous pouvez obtenir l'adresse IP du client directement ou en activant le protocole Proxy Protocol. Pour plus d'informations, consultez la section Obtenir l'adresse IP du client via un écouteur de couche 4 d'une instance CLB.
Lorsque vous utilisez un écouteur de couche 7 d'une instance CLB, vous pouvez obtenir l'adresse IP du client à partir de l'en-tête X-Forwarded-For. Pour plus d'informations, consultez la section Obtenir l'adresse IP du client via un écouteur de couche 7 d'une instance CLB.
Lorsque vous utilisez une instance Application Load Balancer (ALB), vous pouvez obtenir l'adresse IP du client à partir de l'en-tête X-Forwarded-For. Pour plus d'informations, consultez la section Obtenir l'adresse IP du client sur un serveur principal via une instance ALB.