Estou testando o servidor proxy com a combinação de balanceamento de carga Nginx TCP e proxy HTTPS baseado em SNI. Na minha caixa debian de teste eu tenho seguintes interfaces configuradas
eth0 192.168.1.10 - proxy
eth0:1 192.168.1.11 - proxy
eth0:2 192.168.1.12 - proxy
eth0:3 192.168.1.13 - proxy
eth0:4 192.168.1.14 - proxy
eth0:5 192.168.1.15 - Nginx TCP load-balance listening
Eu implantei o proxy HTTPS baseado em SNI que está escutando em 192.168.1.10-14 e configurei o balanceador de carga nginx TCP na mesma máquina como segue
upstream backend_80 {
least_conn;
server 192.168.1.10:80;
server 192.168.1.11:80;
server 192.168.1.12:80;
server 192.168.1.13:80;
server 192.168.1.14:80;
}
upstream backend_443 {
least_conn;
server 192.168.1.10:443
server 192.168.1.11:443;
server 192.168.1.12:443;
server 192.168.1.13:443;
server 192.168.1.14:443;
}
server {
listen 192.168.1.15:80;
proxy_pass backend_80;
proxy_timeout 3s;
proxy_connect_timeout 2s;
}
server {
listen 192.168.1.15:443;
proxy_pass backend_443;
proxy_timeout 3s;
proxy_connect_timeout 2s;
}
depois, encaminha todo o tráfego da web para 192.168.1.15 e consigo navegar na web sem problemas. quando eu verificar o log de proxy https baseado em SNI eu posso vê-lo recebendo o pedido do intervalo de ips 192.168.11.10-14
Mas eu preciso ter certeza de que esses pacotes vão para o mundo externo da mesma forma que este método. Em vez de usar um IP, eu preciso desse proxy para processar todos os IPs disponíveis no servidor. para verificar isso eu corro tcpdump no meu gateway que é 192.168.1.1 e checl a porta 80 e porta 443. Eu só posso ver a solicitação saindo diretamente de apenas uma interface 192.168.1.10 (que é a primeira interface) e todas as outras interfaces são não use. mas os logs do proxy mostram claramente que o nginx se conectou a todos os IPs disponíveis. Mas eu não tenho idéia de como a conexão só sai de um único endereço IP.
Então eu tentei a MASQUERADE. Eu adiciono regra assim
iptables -t nat -I POSTROUING -j MASQUERADE
continua o mesmo resultado. então eu adiciono o SNAT ao intervalo de ip que eu preciso expor para fora do mundo como este
iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.10-192.168.1.14
iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp --dport 443-j SNAT --to-source 192.168.1.10-192.168.1.14
O resultado do tcpdump é o mesmo depois disso também. Meu roteador mostrando ele recebendo todo o pedido de 192.168.1.10 e não de outro ip.
O que eu preciso fazer é balanceamento de carga efetivo + máscara de ip dentro do servidor único. Necessidade de obter toda a solicitação de uma interface e solicitação de balanceamento de carga para vários ouvintes de proxy e sair do servidor pelas mesmas interfaces diferentes
Como posso conseguir isso por meio do módulo de balanceamento de carga nginx? ou existe alguma outra maneira de fazer configuração semelhante
Tags proxy nginx iptables load-balancing tcp