Disse praktiske tilfælde er en træningsguide til bedre at forstå, hvordan netværk, sikkerhed og høj tilgængelighed teknologier fungerer.
For det første, prøv følgende øvelse:
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
Tvivler og kommentarer i den officielle mailingliste!
Svar
Belastningsbalanceren er en netværksenhed med ansvar for at sikre trafikstrømmen mellem klienten og backendene eller de egentlige servere, så 4-trin vil blive taget omhu for at sikre strømmen, pakken pr. Pakke af forbindelsen ved lag 4:
1. Pakken fra klienten sendes fra klienten til belastningsbalanceren
2. Pakken sendes fra lastbalanceren til en valgt reel server eller backend
3. Pakken svarer fra serveren til belastningsbalanceren
4. Pakken sendes tilbage til klienten som svar
Zevenet lag 4 (LSLB - L4xNAT-profiler) håndterer alle disse pakker ved hjælp af netfilter delsystem gennem iptables og netværks routing system.
Af denne grund, når du konfigurerer en DNAT mode farm og udfør kommandoerne iptables vi kan finde regler genereret i tabellerne mangle NAT af netfilter. Yderligere informationer om Netfilter tabeller her .
I boksen PREROUTING kæde af mangle tabel vises reglerne der matcher:
- Alle indkommende pakker fra alle kilder eller klienter, hvilken destination er den virtuelle adresse og port for tjenesten (i eksemplet vil være 192.168.101.250:443)
- Marker derefter pakkerne efter en bestemt algoritme, i dette tilfælde er en vægt baseret på en sandsynlighedsmetode.
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 hvor de indkommende pakker er markeret, i PREROUTING kæde af NAT bord bruger vi pakke mærket for at ændre destinationsadressen til pakken til en backend eller en anden. For dette eksempel adresserer IP'en 192.168.1.10 192.168.1.11 er de rigtige servere.
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
conntrack tabellen styrer destinationsadressens oversættelse og i DNAT mode, bliver returpakken styret af ruter, da belastningsbalancen vil være standardgatewayen til bagsiden.
I tilfælde af NAT eller SNAT som det almindeligt er kendt, styrer konntracket ikke kun destinationsadresseoversættelsen, men også oversættelsen af kildeadressen. I dette tilfælde er den eneste forskel med DNAT er, at den svarede pakke ikke styres af routing-systemet, men af conntrack-tabellen. Så vi kan kun finde 2 nye regler i POSTROUTING kæden af natbordet for at udføre maskeret med den virtuelle IP-adresse på gården.
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
Yderligere tvivl? Spørg til mailingliste!