Caso pratico I: Comprensione del livello 4 NAT e del bilanciamento del carico DNAT

PUBBLICATO DA Zevenet | 20 settembre, 2017

Questi casi pratici sono una guida alla formazione per comprendere meglio il funzionamento delle tecnologie di rete, sicurezza e alta disponibilità.

Innanzitutto, prova il seguente esercizio:

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

Dubbi e commenti nel funzionario mailing list!

Risposta

Il bilanciamento del carico è un dispositivo di rete incaricato di garantire il flusso di traffico tra il client e i backend o i real server, quindi i passaggi di 4 saranno curati al fine di garantire i flussi, pacchetto per pacchetto della connessione a livello 4:

Load_Balancer_l4_packet_flows

1. Il pacchetto dal client viene inviato dal client al servizio di bilanciamento del carico
2. Il pacchetto viene inviato dal servizio di bilanciamento del carico a un server o back-end reale selezionato
3. Il pacchetto risponde dal server al servizio di bilanciamento del carico
4. Il pacchetto viene inviato al client come risposta

Zevenet il livello 4 (profili LSLB - L4xNAT) gestisce tutti questi pacchetti utilizzando netfilter sottosistema attraverso iptables e il sistema di routing di rete.

Per questo motivo, quando si configura a DTA mode farm ed esegui i comandi iptables possiamo trovare le regole generate nelle tabelle mancante e nat di netfilter. Ulteriori informazioni su Tabelle Netfilter qui .

Nell' PREROUTING catena del mancante tabella vengono mostrate le regole che corrispondono:

- Tutti i pacchetti in arrivo da tutte le origini o client la cui destinazione è l'indirizzo virtuale e la porta del servizio (nell'esempio sarà 192.168.101.250:443)
- Quindi contrassegnare i pacchetti secondo un determinato algoritmo, in questo caso è un peso basato su un metodo di probabilità.

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         

Ora che i pacchetti in entrata sono contrassegnati, nel file PREROUTING catena del nat tabella usiamo il marchio di pacchetto per cambiare l'indirizzo di destinazione del pacchetto su un back-end o altro. Per questo esempio, gli indirizzi IP 192.168.1.10 e 192.168.1.11 sono i veri server.

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         

I conntrack tabella gestisce la traduzione degli indirizzi di destinazione e nel DTA modalità, il pacchetto di ritorno è gestito da rotte poiché il bilanciamento del carico sarà il gateway predefinito dei backend.

Nel caso di NAT, o SNAT come è comunemente noto, il conntrack gestisce non solo la traduzione dell'indirizzo di destinazione ma anche la traduzione dell'indirizzo di origine. In questo caso, l'unica differenza con DTA è che il pacchetto risposto non è gestito dal sistema di routing ma dalla tabella conntrack. Quindi possiamo trovare solo 2 nuove regole nel file POSTROUTING catena della tabella nat per eseguire il Il mascheramento con l'indirizzo IP virtuale della 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

Ulteriori dubbi? Chiedi al mailing list!

Condividere su:

Documentazione sotto i termini della GNU Free Documentation License.

questo articolo è stato utile?

Articoli Correlati