Os listeners de camada 4 do Network Load Balancer (NLB) permitem que os servidores de backend obtenham o endereço IP do cliente. Na maioria dos casos, basta ativar a preservação de IP do cliente em um grupo de servidores. No entanto, ative o Proxy Protocol no listener do NLB e nos servidores de backend quando um cliente IPv6 acessar um serviço IPv4, a instância NLB utilizar um listener TCPSSL ou a instância NLB estiver associada a um grupo de servidores do tipo IP.
Métodos para obter endereços IP do cliente

Usar preservação de IP do cliente
Ao criar um grupo de servidores para uma instância NLB, ative a Client IP Preservation. Com esse recurso ativado, o servidor de backend recebe o endereço IP real do cliente como endereço IP de origem.
Em alguns cenários, a preservação de IP do cliente não está disponível e é necessário usar o Proxy Protocol. Para mais informações, consulte Usar Proxy Protocol.
Usar Proxy Protocol
O Proxy Protocol transmite as informações originais de conexão do cliente de um servidor proxy para um servidor de backend.
Sem o Proxy Protocol, o servidor proxy substitui o endereço IP de origem e a porta do cliente pelos seus próprios no cabeçalho da requisição. Isso impede que o servidor de backend visualize os detalhes originais da conexão.
Com o Proxy Protocol, o servidor proxy adiciona as informações originais de conexão em um cabeçalho dedicado. O servidor de backend analisa esse cabeçalho para recuperar o endereço IP de origem, a porta de origem e o protocolo de transporte do cliente.
Esse mecanismo possibilita logs precisos, controle de acesso e monitoramento de tráfego nos servidores de backend.
Importante: Tanto o servidor proxy (neste caso, o listener do NLB) quanto o servidor de backend devem oferecer suporte ao Proxy Protocol. Se você ativar esse recurso e o servidor de backend não conseguir analisar o cabeçalho do Proxy Protocol, a análise da requisição poderá falhar e afetar a disponibilidade do serviço.
Os listeners do NLB usam o Proxy Protocol para adicionar informações originais de conexão, como endereço IP de origem, endereço IP de destino, porta de origem e porta de destino, ao cabeçalho de dados TCP ou UDP. Esse processo não descarta nem sobrescreve dados existentes.
O NLB oferece suporte apenas ao Proxy Protocol v2. Essa versão suporta vários protocolos de transporte, como TCP e UDP. Para mais informações, consulte The PROXY protocol.
Ative o Proxy Protocol no listener do NLB e nos servidores de backend nos seguintes cenários:
Um cliente IPv6 acessa um serviço IPv4 em um servidor de backend
A instância NLB usa um listener TCPSSL (um listener TCPSSL não pode ser associado a um grupo de servidores com preservação de IP do cliente ativada).
A instância NLB está associada a um grupo de servidores do tipo IP (grupos de servidores do tipo IP não oferecem suporte à preservação de IP do cliente).
Procedimento
Preservação de IP do cliente
Pré-requisitos
Crie um grupo de servidores NLB e adicione servidores de backend a ele. Este tópico usa um grupo de servidores do tipo ECS como exemplo. O protocolo de backend é TCP, instâncias ECS são usadas como servidores de backend e a aplicação nos servidores de backend utiliza a porta 80. Para mais informações, consulte Grupos de servidores NLB.
Crie uma instância NLB e adicione um listener a ela. Este tópico usa um listener TCP na porta 80 como exemplo. Para mais informações, consulte Criar e gerenciar instâncias NLB e Adicionar um listener TCP.
Etapa 1: Verificar a preservação de IP do cliente
Faça login no console do Network Load Balancer.
Na barra de navegação superior, selecione a região onde a instância está implantada.
Na página Server Groups, localize o grupo de servidores desejado e clique em seu ID.
Na página de detalhes do grupo de servidores, verifique se o campo Client IP Preservation está definido como Enabled. Caso esteja como Disabled, clique em Modify Basic Information e ative o recurso.
Etapa 2: Validar a obtenção do IP do cliente
Se o NGINX for usado como servidor de backend, verifique os logs do NGINX para confirmar a obtenção do endereço IP do cliente.
O exemplo a seguir mostra a configuração padrão de campos de log no 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"';
#...
}
O caminho padrão do arquivo de log do NGINX é /var/log/nginx/access.log.
O primeiro endereço IP em cada entrada de log corresponde ao endereço IP do cliente.
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é-requisitos
Crie um grupo de servidores NLB e adicione servidores de backend a ele. Este tópico usa um grupo de servidores do tipo ECS como exemplo. O protocolo de backend é TCP, instâncias ECS são usadas como servidores de backend e a aplicação nos servidores de backend utiliza a porta 80. Para mais informações, consulte Grupos de servidores NLB.
-
Crie uma instância NLB e adicione um listener a ela. Este tópico usa um listener TCP na porta 80 como exemplo. Para mais informações, consulte Criar e gerenciar instâncias NLB.
NotaAntes de ativar o Proxy Protocol, certifique-se de que seus servidores de backend ofereçam suporte ao Proxy Protocol v2. Caso contrário, novas conexões falharão.
Se vários listeners de uma instância estiverem associados ao mesmo grupo de servidores, ative o Proxy Protocol para todos eles.
O NGINX Plus R16 ou posterior e o NGINX open source 1.13.11 ou posterior oferecem suporte ao Proxy Protocol v2.
Etapa 1: Ativar o Proxy Protocol no listener
Faça login no console do Network Load Balancer.
Na barra de navegação superior, selecione a região onde a instância está implantada.
Na página Instances, localize a instância desejada e clique em seu ID.
Na página Instance Details, clique na aba Listener, localize o listener desejado e clique no ID do listener.
Na página Listener Details, verifique se o campo Enable Proxy Protocol está definido como Enabled. Se não estiver ativado, clique em Modify Listener e ative o recurso.
Etapa 2: Ativar o Proxy Protocol no servidor de backend
Esta seção utiliza CentOS 7.9 e NGINX 1.20.1 como exemplo. Sua configuração pode variar.
Faça login no servidor de backend e execute o comando
nginx -tpara localizar o caminho do arquivo de configuração. O caminho padrão geralmente é/etc/nginx/nginx.conf, mas o caminho real pode variar.-
Modifique e salve o arquivo de configuração para ativar o Proxy Protocol, conforme o exemplo a seguir.
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; #... } } Execute o comando
sudo nginx -s reloadpara recarregar o arquivo de configuração do NGINX.
Etapa 3: Validar a obtenção do IP do cliente
Se o NGINX for usado como servidor de backend, verifique os logs do NGINX para confirmar a obtenção do endereço IP do cliente.
O caminho padrão do arquivo de log do NGINX é /var/log/nginx/access.log.
Em cada entrada de log, o endereço IP correspondente à variável $proxy_protocol_addr é o endereço IP do cliente.
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
Referência do cabeçalho Proxy Protocol v2
Caso não utilize o NGINX, consulte a estrutura do cabeçalho Proxy Protocol v2 abaixo e The PROXY protocol para implementar uma análise personalizada. Consulte a documentação oficial do seu servidor para obter detalhes.
A figura a seguir mostra o formato binário do cabeçalho Proxy Protocol v2 ao transportar um endereço de cliente IPv4:

