Routing w VPC, czyli kto komu przesyła pakiety

W poprzedniej lekcji poznałeś VPC, subnety i Internet Gateway. Ale skąd Twoje zasoby wiedzą, dokąd wysłać ruch sieciowy? Odpowiedź to Route Tables (tablice routingu).

Route Table to zestaw reguł (tras), które decydują, gdzie kierowany jest ruch wychodzący z subnetu. Każdy subnet w VPC musi być powiązany z dokładnie jedną Route Table. Jeśli nie przypiszesz mu żadnej, użyje domyślnej Route Table VPC (Main Route Table).

Jak działają Route Tables?

Route Table zawiera listę tras. Każda trasa składa się z dwóch elementów:

  • Destination - zakres adresów IP (CIDR), do którego chcesz kierować ruch
  • Target - gdzie ten ruch ma trafić (np. Internet Gateway, NAT Gateway, VPC Peering)

Przykładowa Route Table publicznego subnetu:

DestinationTargetOpis
10.0.0.0/16localRuch wewnątrz VPC, zawsze obecna
0.0.0.0/0igw-abc123Cały pozostały ruch → Internet Gateway

Trasa local jest automatycznie dodawana do każdej Route Table i nie można jej usunąć. Umożliwia komunikację między wszystkimi subnetami wewnątrz VPC.

💡 Zasada dopasowania
AWS wybiera trasę z najdłuższym prefixem (most specific match). Jeśli pakiet leci do 10.0.1.5, a masz trasy 10.0.0.0/16 (local) i 0.0.0.0/0 (IGW), wygra trasa /16, bo jest bardziej szczegółowa. Pakiet zostanie w VPC.

NAT Gateway - internet dla prywatnych subnetów

Instancje w prywatnych subnetach nie mają publicznych IP i nie mają trasy do Internet Gateway. Ale co, jeśli potrzebują pobrać aktualizacje systemu, ściągnąć pakiety z npm albo wysłać logi do zewnętrznego serwisu?

Tutaj wchodzi NAT Gateway (Network Address Translation). NAT Gateway pozwala instancjom w prywatnym subnecie inicjować połączenia wychodzące do internetu, ale blokuje połączenia przychodzące z internetu. To jak drzwi, które otwierają się tylko w jedną stronę.

Jak to działa?

  1. NAT Gateway jest deployowany w public subnecie (bo sam potrzebuje dostępu do internetu)
  2. Otrzymuje Elastic IP (stały publiczny adres IP)
  3. Route Table prywatnego subnetu kieruje ruch 0.0.0.0/0 do NAT Gateway
  4. NAT Gateway tłumaczy prywatny IP instancji na swój publiczny IP i przekazuje ruch do IGW
  5. Odpowiedź wraca tą samą drogą
🏢 Scenariusz: Aktualizacja serwera w prywatnym subnecie

Masz serwer aplikacji EC2 w prywatnym subnecie (10.0.10.0/24). Musisz zainstalować pakiety z internetu. Oto ścieżka pakietu:

  1. EC2 (10.0.10.15) wysyła request do registry.npmjs.org
  2. Route Table prywatnego subnetu: 0.0.0.0/0 → nat-gw-xyz
  3. NAT Gateway (w public subnecie) zamienia adres źródłowy na swój Elastic IP (np. 54.93.x.x)
  4. NAT Gateway wysyła pakiet przez Internet Gateway do internetu
  5. Odpowiedź wraca do NAT Gateway → NAT tłumaczy z powrotem na 10.0.10.15 → pakiet trafia do EC2

Efekt: instancja w prywatnym subnecie może pobrać pakiety, ale nikt z internetu nie może się do niej bezpośrednio połączyć. Idealne do bezpieczeństwa!

NAT Gateway vs NAT Instance

Historycznie, zanim AWS wprowadził zarządzaną usługę NAT Gateway, ludzie stawiali zwykłe instancje EC2 skonfigurowane jako NAT (NAT Instance). Dziś NAT Instance to raczej ciekawostka egzaminacyjna niż realna praktyka.

⚖️ NAT Gateway vs NAT Instance
CechaNAT GatewayNAT Instance
ZarządzanieFully managed przez AWSTy zarządzasz (EC2)
DostępnośćHA w ramach AZMusisz sam konfigurować HA
WydajnośćDo 100 GbpsZależy od typu instancji
Security GroupsNie można przypisaćMożna przypisać SG
Bastion HostNie można użyć jako bastionMożna użyć jako bastion
KosztOpłata za godzinę + transferKoszt EC2 + transfer
Source/Dest CheckAutomatycznie wyłączonyMusisz ręcznie wyłączyć
⚠️ EXAM ALERT
Na egzaminie Cloud Practitioner najczęściej pytają o NAT Gateway (managed) jako zalecaną opcję. Pamiętaj: NAT Gateway musi być w public subnecie i potrzebuje Elastic IP. Dla High Availability wdróż NAT Gateway w każdej AZ osobno!

