Lab 04

VirtualBox · Debian Stable · NAT / MASQUERADE

NAT i dostęp do Internetu

Rozbuduj router z Lab 03 o interfejs WAN w trybie VirtualBox NAT, zachowaj routing między dwoma LAN i uruchom MASQUERADE dla ruchu wychodzącego.

1

Cel ćwiczenia

Lab 04 pokazuje praktyczną różnicę między routingiem i NAT/PAT. LAN A i LAN B nadal komunikują się zwykłym routingiem, a ruch do sieci zewnętrznej przechodzi przez routing oraz source NAT.

  • odróżnić routing, NAT i firewall.
  • dodać routerowi Debian trzeci interfejs WAN w trybie VirtualBox NAT.
  • zachować routing LAN A ↔ LAN B z Lab 03.
  • sprawdzić default route routera przez WAN.
  • włączyć IPv4 forwarding niezależnie od NAT.
  • uruchomić MASQUERADE dla dwóch prywatnych sieci LAN.
  • zdiagnozować brak dostępu do Internetu po IP i po nazwie.
0

Rejestracja stanu przed Lab 04

Lab 04 rozpoczyna się od działającego Lab 03. Zapisz więc ten stan jako punkt powrotu, zanim dodasz WAN i reguły NAT. Na każdej VM zapisz adresy, trasy i konfigurację sieci; na routerze także ip_forward oraz informację, czy tabela lab04_nat już istniała.

STATE="$HOME/lab04-state"
umask 077
mkdir -p "$STATE"
ip -br link > "$STATE/link.before"
ip -br address > "$STATE/address.before"
ip route show table all > "$STATE/routes.before"

if sudo test -e /etc/network/interfaces; then
  printf 'present
' > "$STATE/interfaces.marker"
  sudo cp -a /etc/network/interfaces "$STATE/interfaces.before"
else
  printf 'absent
' > "$STATE/interfaces.marker"
fi

# Tylko na routerze
sysctl -n net.ipv4.ip_forward > "$STATE/ip-forward.before"
if sudo nft list table ip lab04_nat > "$STATE/lab04_nat.before" 2>/dev/null; then
  printf 'present
' > "$STATE/nft-table.marker"
else
  printf 'absent
' > "$STATE/nft-table.marker"
fi

Na hoście zapisz ustawienia wszystkich kart, szczególnie stan trzeciego adaptera routera przed włączeniem NAT. Jeżeli tabelalab04_nat była obecna przed ćwiczeniem, nie zaczynaj laboratorium, dopóki nie ustalisz jej właściciela. Snapshot jest dodatkowym zabezpieczeniem, nie backupem.

2

Topologia Lab 04

Zachowujesz dwa segmenty z Lab 03: lab-route-a dla sieci 192.168.80.0/24 oraz lab-route-bdla sieci 192.168.90.0/24. Router Debian dostaje dodatkowy interfejs WAN w trybie VirtualBox NAT.

Client A: 192.168.80.10/24, gateway 192.168.80.1
Router LAN A: 192.168.80.1/24
Router LAN B: 192.168.90.1/24
Router WAN: VirtualBox NAT, adres dynamiczny
Client B: 192.168.90.10/24, gateway 192.168.90.1
Lab 04 dodaje trzeci interfejs WAN do routera z Lab 03.
3

Router z trzema interfejsami

Router ma trzy karty: dwie ręcznie konfigurowane karty LAN oraz WAN zarządzany przez VirtualBox NAT. Przykładowe nazwy mogą wyglądać jak enp0s3, enp0s8 i enp0s9, ale kolejność może być inna.

ip link show
ip address show
ip route show

Ustal LAN_A_IF, LAN_B_IF iWAN_IF po adresach, przypisaniu kart VirtualBox i default route. Nie wykonuj ip addr flush na WAN.

Nie zakładaj nazw eth0, eth1 ani eth2; ustal LAN_A_IF, LAN_B_IF i WAN_IF.
4

Karty VirtualBox

Client A ma jedną kartę Internal Network lab-route-a. Client B ma jedną kartę Internal Network lab-route-b. Router ma Adapter 1 w lab-route-a, Adapter 2 wlab-route-b oraz Adapter 3 w trybie NAT.

Router Adapter 1 -> Internal Network: lab-route-a
Router Adapter 2 -> Internal Network: lab-route-b
Router Adapter 3 -> NAT
Client A Adapter 1 -> Internal Network: lab-route-a
Client B Adapter 1 -> Internal Network: lab-route-b
5

Adresacja LAN

Adresacja LAN pozostaje zgodna z Lab 03. Przypomnienie obliczeń i hostów warto zestawić z teorią Adresacja IPv4.

LAN A

sieć: 192.168.80.0/24

router: 192.168.80.1/24

client: 192.168.80.10/24