A figura a seguir mostra o formato binário do cabeçalho Proxy Protocol v2 ao transportar um endereço de cliente IPv6:

Perguntas frequentes
Obtenção de IPs de cliente em um ambiente ACK
Em um cluster Container Service for Kubernetes (ACK), o método é o mesmo, mas alguns detalhes operacionais diferem. Consulte Perguntas frequentes sobre gerenciamento de rede.
Documentos relacionados
O método para obter o endereço IP do cliente varia conforme o tipo de balanceador de carga:
Ao utilizar um listener de camada 4 de uma instância Classic Load Balancer (CLB), obtenha o endereço IP do cliente diretamente ou ativando o Proxy Protocol. Para mais informações, consulte Obter o endereço IP do cliente por meio de um listener de camada 4 de uma instância CLB.
Para listeners de camada 7 de uma instância CLB, o endereço IP do cliente pode ser obtido no cabeçalho X-Forwarded-For. Para mais informações, consulte Obter o endereço IP do cliente por meio de um listener de camada 7 de uma instância CLB.
No caso de uma instância Application Load Balancer (ALB), recupere o endereço IP do cliente a partir do cabeçalho X-Forwarded-For. Para mais informações, consulte Obter o endereço IP do cliente em um servidor de backend por meio de uma instância ALB.