Estou tentando configurar um laboratório de balanceamento de carga para HAproxy no modo de braço único (quando o IP front-end real e os servidores back-end residem na mesma sub-rede, enquanto os clientes reais são sempre remotos). Outra solicitação é tornar os IPs de origem do cliente visíveis para os nós de back-end. À medida que balanceamos a carga do aplicativo baseado em TCP personalizado, parece que a opção 'source 0.0.0.0 usersrc clientip' é a escolha certa aqui. Além disso, configurei back-ends para ter gateways padrão apontando para o endereço IP do HAproxy.
Embora coisas estranhas aconteçam quando eu habilito esta opção de back-end: vejo que a conexão com o VIP do front-end foi feita corretamente e o handshake de 3 vias foi formado. Mas quando o servidor HAproxy está tentando construir uma segunda sessão para alcançar servidores back-end com IP falsificado de um cliente, vejo exatamente isso acontecendo:
- O proxy está enviando SYN com o endereço IP do cliente falsificado para um dos backends;
- O backend normalmente responde com o pacote SYN-ACK;
- O proxy NÃO está enviando o último ACK, apenas envia pacotes SYN cegamente após o tempo limite com o mesmo resultado;
- Em um proxy, vejo que esta conexão está marcada como SYN_SENT na saída do netstat, então parece que o servidor proxy não aceita o pacote SYN-ACK por algum motivo.
Qualquer elogio seria apreciado.