LAN B

sieć: 192.168.90.0/24

router: 192.168.90.1/24

client: 192.168.90.10/24

6

WAN i default route routera

Nie wpisuj na sztywno adresu WAN, na przykład 10.0.2.15. Interfejs WAN ma konfigurację zależną od środowiska VirtualBox NAT. Sprawdź, czy router ma trasę domyślną przez WAN.

ip address show
ip route show
ip route get 1.1.1.1

1.1.1.1 jest tylko przykładowym publicznym adresem testowym. NAT nie naprawi braku default route routera.

Adres WAN jest dynamiczny, dlatego najpierw sprawdź trasę i interfejs wyjściowy.
7

Routing przed NAT

Przed konfiguracją NAT sprawdź dwie rzeczy: czy sam router ma działający WAN oraz czy komunikacja LAN A ↔ LAN B nadal działa bez NAT. Jeżeli sam router nie ma wyjścia WAN, NAT dla klientów tego nie naprawi.

# Router
ip route show
ping -c 4 1.1.1.1

# Client A -> Client B
ping -c 4 192.168.90.10

# Client B -> Client A
ping -c 4 192.168.80.10
Najpierw potwierdź routing LAN A ↔ LAN B i wyjście samego routera przez WAN.
8

Dlaczego source NAT

Client A wysyła pakiet ze źródłem 192.168.80.10 do publicznego hosta. Router potrafi wysłać pakiet przez WAN, ale sieć zewnętrzna nie zna normalnej trasy zwrotnej do192.168.80.0/24. Dlatego na granicy wykonujemy source NAT.

MASQUERADE jest odmianą source NAT wygodną przy dynamicznym adresie WAN. W tym laboratorium WAN VirtualBox NAT może dostać adres automatycznie, więc nie używamy sztywnego SNAT do konkretnego WAN IP.

Sieć zewnętrzna zwykle nie ma trasy zwrotnej do prywatnych podsieci LAN.
9

Konfiguracja LAN i klientów

Ręcznie konfiguruj tylko interfejsy LAN. WAN zachowuje konfigurację z VirtualBox NAT. Nazwy interfejsów są przykładowe.

# Router LAN A
sudo ip addr flush dev enp0s3
sudo ip addr add 192.168.80.1/24 dev enp0s3
sudo ip link set enp0s3 up

# Router LAN B
sudo ip addr flush dev enp0s8
sudo ip addr add 192.168.90.1/24 dev enp0s8
sudo ip link set enp0s8 up

# NIE wykonuj ip addr flush na WAN
# UWAGA: flush usuwa całą bieżącą adresację IPv4 ze wskazanego interfejsu.
# Client A
sudo ip addr flush dev enp0s3
sudo ip addr add 192.168.80.10/24 dev enp0s3
sudo ip link set enp0s3 up
sudo ip route replace default via 192.168.80.1

# Client B
sudo ip addr flush dev enp0s3
sudo ip addr add 192.168.90.10/24 dev enp0s3
sudo ip link set enp0s3 up
sudo ip route replace default via 192.168.90.1
10

IPv4 forwarding

Lab 04 nadal wymaga net.ipv4.ip_forward=1. NAT sam nie przekazuje pakietów między interfejsami bez routingu i forwardingu.

sysctl net.ipv4.ip_forward
sudo sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forward
11

nftables i MASQUERADE

Najpierw sprawdź istniejące reguły. Nie używaj nft flush ruleset, bo usunąłbyś inne tabele i polityki. Tabela lab04_nat jest runtime i służy tylko temu laboratorium.

sudo nft list ruleset
sudo nft list table ip lab04_nat

Nazwa tabeli musi być wolna przed utworzeniem. Jeżeli polecenie zwraca istniejącą tabelę, zatrzymaj się i ustal jej pochodzenie. Nie usuwaj jej tylko na podstawie nazwy.

sudo nft list table ip lab04_nat 2>/dev/null &&
  echo "STOP: tabela istnieje — nie usuwaj jej bez potwierdzenia" ||
  echo "OK: nazwa lab04_nat jest wolna"
Dedykowana tabela lab04_nat ogranicza sprzątanie do reguł tego laboratorium.
12

Reguły MASQUERADE

Utwórz tabelę i chain postrouting. Postrouting oznacza etap po decyzji routingu, przed wysłaniem pakietu na interfejs wyjściowy.

sudo nft add table ip lab04_nat
sudo nft 'add chain ip lab04_nat postrouting { type nat hook postrouting priority 100; policy accept; }'

Po ustaleniu, że przykładowy WAN to enp0s9, dodaj reguły dla obu LAN. Nie stosuj MASQUERADE na interfejsach LAN.

