Pe AWS, atunci când creați un NLB, aveți posibilitatea de a specifica ID-ul instanței în loc de adresa IP a instanței. Acest lucru face ca NLB să păstreze IP-ul clientului.
Cu toate acestea, dacă configurez NLB pentru a viza instanțe într-o subrețea privată în care tabelul de rute include o rută implicită către un gateway NAT, cum poate fi redirecționat răspunsul prin interfața NLB și nu prin gateway-ul NAT?
Luați în considerare următoarele:
- Un VPC cu un bloc CIDR de 10.0.0.0/16;
- O subrețea publică cu un bloc CIDR de 10.0.3.0/24;
- O subrețea privată cu un bloc CIDR de 10.0.6.0/24.
Subrețeaua publică are o rută implicită către gateway-ul de internet, iar subrețeaua privată are o rută implicită către gateway-ul NAT. Gateway-ul NAT are o interfață cu IP privat 10.0.3.12, iar NLB are o interfață cu IP privat 10.0.3.18.
O instanță EC2 cu IP 10.0.6.4 este implementată în subrețeaua privată și face parte din grupul țintă NLB. Instanța are o rută implicită către routerul VPC la 10.0.6.1 în interiorul tabelului de rutare a sistemului de operare.
Să presupunem că un pachet cu IP client 22.128.22.136 este redirecționat către instanța EC2, cum va reuși instanța EC2 să trimită pachetul înapoi la 10.0.3.18 și nu către gateway-ul NAT. Tabelul de rutare a subrețelei private are o rută implicită către 10.0.3.12.
Presupun că AWS „injectează” imediat o rută către NLB pentru orice IP client atunci când un pachet ajunge pe interfața NLB. Aș dori să știu mai multe despre interior.
Cu tcpdump
pe instanța EC2, pot vedea că IP-ul clientului este păstrat:
$ sudo tcpdump -n -i eth0 gazdă 22.128.22.136 portul 80