Caso prático I: Noções básicas sobre o balanceamento de carga da camada 4 NAT e DNAT

PUBLICADO EM 20 de setembro de 2017

Esses casos práticos são um guia de treinamento para entender melhor como funcionam as tecnologias de rede, segurança e alta disponibilidade.

Em primeiro lugar, tente o seguinte exercício:

Step 1. Install Zevenet CE from GIT, SF or Docker
            https://www.zevenet.com/community

Step 2. Create L4xNAT farm with 2 backends and NAT or DNAT mode
            https://www.zevenet.com/knowledge-base/

Step 3. Execute in a console of Zevenet CE and try to understand the result of:
            root# iptables -t mangle -n -L
            root# iptables -t nat -n -L

Dúvidas e comentários no funcionário lista de discussão!

Resposta

O balanceador de carga é um dispositivo de rede encarregado de garantir o fluxo de tráfego entre o cliente e os backends ou servidores reais, para que as etapas 4 sejam tomadas de forma a garantir os fluxos, pacote por pacote de conexão na camada 4:

Load_Balancer_l4_packet_flows

1. O pacote do cliente é enviado do cliente para o balanceador de carga
2. O pacote é enviado do balanceador de carga para um servidor real ou back-end selecionado
3. O pacote responde do servidor ao balanceador de carga
4. O pacote é enviado de volta ao cliente como resposta

Zevenet camada 4 (perfis LSLB - L4xNAT) lidar com todos esses pacotes usando netfilter subsistema através iptables e o sistema de roteamento de rede.

Por esse motivo, ao configurar um DTA modo farm e executar os comandos iptables podemos encontrar regras geradas nas tabelas mangle e nat do netfilter. Mais informações sobre Tabelas do Netfilter aqui .

Na série PREROUTING cadeia do mangle tabela mostra as regras que correspondem:

- Todos os pacotes de entrada de todas as fontes ou clientes cujo destino é o endereço virtual e a porta do serviço (no exemplo será 192.168.101.250:443)
- Em seguida, marque os pacotes de acordo com um determinado algoritmo, neste caso é um peso baseado em um método de probabilidade.

root@zevenet:~# iptables -L -t mangle -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
CONNMARK   all  --  0.0.0.0/0            0.0.0.0/0            CONNMARK restore
MARK       tcp  --  0.0.0.0/0            192.168.101.250      statistic mode random probability 1.00000000000 multiport dports 443 /*  FARM_app_1_  */ MARK set 0x20d
MARK       tcp  --  0.0.0.0/0            192.168.101.250      statistic mode random probability 0.50000000000 multiport dports 443 /*  FARM_app_0_  */ MARK set 0x20c
CONNMARK   all  --  0.0.0.0/0            0.0.0.0/0            state NEW CONNMARK save

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Agora que os pacotes de entrada estão marcados, no PREROUTING cadeia do nat tabela usamos a marca de pacotes para alterar o endereço de destino do pacote para um backend ou outro. Para este exemplo, os endereços IP 192.168.1.10 e 192.168.1.11 são os servidores reais.

root@zevenet:~# iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20c /*  FARM_app_0_  */ to:192.168.1.10:443
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20d /*  FARM_app_1_  */ to:192.168.1.11:443

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

A conntrack tabela gerencia a tradução do endereço de destino e no DTA mode, o pacote de retorno é gerenciado por rotas, pois o balanceador de carga será o gateway padrão dos backends.

No caso de NATou SNAT como é comumente conhecido, o conntrack gerencia não apenas a tradução do endereço de destino, mas também a tradução do endereço de origem. Neste caso, a única diferença com DTA é que o pacote respondido não é gerenciado pelo sistema de roteamento, mas pela tabela conntrack. Portanto, podemos encontrar apenas 2 novas regras no POSTRODUÇÃO cadeia da tabela nat, a fim de realizar o MASQUERADING com o endereço IP virtual do farm.

root@zevenet:~# iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20c /*  FARM_app_0_  */ to:192.168.1.10:443
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20d /*  FARM_app_1_  */ to:192.168.1.11:443

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20c /*  FARM_app_0_  */ to:192.168.101.250
SNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            mark match 0x20d /*  FARM_app_1_  */ to:192.168.101.250

Mais dúvidas? Pergunte ao lista de discussão!

Compartilhar no:

Documentação sob os termos da Licença de Documentação Livre GNU.

Esse artigo foi útil?

Artigos Relacionados