sudo nft add rule ip lab04_nat postrouting oifname "enp0s9" ip saddr 192.168.80.0/24 masquerade
sudo nft add rule ip lab04_nat postrouting oifname "enp0s9" ip saddr 192.168.90.0/24 masquerade
sudo nft list table ip lab04_nat
enp0s9 jest wyłącznie przykładem WAN_IF; podstaw rzeczywisty interfejs WAN.
13

Pakiet przed i po NAT

Przed NAT pakiet klienta ma prywatne źródło, na przykład192.168.80.10. Po MASQUERADE źródłem staje się adres WAN routera. Odpowiedź wraca do routera, który dzięki stanowi translacji przekazuje ją do właściwego klienta.

PRZED NAT:
source      192.168.80.10
destination publiczny host

PO MASQUERADE:
source      WAN IP routera
destination ten sam publiczny host
Destination IP pozostaje taki sam, zmienia się źródło na adres WAN routera.
14

Test dostępu do Internetu

Po konfiguracji MASQUERADE sprawdź trasę i test po przykładowym IP. Brak odpowiedzi ICMP nie jest absolutnym dowodem błędu NAT, bo ICMP może być filtrowany.

# Client A
ip route get 1.1.1.1
ping -c 4 1.1.1.1

# Client B
ip route get 1.1.1.1
ping -c 4 1.1.1.1

Jeżeli ping po IP działa, ale nazwy nie działają, sprawdź DNS. Nie zmieniaj NAT bez powodu.

Najpierw testuj po IP, a dopiero później rozdziel problem DNS.
15

Routing, NAT i firewall

Routing odpowiada na pytanie: którędy wysłać pakiet? NAT odpowiada: jak zmienić adres lub port na granicy sieci? Firewall odpowiada: czy ruch jest dozwolony?

ROUTING ≠ NAT ≠ FIREWALL. Sama reguła MASQUERADE nie tworzy Internetu. Potrzebne są WAN, default route routera, forwarding, poprawne gateway klientów, firewall pozwalający na forwarding i działający upstream.

Routing, NAT i firewall to trzy różne mechanizmy.
16

Double NAT

W tym laboratorium występują dwie warstwy translacji: Debian zmienia źródło z LAN na WAN IP routera VM, a VirtualBox NAT zmienia ruch z WAN VM do sieci hosta lub Internetu. To jest double NAT.

Nie przedstawiamy double NAT jako najlepszej architektury produkcyjnej. Tutaj jest skutkiem wygodnej, izolowanej konstrukcji laboratoryjnej.

Double NAT wynika z konstrukcji tego laboratorium, a nie z uniwersalnego wymogu produkcyjnego.
17

Diagnostyka NAT

  1. Czy Client ma poprawny IP i prefix?
  2. Czy Client osiąga LAN gateway?
  3. Czy Client ma default route?
  4. Czy router ma oba LAN-y?
  5. Czy LAN A ↔ LAN B działa?
  6. Czy ip_forward=1?
  7. Czy router posiada działający WAN?
  8. Czy router ma default route przez WAN?
  9. Czy sam router osiąga cel zewnętrzny?
  10. Czy istnieje MASQUERADE dla właściwej podsieci?
  11. Czy MASQUERADE używa właściwego WAN_IF?
  12. Czy firewall pozwala na forwarding?
  13. Czy po IP działa, a po nazwie nie? Sprawdź DNS.

Szerzej o kolejności testów przeczytasz w materiale Diagnostyka sieci.

Najpierw routing, potem NAT, na końcu DNS lub aplikacja.
18

Typowe błędy

Typowe błędy konfiguracji NAT i ich objawy
BłądObjaw
MASQUERADE na złym oifnameReguła nie pasuje do pakietów wychodzących przez prawdziwy WAN.
Brak default route routeraRouter zna LAN-y, ale nie ma drogi 0.0.0.0/0; NAT tego nie naprawi.
Brak ip_forwardNAT istnieje i WAN działa, ale klient nadal nie jest routowany.
Reguła tylko dla jednego LANClient A może działać, a Client B nie korzysta z MASQUERADE.
DNS1.1.1.1 działa, ale nazwy nie; sprawdź DNS, nie przebudowuj NAT.
19

Sprzątanie i walidacja stanu końcowego

Wykonaj procedurę po testach NAT. Usuń tabelę tylko wtedy, gdy zapis stanu potwierdza, że nie istniała przed Lab 04 i została utworzona przez to ćwiczenie. Nie używaj nft flush ruleset.

STATE="$HOME/lab04-state"
if grep -qx absent "$STATE/nft-table.marker"; then
  # UWAGA: delete usuwa całą tabelę lab04_nat wraz z jej łańcuchami i regułami.
  sudo nft delete table ip lab04_nat
else
  echo "Tabela istniała wcześniej — nie jest usuwana"
fi

