Mesmo ao retornar, os dados devem passar pelo servidor proxy, pois é o servidor que mantém a conexão TCP do cliente e deve enviar a resposta por meio dele.
A solução sem servidor proxy trabalhando no caminho de volta existe, mas são muito mais difíceis de implementar corretamente (truques TCPIP / iptables sujos geralmente estão envolvidos).
EDIT: boa solução sem servidor proxy:
"Solução limpa" que magicamente envia TCP SYNs e descarregaria todo o resto do balanceador de carga é provavelmente um sonho, e eu não estou ciente de nada disso.
Em vez disso, existem duas abordagens comumente usadas:
- balanceamento de carga DNS : tem mais servidores em vários endereços IP publicamente acessíveis, especifica mais entradas do seu site, possivelmente faça o seu servidor DNS embaralhar a resposta para adicionar aleatoriedade. Funciona perfeitamente em muitas instalações comerciais. Prós: simples, Contras: "quebrável" e você precisa de espaço IP público.
- Balanceamento de carga somente por firewall : provavelmente há um único roteador que lida com todo o tráfego, portanto, adicionar algumas regras de firewall normalmente não prejudica o desempenho real. A coisa que você está procurando (no linux) é usar o alvo DNAT do iptables, e algum tipo de correspondência "aleatória" ou "hashing". Eu pessoalmente uso algo assim em várias instalações:
iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -m random --average 50 -j DNAT --to 192.168.0.2
iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -j DNAT --to 192.168.0.3
Substitua 11.22.33.44 pelo seu endereço IP público e 192.168.x.x pelos seus servidores. Não se esqueça de modificar os valores - média.
Prós: toda a solução se parece com um único servidor externo, o balanceamento de carga é inquebrável com DoSing em um único servidor, etc. Contras: você quer ter o roteador e todos os servidores em um ponto.