Elastic IP (EIP)

Elastic IP to statyczny, publiczny adres IPv4, który możesz przydzielić do swojego konta AWS i przypisać do instancji EC2 lub NAT Gateway. W przeciwieństwie do standardowego publicznego IP (który zmienia się po restarcie instancji), Elastic IP jest stały i nie zmienia się, dopóki go nie zwolnisz.

Kluczowe fakty o Elastic IP:

  • Jest bezpłatny, dopóki jest przypisany do działającej instancji
  • AWS nalicza opłatę za Elastic IP, który NIE jest do niczego przypisany (walka z marnowaniem publicznych IPv4)
  • Domyślny limit to 5 Elastic IP na region (można poprosić o zwiększenie)
  • Możesz szybko „przenieść" Elastic IP na inną instancję (np. przy failover)
🚨 Uważaj na koszty!
Od lutego 2024 AWS nalicza opłatę za każdy publiczny adres IPv4, nawet jeśli jest przypisany do działającej instancji. To nowa zmiana. Wcześniej płaciłeś tylko za nieprzypisane Elastic IP. Optymalizuj liczbę publicznych adresów IP w swoich architekturach!

Architektura HA dla NAT Gateway

NAT Gateway jest highly available w ramach jednej AZ, ale jeśli ta AZ ulegnie awarii, Twoje prywatne subnety w innych AZ stracą dostęp do internetu (bo ich trasy wskazywały na NAT GW w uszkodzonej AZ).

Rozwiązanie? Stwórz osobny NAT Gateway w każdej AZ i ustaw Route Tables prywatnych subnetów tak, by każdy korzystał z NAT Gateway w swojej AZ. To kosztuje więcej, ale gwarantuje HA.

Typowa konfiguracja Multi-AZ z dwoma AZ:

Private Subnet AZ-a Route Table:

DestinationTarget
10.0.0.0/16local
0.0.0.0/0nat-gw-AZa

Private Subnet AZ-b Route Table:

DestinationTarget
10.0.0.0/16local
0.0.0.0/0nat-gw-AZb

Dzięki temu awaria jednej AZ nie wpływa na routing w drugiej. Każdy NAT Gateway jest niezależny.

🧠 Podsumowanie
  • Route Tables decydują, gdzie kierowany jest ruch sieciowy z subnetu
  • Trasa „local" jest automatyczna i umożliwia komunikację wewnątrz VPC
  • AWS wybiera trasę z najdłuższym prefixem (most specific match)
  • NAT Gateway pozwala prywatnym subnetom na ruch wychodzący do internetu
  • NAT Gateway musi być w public subnecie i potrzebuje Elastic IP
  • NAT Gateway jest managed i HA w ramach AZ (zalecany przez AWS)
  • NAT Instance to starsza alternatywa (EC2), dziś rzadko stosowana
  • Elastic IP to statyczny publiczny IPv4, płatny gdy nieprzypisany
  • Dla HA: osobny NAT Gateway w każdej AZ z osobną Route Table
🧪 Sprawdź się

Instancja EC2 w prywatnym subnecie musi pobrać aktualizacje z internetu. Co jest wymagane?

A Przypisanie publicznego IP do instancji
B NAT Gateway w public subnecie + trasa w Route Table
C Dodanie trasy do Internet Gateway w Route Table prywatnego subnetu
Instancja w prywatnym subnecie potrzebuje NAT Gateway do komunikacji wychodzącej z internetem. NAT Gateway musi być w public subnecie (z trasą do IGW), a Route Table prywatnego subnetu musi kierować 0.0.0.0/0 do NAT Gateway. Dodanie trasy do IGW w prywatnym subnecie zamieniłoby go w public subnet.

Kiedy AWS nalicza opłatę za Elastic IP?

A Tylko gdy jest przypisany do instancji
B Tylko gdy NIE jest przypisany do instancji
C Zawsze, ale dodatkowa opłata gdy nie jest przypisany
Od 2024 roku AWS nalicza opłatę za każdy publiczny adres IPv4 (w tym Elastic IP) niezależnie od tego, czy jest przypisany. Dodatkowa opłata jest naliczana za Elastic IP, który jest zaalokowany, ale nieprzypisany do działającego zasobu. AWS chce zachęcić do oszczędnego korzystania z IPv4.

Czym różni się NAT Gateway od NAT Instance?

A NAT Gateway jest zarządzany przez AWS i nie obsługuje Security Groups
B NAT Instance jest szybszy i tańszy
C NAT Gateway można użyć jako Bastion Host
NAT Gateway to usługa zarządzana przez AWS (fully managed), skalowalna do 100 Gbps, ale nie można do niego przypisać Security Groups ani użyć jako bastion host. NAT Instance to zwykły EC2, który sam zarządzasz, ale możesz do niego przypisać SG i użyć jako bastion.