Praktisch Geval I: Laag 4 NAT en DNAT taakverdeling begrijpen

GEPOST DOOR Zevenet | 20 september 2017

Deze praktijkcases zijn een trainingshandleiding om beter te begrijpen hoe netwerken, beveiliging en high availability-technologieën werken.

Probeer eerst de volgende oefening:

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

Twijfels en opmerkingen bij de functionaris verzendlijst!

Antwoord

De load-balancer is een netwerkapparaat dat zorgt voor de verkeersstroom tussen de client en de backends of echte servers, dus 4-stappen worden uitgevoerd om te zorgen voor de flows, packet per pakket van de verbinding op laag 4:

Load_Balancer_l4_packet_flows

1. Het pakket van de client wordt van de client naar de load balancer verzonden
2. Het pakket wordt verzonden van de load balancer naar een geselecteerde echte server of backend
3. Het pakket antwoordt van de server naar de load balancer
4. Het pakket wordt teruggestuurd naar de client als een reactie

Zevenet laag 4 (LSLB - L4xNAT-profielen) verwerken al deze pakketten met behulp van netfilter subsysteem door iptables en het netwerkrouteringssysteem.

Om deze reden, bij het configureren van een DTA modus farm en voer de iptables commando's uit kunnen we regels vinden die in de tabellen zijn gegenereerd mangrove en nat van netfilter. Meer informatie over Netfilter-tabellen hier .

In het PREROUTING ketting van de mangrove tabel toont het de regels die overeenkomen:

- Alle inkomende pakketten van alle bronnen of clients waarvan de bestemming het virtuele adres en de poort van de service is (in het voorbeeld is dit 192.168.101.250:443)
- Markeer vervolgens de pakketten volgens een bepaald algoritme, in dit geval een gewicht op basis van een waarschijnlijkheidsmethode.

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         

Nu de binnenkomende pakketten zijn gemarkeerd, in de PREROUTING ketting van de nat tabel gebruiken we de pakketmarkering om het bestemmingsadres van het pakket naar een backend of een ander te veranderen. Voor dit voorbeeld, de IP-adressen 192.168.1.10 en 192.168.1.11 zijn de echte servers.

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         

De conntrack tabel beheert de vertaling van het bestemmingsadres en in de DTA modus, wordt het retourpakket beheerd door routes omdat de load balancer de standaard gateway van de backends is.

Bij NATof SNAT zoals het algemeen bekend is, beheert de conntrack niet alleen de vertaling van het bestemmingsadres, maar ook de vertaling van het bronadres. In dit geval is het enige verschil met DTA is dat het beantwoorde pakket het niet wordt beheerd door het routeringssysteem maar door de verbindingstabel. We kunnen dus slechts 2 nieuwe regels vinden in de POSTROUTING ketting van de nat tafel om de masquerading met het virtuele IP-adres van de boerderij.

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

Verdere twijfels? Vraag naar de verzendlijst!

Delen op:

Documentatie onder de voorwaarden van de GNU-licentie voor vrije documentatie.

Was dit artikel behulpzaam?

Gerelateerde artikelen