sudo nft list table ip lab04_nat 2>/dev/null || echo "Tabela Lab 04 usunięta"
sudo nft list ruleset

Na routerze przywróć dokładną wartość forwardingu sprzed Lab 04. Nie ustawiaj bezwarunkowo zera, ponieważ stanem początkowym mógł być działający router z Lab 03.

STATE="$HOME/lab04-state"
sudo sysctl -w net.ipv4.ip_forward="$(cat "$STATE/ip-forward.before")"
sysctl net.ipv4.ip_forward

Jeżeli kończysz Lab 04, wyłącz VM, przywróć zapisany stan trzeciej karty WAN oraz pozostałych adapterów. Na każdej VM odtwórz jej własny plik interfaces.before i przeładuj sieć z lokalnej konsoli, ponieważ restart może przerwać SSH.

STATE="$HOME/lab04-state"
if grep -qx present "$STATE/interfaces.marker"; then
  sudo cp -a "$STATE/interfaces.before" /etc/network/interfaces
else
  # UWAGA: usuń plik tylko wtedy, gdy marker potwierdza jego wcześniejszy brak.
  sudo rm -- /etc/network/interfaces
fi
sudo systemctl restart networking
ip -br address
ip route show table all

Porównaj wyniki z address.before iroutes.before. Oczekiwanym stanem jest dokładnie konfiguracja z początku Lab 04, zwykle działający routing Lab 03 bez tabeli MASQUERADE i bez dodatkowego WAN. Procedura nie usuwa innych tabel nftables ani konfiguracji trwałej spoza tego labu.

Kontynuuję Lab 05: usuń elementy NAT i WAN; Lab 05 jest niezależne, więc nie wymaga pozostawienia translacji. Kończę ćwiczenia: po odtworzeniu stanu Lab 03 możesz dodatkowo wykonać jego własny rollback, jeśli chcesz wrócić do konfiguracji sprzed całej sekwencji.

20

Zadania dla studenta

  1. Wyjaśnij różnicę routing vs NAT.
  2. Wyjaśnij, dlaczego LAN A ↔ LAN B działa bez NAT.
  3. Wyjaśnij, dlaczego MASQUERADE jest wygodne dla dynamicznego WAN.
  4. Sprawdź, co się stanie, jeżeli NAT wskazuje zły oifname.
  5. Sprawdź, co się stanie, jeżeli router nie ma default route.
  6. Oceń, czy ip_forward=1 wystarcza do dostępu klientów do Internetu.
  7. Wyjaśnij, dlaczego NAT nie jest firewallem.
  8. Dodaj tylko jedną regułę MASQUERADE i sprawdź, który LAN działa.
  9. Wyjaśnij, dlaczego ping po IP może działać, a hostname nie.
  10. Opisz, skąd bierze się double NAT w tym laboratorium.

Pytania kontrolne

  1. Co robi MASQUERADE?
  2. Gdzie w ścieżce pakietu działa postrouting?
  3. Czy NAT wybiera trasę?
  4. Czy NAT zastępuje default gateway?
  5. Dlaczego najpierw testujemy Internet na routerze?
  6. Co robi net.ipv4.ip_forward?
  7. Czy prywatny IPv4 musi być routowalny w Internecie?
  8. Co oznacza WAN_IF?
  9. Co oznacza double NAT?
  10. Dlaczego brak DNS nie oznacza błędu NAT?

Co powinieneś zobaczyć

  • Client A ↔ Client B nadal działa.
  • Router ma dwa LAN connected.
  • Router ma default route przez WAN.
  • Router sam osiąga sieć zewnętrzną.
  • ip_forward = 1.
  • tabela lab04_nat istnieje.
  • obie sieci LAN mają MASQUERADE.
  • Client A może wyjść przez WAN.
  • Client B może wyjść przez WAN.
  • routing LAN działa niezależnie od NAT.

Ważne rozróżnienia

Lab 04 nie buduje lokalnego DHCP ani DNS, nie zakłada stałego WAN IP, nie każe wyłączać firewalla i nie używa nft flush ruleset.

NAT nie tworzy default route, NAT nie tworzy Internetu, NAT nie zastępuje firewalla, a LAN A ↔ LAN B nadal nie potrzebuje NAT.

Manifest grafik

Wszystkie grafiki wykorzystane w laboratorium znajdują się w poniższym katalogu Lab 04.

public/images/wirtualizacja/virtualbox/laboratoria/lab-04-nat/
01-topologia-lab-nat.png
02-router-trzy-interfejsy.png
03-wan-default-route.png
04-routing-przed-nat.png
05-dlaczego-source-nat.png
06-nftables-masquerade.png
07-pakiet-przed-po-nat.png
08-kontrola-regul-nat.png
09-test-internet.png
10-routing-vs-nat.png
11-double-nat.png
12-diagnostyka-nat.png