Usando o nginx para mascarar o endereço IP das conexões de saída

1

Temos um requisito comercial para canalizar todas as conexões de saída de vários servidores de processamento por meio de um único endereço IP.

Nossa configuração é a seguinte:

Temos um servidor nginx que funciona como um balanceador de carga para solicitações http de entrada. Em seguida, temos vários servidores da web, que se conectam a servidores de processamento que, por sua vez, se conectam aos bancos de dados de nossos clientes.

Cliente - > Loadbalancer - > Servidores da Web - > Servidores de processo - > Banco de Dados

Cliente < - Loadbalancer < - Servidores da Web < - Servidores de processos < - Banco de dados

Atualmente, fornecemos aos nossos clientes uma lista de endereços IP que eles devem adicionar à sua lista de permissões de banco de dados. No entanto, à medida que dimensionamos essa lista de permissões, ela se tornará mais longa e, por sua vez, nossos clientes precisarão atualizar novamente sua lista de permissões, respectivamente.

Configuração desejada

Para contornar isso, gostaríamos de canalizar todas as conexões de saída através de outro servidor nginx, que iria mascarar os endereços IP de nossos servidores de processamento. Por sua vez, agora teríamos apenas um endereço IP que nossos clientes colocariam na lista de permissões.

Cliente - > Loadbalancer - > Servidores da Web - > Servidores de processo - > Mascaramento de IP - > Banco de Dados

Cliente < - Loadbalancer < - Servidores da Web < - Servidores de processo < - IP Masking < - Banco de dados

Isso é possível somente com o nginx? Em caso afirmativo, quais etapas precisaríamos adotar para alcançar isso?

    
por Glen 20.02.2018 / 16:50

2 respostas

1

Outra solução possível é usar o NAT. Neste caso, o servidor de mascaramento será o seu roteador com tradução de endereço de rede configurada. Nesse caso, você não precisa alterar o IP do banco de dados do cliente na configuração node.js, mas deve alterar a rede, possivelmente, rotear a configuração em todos os servidores de processos e ter um gateway com NAT configurado

    
por 21.02.2018 / 23:47
1

O que você pergunta é possível com o nginx a partir da versão 1.9.0. Eles adicionaram suporte ao proxy tcp (não http). A partir do 1.9.13 eles também adicionaram o proxy udp. Leia o link e link

A parte complicada seria diferenciar conexões de entrada (nginx de máscara de IP) para decidir a qual banco de dados se conectar. No proxy HTTP, você pode usar o nome do host. No proxy tcp, você deve ouvir em portas diferentes ou em endereços IP diferentes. nginx.conf:

worker_processes  4;

error_log  /var/log/nginx/error.log;

events { worker_connections  1024; }
stream {
        server {
           listen 3307;
           proxy_pass client2.db.dev:3306;
           proxy_buffer_size 16k;
        }
        server {
           listen 3308;
           proxy_pass client1.db.dev:3306;
           proxy_buffer_size 16k;
        }
}
    
por 21.02.2018 / 04:04

Tags