1/50
Wirtualizacja sieci w Linux: bridge, VETH, Docker networking
Cel slajdu: Slajd omawia zagadnienie „Wirtualizacja sieci w Linux: bridge, VETH, Docker networking” w kontekście: Architektury sieci wirtualnych w systemie Linux.

Architektury sieci wirtualnych w systemie Linux

Wykład poświęcony jest zaawansowanym mechanizmom wirtualizacji stosu sieciowego w systemie operacyjnym Linux. W nowoczesnych infrastrukturach serwerowych, środowiskach chmurowych oraz platformach orkiestracji kontenerów wirtualizacja sieci stanowi kluczowy komponent odpowiadający za separację dzierżawców, elastyczność topologii oraz bezpieczeństwo komunikacji międzyprocesowej.

W ramach modułu omówimy szczegółowo fundamentalne komponenty jądra Linuksa:

  • Wirtualne mostki sieciowe (Linux bridge): programowe przełączniki warstwy 2 (L2) implementujące tablicę FDB, protokół STP oraz filtrowanie VLAN zgodne z IEEE 802.1Q;
  • Wirtualne pary Ethernet (VETH): dwukierunkowe tunele warstwy łącza danych łączące odizolowane przestrzenie nazw;
  • Przestrzenie nazw sieci (Network Namespaces – netns): pełna izolacja interfejsów, tabel routingu, reguł zapory ogniowej i gniazd sieciowych w architekturze jądra;
  • Zaawansowane sterowniki interfejsów: Macvlan oraz Ipvlan w trybach bridge, VEPA oraz private;
  • Architektura sieciowa Dockera i CNI: wbudowany mostek docker0, sterowniki bridge, host, none, macvlan, sieci nakładkowe overlay (VXLAN z protokołem EVPN/BGP), translacja DNAT/iptables oraz wtyczki CNI w Kubernetes (Flannel, Calico, Cilium z eBPF).
Wirtualizacja sieci w Linux: bridge, VETH, Docker networking: bridge, VETH, Docker networking: Slajd przedstawia zagadnienie Architektury sieci wirtualnych w systemie Linux w ramach tematu Wirtualizacja sieci w Linux: bridge, VETH, Docker networking na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Wirtualizacja sieci w Linux: bridge, VETH, Docker networking
2/50
Cel warsztatu
Cel slajdu: Slajd określa wymagane efekty uczenia się, czyli wiedzę i umiejętności, które uczestnik opanuje po zajęciach i laboratorium.

Cele dydaktyczne i praktyczne

Wymagania kompetencyjne dla inżynierów i administratorów sieci wirtualnych

  • Zrozumienie wirtualizacji L2 w jądrze Linuksa: opanowanie mechanizmów działania programowego mostka sieciowego, tablicy FDB oraz algorytmów przełączania ramek;
  • Konfiguracja narzędziami iproute2: rezygnacja z przestarzałych narzędzi (brctl z pakietu bridge-utils) na rzecz nowoczesnego pakietu iproute2 (polecenia ip link oraz bridge);
  • Praktyczne użycie par VETH i przestrzeni netns: manualna budowa izolowanych środowisk sieciowych, trasowanie między przestrzeniami oraz dołączanie portów do mostka;
  • Dogłębna analiza stosu sieciowego Dockera: zrozumienie działania sterowników bridge, host, none, macvlan oraz sieci overlay;
  • Dekompozycja publikowania portów (mechanizm -p): śledzenie reguł DNAT i MASQUERADE w tabeli nat podsystemu Netfilter oraz rola demona docker-proxy;
  • Zaawansowany troubleshooting sieci wirtualnych: diagnostyka za pomocą narzędzi tcpdump, bridge monitor, conntrack oraz nsenter.
Cel warsztatu: Slajd przedstawia zagadnienie Cele dydaktyczne i praktyczne w ramach tematu Cel warsztatu na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Cel warsztatu
3/50
Agenda
Cel slajdu: Slajd przedstawia kolejność omawianych zagadnień i wskazuje miejsce bieżącego tematu w strukturze wykładu.

Plan wykładu i modułów laboratoryjnych

Systematyczny układ zagadnień od teorii warstwy L2 po zaawansowane wdrożenia CNI

  • Część I (slajdy 4–10): Wirtualizacja L2 i mostki jądra – ewolucja SDN, moduł Linux bridge, tablica FDB, uczenie się MAC, algorytm forwardingu i mostek w wirtualizacji KVM/Docker;
  • Część II (slajdy 11–20): Zarządzanie mostkiem, VETH i Network Namespaces – narzędzia iproute2/bridge, troubleshooting L2, wirtualne pary VETH, izolacja przestrzeni nazw, VLAN 802.1Q oraz sterowniki Macvlan i Ipvlan;
  • Część III (slajdy 21–30): Architektura sieciowa środowiska Docker – model CNM (Container Network Model), sterowniki sieciowe (bridge, host, none, overlay z VXLAN/EVPN-BGP), mostek docker0, sieci zdefiniowane przez użytkownika i wbudowany DNS;
  • Część IV (slajdy 31–40): Publikacja portów, Netfilter i przygotowanie laboratorium – mechanizm -p, translacja DNAT, łańcuchy DOCKER i DOCKER-USER, proces docker-proxy, parametry sysctl oraz inicjalizacja środowiska laboratoryjnego;
  • Część V (slajdy 41–50): Warsztat praktyczny, zaawansowane CNI i Cheat Sheet – budowa sieci krok po kroku, analiza STP i pętli L2, rozwiązywanie problemów z hairpin NAT, narzędzia diagnostyczne (tcpdump, nsenter), wtyczki CNI (Flannel, Calico, Cilium z eBPF) oraz podsumowujący Cheat Sheet.
Agenda: Slajd przedstawia zagadnienie Plan wykładu i modułów laboratoryjnych w ramach tematu Agenda na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Agenda
4/50
Ewolucja od przełączników fizycznych do wirtualizacji
Cel slajdu: Slajd omawia zagadnienie „Ewolucja od przełączników fizycznych do wirtualizacji” w kontekście: Tradycyjne przełączniki L2 a wirtualizacja w jądrze.

Tradycyjne przełączniki L2 a wirtualizacja w jądrze

Od dedykowanych układów ASIC do elastycznego oprogramowania w RAM

Cecha Przełącznik fizyczny (Hardware) Wirtualny mostek Linux (Software)
Płaszczyzna danych Dedykowane układy ASIC / pamięć TCAM Pamięć RAM i wątki procesora (CPU)
Opóźnienia (Latency) Submikrosekundowe (sprzętowy cut-through) Kilka mikrosekund (przetwarzanie w jądrze)
Elastyczność i skalowalność Ograniczona liczbą fizycznych portów Praktycznie nieograniczona (tysiące portów VETH)
Zarządzanie i orkiestracja SNMP, CLI producenta, protokoły NETCONF Standardowe API jądra: Netlink, iproute2
Koszt i wdrożenie Wysoki koszt urządzeń, kable, zasilanie Zerowy koszt sprzętu, wbudowany w jądro
Ewolucja od przełączników fizycznych do wirtualizacji: Slajd przedstawia zagadnienie Tradycyjne przełączniki L2 a wirtualizacja w jądrze w ramach tematu Ewolucja od przełączników fizycznych do wirtualizacji na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Ewolucja od przełączników fizycznych do wirtualizacji
5/50
Software defined networking w Linux
Cel slajdu: Slajd omawia zagadnienie „Software defined networking w Linux” w kontekście: Separacja płaszczyzny sterowania od danych w Linuksie.

Separacja płaszczyzny sterowania od danych w Linuksie

Architektura SDN zaimplementowana w podsystemach jądra Linuksa

W architekturze SDN (Software-Defined Networking) następuje formalne oddzielenie płaszczyzny sterowania (Control Plane – podejmowanie decyzji o trasowaniu, politykach i tablicach przepływów) od płaszczyzny danych (Data Plane – szybkie przesyłanie pakietów przez interfejsy). System Linux implementuje nowoczesne SDN za pomocą modularnych podsystemów jądra:

  • Traffic Control (tc): zaawansowany podsystem kolejkowania, klasyfikacji (qdisc), kształtowania pasma (shaping) i priorytetyzacji pakietów;
  • Netfilter (iptables / nftables): stanowe filtrowanie pakietów (conntrack), translacja adresów sieciowych (NAT) i modyfikacja nagłówków (mangle);
  • Wirtualne mostki i Open vSwitch (OVS): programowe przełączniki wielowarstwowe z pełną obsługą protokołu OpenFlow i portów OpenFlow;
  • eBPF / XDP (eXpress Data Path): programowalne przetwarzanie pakietów na najniższym poziomie sterownika karty sieciowej przed zaalokowaniem struktury sk_buff;
  • VRF (Virtual Routing and Forwarding): obsługa wielu niezależnych, odizolowanych tablic routingu w ramach jednej instancji jądra.
Software defined networking w Linux: Slajd przedstawia zagadnienie Separacja płaszczyzny sterowania od danych w Linuksie w ramach tematu Software defined networking w Linux na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Software defined networking w Linux
6/50
Linux bridge - wirtualny przełącznik L2
Cel slajdu: Slajd omawia zagadnienie „Linux bridge - wirtualny przełącznik L2” w kontekście: Mostek sieciowy w pamięci jądra Linuksa.

Mostek sieciowy w pamięci jądra Linuksa

Zasada działania, cechy konstrukcyjne i obsługa standardów IEEE

Linux Bridge to wbudowany moduł jądra (net/bridge/bridge.ko), który emuluje autonomiczny przełącznik warstwy łącza danych (L2). Mostek agreguje wiele portów członkowskich (zarówno interfejsów fizycznych, jak i wirtualnych TAP/VETH) w jedną wspólną domenę rozgłoszeniową.

  • Uczenie się adresów MAC (MAC learning): dynamiczne badanie adresów źródłowych ramek i automatyczne budowanie tablicy FDB;
  • Przełączanie warstwy 2 (Forwarding): selektywne kierowanie ramek wyłącznie do właściwego portu wyjściowego na podstawie docelowego adresu MAC;
  • Zapobieganie pętlom (STP / RSTP): obsługa protokołów IEEE 802.1D oraz IEEE 802.1w w celu eliminacji pętli w złożonych topologiach;
  • Filtrowanie i trunking VLAN (IEEE 802.1Q): obsługa flagi vlan_filtering 1, znakowanie PVID oraz separacja logiczna ruchu na poszczególnych portach mostka;
  • IGMP / MLD Snooping: optymalizacja ruchu rozgłoszeń grupowych (multicast) w celu uniknięcia zalewania portów nienależących do grupy.
Linux bridge - wirtualny przełącznik L2: Slajd przedstawia zagadnienie Mostek sieciowy w pamięci jądra Linuksa w ramach tematu Linux bridge - wirtualny przełącznik L2 na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Linux bridge - wirtualny przełącznik L2
7/50
Budowa mostka sieciowego w Linux
Cel slajdu: Slajd omawia zagadnienie „Budowa mostka sieciowego w Linux” w kontekście: Tworzenie mostka za pomocą iproute2 i brctl.

Tworzenie mostka za pomocą iproute2 i brctl

Praktyczna konfiguracja przełącznika w wierszu poleceń Linuksa

Współczesnym standardem zarządzania mostkami w systemie Linux jest rodzina narzędzi iproute2 (polecenia ip link oraz bridge). Narzędzie brctl z pakietu bridge-utils korzysta z przestarzałego interfejsu ioctl i jest traktowane jako deprecated.

# 1. Tworzenie wirtualnego urządzenia mostka za pomocą iproute2
sudo ip link add name br0 type bridge

# 2. Aktywacja interfejsu mostka (stan UP)
sudo ip link set dev br0 up

# 3. Przypisanie interfejsów składowych (portów slave) do mostka
sudo ip link set dev eth1 master br0
sudo ip link set dev eth2 master br0

# 4. Nadanie adresu IP bramy do interfejsu mostka (L3)
sudo ip addr add 192.168.100.1/24 dev br0

# Porównanie z przestarzałą składnią brctl (niezalecana):
sudo brctl addbr br0
sudo brctl addif br0 eth1 eth2
Złota zasada konfiguracji L2/L3: Porty podrzędne (interfejsy dodane do mostka) nie mogą posiadać własnych adresów IP w warstwie L3! Adres IP przypisuje się wyłącznie do nadrzędnego interfejsu mostka (br0).
Budowa mostka sieciowego w Linux: Slajd przedstawia zagadnienie Tworzenie mostka za pomocą iproute2 i brctl w ramach tematu Budowa mostka sieciowego w Linux na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Budowa mostka sieciowego w Linux
8/50
MAC learning i tablica przejść w bridge
Cel slajdu: Slajd omawia zagadnienie „MAC learning i tablica przejść w bridge” w kontekście: Forwarding database (FDB) w mostku sieciowym.

Forwarding database (FDB) w mostku sieciowym

Sposób uczenia się topologii L2 i inspekcja tablicy przełączania

Mostek sieciowy Linuksa realizuje mechanizm MAC learning. Podczas odbioru ramki na dowolnym porcie mostek odczytuje źródłowy adres MAC (Source MAC) i zapisuje w tablicy FDB (Forwarding Database) powiązanie między tym adresem a portem fizycznym lub wirtualnym.

# Wyświetlenie pełnej zawartości tablicy FDB mostka
sudo bridge fdb show br br0

# Przykładowy wynik polecenia:
00:1a:2b:3c:4d:5e dev eth1 master br0 vlan 1
02:42:ac:11:00:02 dev veth1a2b master br0
52:54:00:12:34:56 dev br0 permanent

# Ręczne dodanie statycznego wpisu FDB (np. dla zabezpieczenia portu)
# flaga master oznacza wpis w tablicy mostka (nie przyjmuje nazwy mostka)
sudo bridge fdb add 02:42:c0:a8:01:05 dev veth1a2b master static

# Zmiana czasu wygaszania wpisów dynamicznych (aging time, np. na 120 s)
sudo ip link set br0 type bridge ageing_time 12000
  • Wpisy dynamiczne: dodawane automatycznie w procesie uczenia się, podlegają licznikowi czasu (domyślny aging time to 300 sekund);
  • Wpisy statyczne i permanentne: definiowane ręcznie przez administratora lub powiązane z samym mostkiem (nie wygasają samoczynnie).
MAC learning i tablica przejść w bridge: Slajd przedstawia zagadnienie Forwarding database (FDB) w mostku sieciowym w ramach tematu MAC learning i tablica przejść w bridge na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
MAC learning i tablica przejść w bridge
9/50
Forwarding w bridge
Cel slajdu: Slajd omawia zagadnienie „Forwarding w bridge” w kontekście: Jak mostek przekazuje ramki między interfejsami.

Jak mostek przekazuje ramki między interfejsami

Algorytm decyzyjny forwardingu, flooding oraz zasada split horizon

  1. Odebranie ramki: ramka przychodzi na port składowy mostka i trafia do procedury jądra br_handle_frame;
  2. Weryfikacja adresu docelowego:
    • Jeżeli docelowy MAC odpowiada adresowi samego mostka – pakiet trafia do lokalnego stosu L3;
    • Jeżeli MAC znajduje się w tablicy FDB – następuje Unicast Forwarding (skierowanie ramki wyłącznie na wskazany port);
    • Jeżeli MAC jest nieznany (Unknown Unicast) lub jest to adres rozgłoszeniowy (Broadcast ff:ff:ff:ff:ff:ff) / grupowy (Multicast) – następuje Flooding (przesłanie na wszystkie aktywne porty w danej domenie).
  3. Zasada Split Horizon: mostek nigdy nie wysyła ramki z powrotem na ten sam port, z którego została odebrana (ochrona przed prostą pętlą L2).
Wyjątek – tryb Hairpin (Reflective Relay): W środowiskach wirtualnych i kontenerowych istnieje potrzeba, aby dwa kontenery podłączone do tego samego wirtualnego portu (np. przez adapter VEPA lub wirtualny przełącznik) mogły komunikować się ze sobą. Służy do tego polecenie: bridge link set dev veth0 hairpin on.
Forwarding w bridge: Slajd przedstawia zagadnienie Jak mostek przekazuje ramki między interfejsami w ramach tematu Forwarding w bridge na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Forwarding w bridge
10/50
Bridge jako fundament wirtualizacji
Cel slajdu: Slajd omawia zagadnienie „Bridge jako fundament wirtualizacji” w kontekście: Mostek w maszynach wirtualnych (KVM/QEMU) i kontenerach.

Mostek w maszynach wirtualnych (KVM/QEMU) i kontenerach

Integracja warstwy sprzętowej z wirtualnymi maszynami i środowiskami kontenerowymi

Mostek sieciowy Linuksa stanowi uniwersalny łącznik spajający odmienne technologie wirtualizacji w jedną spójną infrastrukturę teleinformatyczną:

  • Wirtualizacja pełna (KVM / QEMU):
    • Maszyny wirtualne korzystają z wirtualnych kart sieciowych (np. sterownik virtio-net);
    • Hiperwizor tworzy na hoście interfejsy typu TAP (np. vnet0, tap0), które są wpinane bezpośrednio do mostka br0;
    • Karta fizyczna serwera (np. eth0) również staje się portem mostka, dając maszynom VM bezpośredni dostęp do sieci fizycznej LAN.
  • Konteneryzacja (LXC / Docker):
    • Kontenery otrzymują własną przestrzeń nazw sieci (netns);
    • Połączenie między kontenerem a mostkiem realizuje wirtualna para Ethernet (VETH);
    • Docker domyślnie tworzy dedykowany mostek docker0 i zarządza translacją NAT.
  • Alternatywy wysokowydajne: w środowiskach o skrajnych wymaganiach I/O mostek bywa zastępowany przez Macvlan, Ipvlan lub sprzętowy podział karty w technologii SR-IOV.
Bridge jako fundament wirtualizacji: Slajd przedstawia zagadnienie Mostek w maszynach wirtualnych (KVM/QEMU) i kontenerach w ramach tematu Bridge jako fundament wirtualizacji na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Bridge jako fundament wirtualizacji
11/50
Polecenia do zarządzania bridge
Cel slajdu: Slajd omawia zagadnienie „Polecenia do zarządzania bridge” w kontekście: Komendy ip, bridge, brctl.

Komendy ip, bridge, brctl

Zestawienie poleceń administracyjnych do obsługi mostka w systemie Linux

# === PAKIET IPROUTE2 (NOWOCZESNY STANDARD) ===
# Utworzenie i podniesienie mostka
sudo ip link add name br0 type bridge
sudo ip link set dev br0 up

# Dołączenie interfejsu (portu slave) do mostka
sudo ip link set dev eth1 master br0

# Odłączenie portu z mostka
sudo ip link set dev eth1 nomaster

# Inspekcja portów mostka i ich stanu
bridge link show

# Podgląd tablicy przekazywania FDB
bridge fdb show br br0

# === PAKIET BRIDGE-UTILS (PRZESTARZAŁY / DEPRECATED) ===
sudo brctl addbr br0                     # Odpowiednik: ip link add ... type bridge
sudo brctl addif br0 eth1                # Odpowiednik: ip link set eth1 master br0
sudo brctl show                          # Wyświetlenie listy mostków
sudo brctl showmacs br0                  # Wyświetlenie tablicy MAC (FDB)
Polecenia do zarządzania bridge: Slajd przedstawia zagadnienie Komendy ip, bridge, brctl w ramach tematu Polecenia do zarządzania bridge na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Polecenia do zarządzania bridge
12/50
Troubleshooting mostka
Cel slajdu: Slajd omawia zagadnienie „Troubleshooting mostka” w kontekście: STP, zapętlenia, MAC flapping.

STP, zapętlenia, MAC flapping

Typowe problemy w warstwie L2, objawy awarii i metody diagnostyki

Problem Objawy i wskaźniki Przyczyna i rozwiązanie
Pętla L2 (Broadcast Storm) 100% obciążenia CPU, miliony pakietów/s w tcpdump Zapętlenie fizyczne/wirtualne bez STP; włączenie STP: ip link set br0 type bridge stp_state 1
Trzepotanie MAC (MAC Flapping) Ostrzeżenia w dmesg: received packet on ethX with own address as source Zduplikowany adres MAC na dwóch portach lub pętla; weryfikacja FDB: bridge monitor fdb
Niezgodność MTU (MTU Mismatch) Ciche odrzucanie dużych ramek (brak łączności TCP przy działającym małym pingu) Port z niższym MTU obniża MTU mostka; ujednolicenie MTU: ip link set dev eth1 mtu 1500
Blokada przez br_netfilter Brak komunikacji między portami mimo poprawnych wpisów FDB Domyślna polityka DROP w łańcuchu FORWARD iptables; zezwolenie lub wyłączenie sysctl net.bridge.bridge-nf-call-iptables=0
Troubleshooting mostka: Slajd przedstawia zagadnienie STP, zapętlenia, MAC flapping w ramach tematu Troubleshooting mostka na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Troubleshooting mostka
13/50
Wirtualne pary Ethernet VETH
Cel slajdu: Slajd omawia zagadnienie „Wirtualne pary Ethernet VETH” w kontekście: Koncepcja i działanie VETH.

Koncepcja i działanie VETH

Wirtualny kabel sieciowy łączący odizolowane środowiska w pamięci RAM

VETH (Virtual Ethernet) to wbudowany sterownik jądra Linuksa (drivers/net/veth.c), który tworzy połączoną parę wirtualnych kart sieciowych. Urządzenia te zachowują się jak końce fizycznego dwukierunkowego kabla krosowego:

  • Zasada działania rury (pipe): ramka Ethernet wysłana do kolejki nadawczej jednego interfejsu (np. veth0) pojawia się natychmiast w kolejce odbiorczej drugiego interfejsu (veth1);
  • Zerowy narzut sprzętowy: transfer pakietów odbywa się wyłącznie w pamięci operacyjnej RAM poprzez przekazanie wskaźników do struktur sk_buff bez kopiowania danych;
  • Most między przestrzeniami: jeden koniec pary może pozostać w głównej przestrzeni hosta (np. wpięty do mostka), a drugi zostać przeniesiony do odizolowanej przestrzeni nazw kontenera (netns);
  • Pełna funkcjonalność L2: każdy interfejs VETH posiada własny, unikalny adres MAC, obsługuje operacje ARP, ma własne liczniki pakietów oraz flagi konfiguracyjne.
Wirtualne pary Ethernet VETH: Slajd przedstawia zagadnienie Koncepcja i działanie VETH w ramach tematu Wirtualne pary Ethernet VETH na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Wirtualne pary Ethernet VETH
14/50
Tworzenie pary VETH
Cel slajdu: Slajd omawia zagadnienie „Tworzenie pary VETH” w kontekście: Praktyczne polecenia VETH.

Praktyczne polecenia VETH

Kreacja, konfiguracja parametrów oraz weryfikacja relacji partnerskiej (peer)

# 1. Tworzenie pary wirtualnych interfejsów VETH
sudo ip link add veth-host type veth peer name veth-guest

# 2. Aktywacja interfejsów (domyślnie po utworzeniu są w stanie DOWN)
sudo ip link set dev veth-host up
sudo ip link set dev veth-guest up

# 3. Przypisanie adresacji IP i test pętli w tej samej przestrzeni
sudo ip addr add 10.200.1.1/24 dev veth-host
sudo ip addr add 10.200.1.2/24 dev veth-guest
ping -c 2 10.200.1.2

# 4. Identyfikacja powiązanego interfejsu partnerskiego (peer IFINDEX)
ip -d link show veth-host
ethtool -S veth-host | grep peer_ifindex

# 5. Usunięcie pary (usunięcie jednego końca kasuje automatycznie oba)
sudo ip link delete veth-host
Tworzenie pary VETH: Slajd przedstawia zagadnienie Praktyczne polecenia VETH w ramach tematu Tworzenie pary VETH na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Tworzenie pary VETH
15/50
Network namespaces
Cel slajdu: Slajd omawia zagadnienie „Network namespaces” w kontekście: Izolacja stosu sieciowego w Linux.

Izolacja stosu sieciowego w Linux

Wirtualizacja zasobów sieciowych w modelu przestrzeni nazw jądra

Przestrzeń nazw sieci (Network Namespace – netns) to mechanizm jądra Linuksa (wywołanie systemowe clone() z flagą CLONE_NEWNET lub unshare()), który zapewnia całkowicie odrębny, wirtualny stos sieciowy dla grupy powiązanych procesów.

Każda przestrzeń netns posiada w pełni niezależne zasoby:

  • Interfejsy sieciowe: dedykowana lista urządzeń (każdy interfejs może należeć tylko do jednej przestrzeni nazw w danym momencie);
  • Adresy IP i pamięć podręczna ARP: autonomiczne tablice translacji adresów L2/L3;
  • Tablice routingu (FIB): własna tablica main, local, default gateway oraz reguły routingu źródłowego (policy routing);
  • Przestrzeń portów L4 i gniazda: niezależna pula portów TCP/UDP – proces w przestrzeni A może nasłuchiwać na porcie 80, podczas gdy inny proces na tym samym hoście w przestrzeni B również nasłuchuje na porcie 80;
  • Zasady zapory ogniowej: własne, autonomiczne instancje reguł Netfilter (iptables / nftables);
  • Własny interfejs pętli zwrotnej (lo): izolowana komunikacja lokalna (127.0.0.1).
Network namespaces: Slajd przedstawia zagadnienie Izolacja stosu sieciowego w Linux w ramach tematu Network namespaces na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Network namespaces
16/50
Tworzenie i zarządzanie namespaceami
Cel slajdu: Slajd omawia zagadnienie „Tworzenie i zarządzanie namespaceami” w kontekście: Polecenia ip netns.

Polecenia ip netns

Praktyczne zarządzanie przestrzeniami sieciowymi w systemie operacyjnym

# 1. Tworzenie nowej przestrzeni nazw sieci (np. router-edge oraz dmz)
sudo ip netns add router-edge
sudo ip netns add dmz

# 2. Wyświetlenie listy zarejestrowanych przestrzeni
ip netns list

# 3. Wykonanie polecenia wewnątrz wskazanej przestrzeni nazw
sudo ip netns exec router-edge ip link show
sudo ip netns exec router-edge ip link set dev lo up

# 4. Nowoczesna składnia skrócona iproute2 (flaga -n)
sudo ip -n router-edge addr show
sudo ip -n router-edge route show

# 5. Uruchomienie interaktywnej powłoki bash wewnątrz przestrzeni
sudo ip netns exec dmz bash

# 6. Wejście do przestrzeni z użyciem nsenter (np. na podstawie PID procesu)
sudo nsenter --net=/var/run/netns/dmz ip addr

# 7. Usunięcie przestrzeni nazw (kasuje powiązany plik z /var/run/netns)
sudo ip netns del router-edge
Tworzenie i zarządzanie namespaceami: Slajd przedstawia zagadnienie Polecenia ip netns w ramach tematu Tworzenie i zarządzanie namespaceami na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Tworzenie i zarządzanie namespaceami
17/50
Łączenie namespaceów przez VETH pair
Cel slajdu: Slajd omawia zagadnienie „Łączenie namespaceów przez VETH pair” w kontekście: Połączenie bezpośrednie dwóch przestrzeni nazw.

Połączenie bezpośrednie dwóch przestrzeni nazw

Topologia punkt-punkt (Point-to-Point) łącząca dwa odizolowane środowiska

# 1. Tworzenie dwóch niezależnych przestrzeni nazw
sudo ip netns add red
sudo ip netns add blue

# 2. Utworzenie wirtualnej pary VETH na hoście
sudo ip link add veth-red type veth peer name veth-blue

# 3. Przeniesienie końców pary do odpowiednich przestrzeni
sudo ip link set veth-red netns red
sudo ip link set veth-blue netns blue

# 4. Konfiguracja adresacji IP i podniesienie interfejsów w przestrzeni 'red'
sudo ip -n red addr add 10.0.0.1/30 dev veth-red
sudo ip -n red link set dev veth-red up
sudo ip -n red link set dev lo up

# 5. Konfiguracja adresacji IP i podniesienie interfejsów w przestrzeni 'blue'
sudo ip -n blue addr add 10.0.0.2/30 dev veth-blue
sudo ip -n blue link set dev veth-blue up
sudo ip -n blue link set dev lo up

# 6. Test bezpośredniej łączności L3 (ping z red do blue)
sudo ip netns exec red ping -c 3 10.0.0.2
Łączenie namespaceów przez VETH pair: Slajd przedstawia zagadnienie Połączenie bezpośrednie dwóch przestrzeni nazw w ramach tematu Łączenie namespaceów przez VETH pair na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Łączenie namespaceów przez VETH pair
18/50
Łączenie namespaceów przez VETH z mostkiem
Cel slajdu: Slajd omawia zagadnienie „Łączenie namespaceów przez VETH z mostkiem” w kontekście: Topologia z mostkiem L2.

Topologia z mostkiem L2

Wzorzec architektoniczny gwiazdy stosowany w środowiskach kontenerowych

Połączenie punkt-punkt sprawdza się tylko dla dwóch przestrzeni. Gdy zachodzi potrzeba skomunikowania wielu środowisk (np. ns1, ns2, ns3), stosuje się topologię gwiazdy z mostkiem L2 na hoście:

# 1. Utworzenie wirtualnego przełącznika na hoście
sudo ip link add name br0 type bridge
sudo ip addr add 192.168.10.1/24 dev br0
sudo ip link set dev br0 up

# 2. Utworzenie przestrzeni nazw ns1 i pary VETH
sudo ip netns add ns1
sudo ip link add veth-ns1 type veth peer name veth-br1

# 3. Podłączenie końców: veth-ns1 do kontenera, veth-br1 do mostka
sudo ip link set veth-ns1 netns ns1
sudo ip link set veth-br1 master br0
sudo ip link set dev veth-br1 up

# 4. Adresacja w ns1 i ustawienie mostka jako domyślnej bramy
sudo ip -n ns1 addr add 192.168.10.11/24 dev veth-ns1
sudo ip -n ns1 link set dev veth-ns1 up
sudo ip -n ns1 link set dev lo up
sudo ip -n ns1 route add default via 192.168.10.1
Łączenie namespaceów przez VETH z mostkiem: Slajd przedstawia zagadnienie Topologia z mostkiem L2 w ramach tematu Łączenie namespaceów przez VETH z mostkiem na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Łączenie namespaceów przez VETH z mostkiem
19/50
Sprawdzanie izolacji
Cel slajdu: Slajd omawia zagadnienie „Sprawdzanie izolacji” w kontekście: Weryfikacja łączności i separacji sieciowej.

Weryfikacja łączności i separacji sieciowej

Metodyka testowania granic izolacji oraz integracji z routingiem hosta

# 1. Weryfikacja łączności między przestrzeniami przez mostek
sudo ip netns exec ns1 ping -c 2 192.168.10.12   # Ping do drugiego kontenera (ns2)
sudo ip netns exec ns1 ping -c 2 192.168.10.1    # Ping do bramy (interfejs br0 na hoście)

# 2. Dowód izolacji portów L4: uruchomienie dwóch serwerów na tym samym porcie
sudo ip netns exec ns1 python3 -m http.server 80 &
sudo ip netns exec ns2 python3 -m http.server 80 &
sudo ip netns exec ns1 ss -tlpn | grep :80        # Port 80 aktywny w ns1
ss -tlpn | grep :80                              # Na hoście port 80 pozostaje wolny!

# 3. Zapewnienie dostępu do Internetu dla przestrzeni nazw
# A. Włączenie przekazywania pakietów IPv4 w jądrze
sudo sysctl -w net.ipv4.ip_forward=1

# B. Włączenie maskarady adresów wychodzących na fizycznym interfejsie
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -o br0 -j MASQUERADE
Sprawdzanie izolacji: Slajd przedstawia zagadnienie Weryfikacja łączności i separacji sieciowej w ramach tematu Sprawdzanie izolacji na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Sprawdzanie izolacji
20/50
Zastosowania VETH i zaawansowane sterowniki: VLAN, Macvlan i Ipvlan
Cel slajdu: Slajd omawia zagadnienie „Zastosowania VETH i zaawansowane sterowniki: VLAN, Macvlan i Ipvlan” w kontekście: VLAN 802.1Q, Macvlan i Ipvlan w praktyce.

VLAN 802.1Q, Macvlan i Ipvlan w praktyce

Zaawansowane techniki wirtualizacji interfejsów alternatywne dla klasycznego mostka

Choć połączenie Bridge + VETH jest najbardziej elastyczne, system Linux oferuje wyspecjalizowane sterowniki zapewniające wyższą wydajność i bezpośrednią integrację z siecią fizyczną:

  • Obsługa VLAN (IEEE 802.1Q): tworzenie logicznych subinterfejsów znakowanych tagiem VLAN:
    sudo ip link add link eth0 name eth0.100 type vlan id 100
    Umożliwia separację ruchu na poziomie przełącznika sprzętowego i bezpośrednie mapowanie do mostków;
  • Sterownik Macvlan: tworzy wirtualne interfejsy z unikalnymi adresami MAC powiązane z jedną kartą fizyczną:
    • Tryb bridge: kontenery na tym samym porcie komunikują się bezpośrednio przez wewnętrzny przełącznik w pamięci;
    • Tryb VEPA (Virtual Ethernet Port Aggregator): ruch między kontenerami jest celowo wysyłany do zewnętrznego przełącznika sprzętowego (wymaga obsługi hairpin/802.1Qbg);
    • Tryb private: całkowita blokada komunikacji między wirtualnymi interfejsami na tym samym porcie.
  • Sterownik Ipvlan: współdzieli jeden fizyczny adres MAC karty, rozróżniając kontenery po adresach IP:
    • Ipvlan L2: przełączanie w warstwie 2 (wymaga unikalnych IP, obsługa broadcast/DHCP);
    • Ipvlan L3 / L3S: czyste trasowanie L3 wewnątrz jądra bez protokołu ARP, tryb L3S dodaje obsługę conntrack.
Zastosowania VETH i zaawansowane sterowniki: VLAN, Macvlan i Ipvlan: VLAN, Macvlan i Ipvlan: Slajd przedstawia zagadnienie VLAN 802.1Q, Macvlan i Ipvlan w praktyce w ramach tematu Zastosowania VETH i zaawansowane sterowniki: VLAN, Macvlan i Ipvlan na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Zastosowania VETH i zaawansowane sterowniki: VLAN, Macvlan i Ipvlan
21/50
Wprowadzenie do sieci w Dockerze
Cel slajdu: Slajd wprowadza zagadnienie „Wprowadzenie do sieci w Dockerze” w kontekście: Model CNM i wbudowane sterowniki sieciowe Dockera.

Model CNM i wbudowane sterowniki sieciowe Dockera

Architektura podsystemu libnetwork i abstrakcja warstwy sieciowej kontenerów

W środowisku Docker za wirtualizację sieci odpowiada biblioteka libnetwork, implementująca formalny model CNM (Container Network Model). Model ten definiuje trzy podstawowe obiekty:

  • Sandbox: izolowany stos sieciowy kontenera (reprezentowany przez strukturę netns w Linuksie);
  • Endpoint: punkt styku łączący piaskownicę z siecią (interfejs VETH lub Macvlan w kontenerze);
  • Network: logiczny zbiór powiązanych punktów końcowych tworzący odrębną domenę komunikacyjną.

Silnik Docker udostępnia zestaw wbudowanych sterowników sieciowych (network drivers):

  • bridge: domyślny sterownik tworzący wirtualny mostek L2 i pary VETH;
  • host: współdzielenie stosu sieciowego bezpośrednio z maszyną hosta bez izolacji;
  • none: całkowicie odizolowany kontener wyłącznie z interfejsem pętli zwrotnej lo;
  • macvlan / ipvlan: bezpośrednie łączenie kontenerów z fizyczną siecią L2/L3 serwera;
  • overlay: wielowęzłowa sieć nakładkowa oparta na enkapsulacji VXLAN i protokole EVPN/BGP.
Wprowadzenie do sieci w Dockerze: Slajd przedstawia zagadnienie Model CNM i wbudowane sterowniki sieciowe Dockera w ramach tematu Wprowadzenie do sieci w Dockerze na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Wprowadzenie do sieci w Dockerze
22/50
Tryb none - całkowita izolacja sieciowa
Cel slajdu: Slajd omawia zagadnienie „Tryb none - całkowita izolacja sieciowa” w kontekście: Kontener bez dostępu do sieci (--network none).

Kontener bez dostępu do sieci (--network none)

Maksymalny poziom cyberbezpieczeństwa dla procesów niewymagających łączności

# Uruchomienie kontenera w trybie całkowitej izolacji sieciowej
docker run -d --name isolated-worker --network none alpine sleep 3600

# Weryfikacja interfejsów sieciowych wewnątrz kontenera
docker exec isolated-worker ip addr show

# Wynik: dostępny jest wyłącznie podniesiony interfejs pętli zwrotnej
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo

Typowe scenariusze zastosowania:

  • Przetwarzanie wsadowe (batch jobs): obliczenia na lokalnych wolumenach danych bez ryzyka wycieku informacji do sieci;
  • Generowanie kluczy kryptograficznych i certyfikatów: bezpieczne środowisko air-gap wewnątrz serwera;
  • Analiza złośliwego oprogramowania (sandboxing): uruchamianie podejrzanego kodu bez możliwości kontaktu z serwerami C&C (Command and Control);
  • Testy jednostkowe: walidacja logiki aplikacji niewymagającej komunikacji sieciowej.
Tryb none - całkowita izolacja sieciowa: Slajd przedstawia zagadnienie Kontener bez dostępu do sieci (--network none) w ramach tematu Tryb none - całkowita izolacja sieciowa na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Tryb none - całkowita izolacja sieciowa
23/50
Tryb host - współdzielenie stosu z hostem
Cel slajdu: Slajd omawia zagadnienie „Tryb host - współdzielenie stosu z hostem” w kontekście: Brak izolacji sieciowej (--network host).

Brak izolacji sieciowej (--network host)

Maksymalna wydajność kosztem całkowitej rezygnacji z separacji sieciowej

# Uruchomienie serwera Nginx bezpośrednio na stosie sieciowym hosta
docker run -d --name web-host --network host nginx

# Weryfikacja gniazd nasłuchujących w systemie hosta
ss -tlpn | grep :80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=14205,fd=6))
Zalety trybu host Wady i zagrożenia
Maksymalna przepustowość: brak narzutu mostka, par VETH i translacji adresów NAT Konflikty portów: dwa kontenery nie mogą nasłuchiwać na tym samym porcie TCP/UDP
Zerowe opóźnienia (Zero-latency): bezpośredni dostęp do kolejek RX/TX karty sieciowej Brak separacji bezpieczeństwa: kontener widzi cały ruch sieciowy hosta i innych usług
Brak konieczności mapowania portów: opcja -p jest ignorowana Ryzyko uprawnień: kontener z uprawnieniami roota może modyfikować routing serwera
Tryb host - współdzielenie stosu z hostem: Slajd przedstawia zagadnienie Brak izolacji sieciowej (--network host) w ramach tematu Tryb host - współdzielenie stosu z hostem na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Tryb host - współdzielenie stosu z hostem
24/50
Tryb bridge - domyślna sieć Docker
Cel slajdu: Slajd omawia zagadnienie „Tryb bridge - domyślna sieć Docker” w kontekście: Prywatna sieć mostka docker0.

Prywatna sieć mostka docker0

Standardowy model sieciowy kontenerów pojedynczego hosta

Domyślnym trybem sieciowym w środowisku Docker jest bridge. Podczas startu demona dockerd system tworzy wirtualny mostek sieciowy o nazwie docker0 i przydziela mu prywatną podsieć (standardowo 172.17.0.0/16 wg RFC 1918).

Architektura połączenia kontenera w trybie bridge:

  1. Docker tworzy dla kontenera dedykowaną przestrzeń nazw sieci (netns);
  2. W jądrze powoływana jest wirtualna para interfejsów Ethernet (VETH);
  3. Jeden koniec pary zostaje przeniesiony do przestrzeni kontenera i przemianowany na eth0;
  4. Drugi koniec pary pozostaje na hoście (z losową nazwą np. veth3a9b1c) i zostaje podłączony do mostka docker0 jako port podrzędny (slave);
  5. Wbudowany komponent IPAM przydziela kontenerowi kolejny wolny adres IP (np. 172.17.0.2);
  6. Mostek docker0 (172.17.0.1) zostaje ustawiony jako brama domyślna w kontenerze.
Tryb bridge - domyślna sieć Docker: Slajd przedstawia zagadnienie Prywatna sieć mostka docker0 w ramach tematu Tryb bridge - domyślna sieć Docker na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Tryb bridge - domyślna sieć Docker
25/50
Budowa mostka docker0
Cel slajdu: Slajd omawia zagadnienie „Budowa mostka docker0” w kontekście: Adresacja IP, parametry jądra i konfiguracja demona.

Adresacja IP, parametry jądra i konfiguracja demona

Parametry domyślnej sieci Docker oraz konfiguracja w pliku daemon.json

# Podgląd parametrów mostka docker0 na hoście
ip addr show dev docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:e2:d5:b1:20 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

Dostosowanie parametrów w /etc/docker/daemon.json:

{
  "bip": "192.168.50.1/24",
  "fixed-cidr": "192.168.50.0/24",
  "mtu": 1500,
  "default-gateway": "192.168.50.1",
  "dns": ["1.1.1.1", "8.8.8.8"]
}
  • bip (Bridge IP): bazowy adres IP i maska podsieci przypisywana do interfejsu docker0;
  • Konflikt adresacji: jeśli domyślna podsieć 172.17.0.0/16 koliduje z firmową siecią LAN, zmiana parametru bip w daemon.json jest obowiązkowa!
Budowa mostka docker0: Slajd przedstawia zagadnienie Adresacja IP, parametry jądra i konfiguracja demona w ramach tematu Budowa mostka docker0 na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Budowa mostka docker0
26/50
Komunikacja między kontenerami w sieci bridge
Cel slajdu: Slajd omawia zagadnienie „Komunikacja między kontenerami w sieci bridge” w kontekście: Komunikacja L2 i izolacja interkontenerowa (ICC).

Komunikacja L2 i izolacja interkontenerowa (ICC)

Wymiana ruchu wewnątrz mostka oraz zabezpieczanie komunikacji za pomocą flagi ICC

Kontenery podłączone do tego samego mostka znajdują się w tej samej domenie L2 i mogą domyślnie komunikować się bezpośrednio po swoich prywatnych adresach IP:

# Uruchomienie dwóch kontenerów w domyślnej sieci bridge
docker run -d --name c1 alpine sleep 3600
docker run -d --name c2 alpine sleep 3600

# Sprawdzenie adresu IP kontenera c2 i ping z c1
docker inspect -f '{{.NetworkSettings.IPAddress}}' c2    # Zwraca np. 172.17.0.3
docker exec c1 ping -c 2 172.17.0.3                      # Komunikacja bezpośrednia działa!

Zarządzanie bezpieczeństwem – parametr ICC (Inter-Container Communication):

  • --icc=true (domyślnie): kontenery w sieci bridge mają pełną swobodę wzajemnej komunikacji; w tabeli filter łańcucha FORWARD reguła zezwala na ruch: -i docker0 -o docker0 -j ACCEPT;
  • --icc=false: całkowita blokada komunikacji między kontenerami; w łańcuchu FORWARD instalowana jest reguła odrzucająca: -i docker0 -o docker0 -j DROP. Kontenery mogą komunikować się wyłącznie ze światem zewnętrznym, nie widząc się nawzajem.
Komunikacja między kontenerami w sieci bridge: Slajd przedstawia zagadnienie Komunikacja L2 i izolacja interkontenerowa (ICC) w ramach tematu Komunikacja między kontenerami w sieci bridge na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Komunikacja między kontenerami w sieci bridge
27/50
Zarządzanie sieciami Docker
Cel slajdu: Slajd omawia zagadnienie „Zarządzanie sieciami Docker” w kontekście: Polecenia CLI rodziny docker network.

Polecenia CLI rodziny docker network

Podstawowe i zaawansowane operacje zarządzania topologią w Dockerze

# 1. Wyświetlenie listy dostępnych sieci sieciowych
docker network ls

# 2. Utworzenie nowej sieci typu bridge ze zdefiniowaną podsiecią
docker network create --driver bridge   --subnet 10.100.0.0/24   --gateway 10.100.0.1   custom-net

# 3. Szczegółowa inspekcja parametrów sieci (format JSON)
docker network inspect custom-net

# 4. Podłączenie działającego kontenera do dodatkowej sieci
docker network connect custom-net my-container

# 5. Odłączenie kontenera od wskazanej sieci
docker network disconnect custom-net my-container

# 6. Usunięcie nieużywanych sieci (czyszczenie środowiska)
docker network prune -f
Zarządzanie sieciami Docker: Slajd przedstawia zagadnienie Polecenia CLI rodziny docker network w ramach tematu Zarządzanie sieciami Docker na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Zarządzanie sieciami Docker
28/50
Sieci zdefiniowane przez użytkownika
Cel slajdu: Slajd omawia zagadnienie „Sieci zdefiniowane przez użytkownika” w kontekście: User-defined bridge - zaawansowane właściwości i DNS.

User-defined bridge - zaawansowane właściwości i DNS

Dlaczego w środowiskach produkcyjnych należy unikać domyślnego mostka docker0

W środowiskach profesjonalnych standardem jest tworzenie własnych sieci mostkowanych (User-defined bridge). Oferują one kluczowe przewagi nad domyślnym mostkiem docker0:

  • Wbudowany serwer DNS (Service Discovery):
    • W sieciach użytkownika Docker uruchamia wewnętrzny serwer DNS pod adresem 127.0.0.11;
    • Kontenery mogą komunikować się po swoich nazwach (np. curl http://database:5432), bez znajomości zmiennych adresów IP;
    • W domyślnym mostku docker0 DNS nie działa (wymaga przestarzałej flagi --link).
  • Automatyczna izolacja środowisk: kontenery w sieci A są całkowicie odseparowane od kontenerów w sieci B;
  • Dynamiczne podłączanie i odłączanie: możliwość łączenia kontenerów „w locie” (docker network connect);
  • Konfigurowalne parametry: pełna kontrola nad MTU, maską podsieci oraz opcjami bezpieczeństwa.
Sieci zdefiniowane przez użytkownika: Slajd przedstawia zagadnienie User-defined bridge - zaawansowane właściwości i DNS w ramach tematu Sieci zdefiniowane przez użytkownika na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Sieci zdefiniowane przez użytkownika
29/50
Zaawansowane sterowniki: Macvlan, Ipvlan i sieć nakładkowa Overlay
Cel slajdu: Slajd omawia zagadnienie „Zaawansowane sterowniki: Macvlan, Ipvlan i sieć nakładkowa Overlay” w kontekście: Multi-host networking, VXLAN i protokół EVPN/BGP.

Multi-host networking, VXLAN i protokół EVPN/BGP

Skalowanie sieci kontenerowych w klastrach wielowęzłowych i centrach danych

W środowiskach produkcyjnych obejmujących wiele serwerów fizycznych lub wymagających bezpośredniej integracji z siecią korporacyjną stosuje się zaawansowane sterowniki:

  • Sterownik Overlay (Sieci nakładkowe):
    • Łączy kontenery pracujące na różnych hostach w jedną wirtualną sieć L2;
    • Wykorzystuje standard VXLAN (Virtual Extensible LAN, RFC 7348): pakiety L2 kontenera są enkapsulowane w datagramy UDP na porcie 4789;
    • Płaszczyzna sterowania (Control Plane): w Docker Swarm rozproszony protokół Gossip; w sieciach operatorskich protokół EVPN / BGP (RFC 7432 / RFC 8365).
  • Sterownik Macvlan w Dockerze:
    docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macvlan-net
    Kontenery otrzymują unikalne adresy MAC i stają się bezpośrednimi urządzeniami w fizycznej sieci LAN;
  • Sterownik Ipvlan w Dockerze: kontenery współdzielą MAC interfejsu eth0 hosta, oszczędzając zasoby przełączników fizycznych i eliminując konieczność trybu promiscuous.
Zaawansowane sterowniki: Macvlan, Ipvlan i sieć nakładkowa Overlay: Macvlan, Ipvlan i sieć nakładkowa Overlay: Slajd przedstawia zagadnienie Multi-host networking, VXLAN i protokół EVPN/BGP w ramach tematu Zaawansowane sterowniki: Macvlan, Ipvlan i sieć nakładkowa Overlay na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Zaawansowane sterowniki: Macvlan, Ipvlan i sieć nakładkowa Overlay
30/50
Ograniczenia sieci mostka domyślnego
Cel slajdu: Slajd omawia zagadnienie „Ograniczenia sieci mostka domyślnego” w kontekście: Wady docker0 i zalecenia produkcyjne.

Wady docker0 i zalecenia produkcyjne

Zestawienie ryzyk i ograniczeń architektonicznych domyślnego mostka Docker

Cecha Domyślny mostek docker0 Sieć User-defined bridge
Rezolucja nazw (DNS) Brak wbudowanego DNS; tylko statyczne --link lub IP Automatyczny DNS pod 127.0.0.11 po nazwach kontenerów
Izolacja kontenerów Wszystkie kontenery w jednej puli (ryzyko ataku bocznego) Pełna separacja L2/L3 między niezależnymi sieciami
Dynamiczna konfiguracja Wymaga restartu kontenera w celu zmiany parametrów Podłączanie/odłączanie w locie (network connect)
Dostosowanie IPAM/MTU Trudna rekonfiguracja w pliku daemon.json (wymaga restartu) Indywidualna podsieć, brama i MTU dla każdej sieci
Rekomendacja Tylko proste testy deweloperskie Standard bezwzględny dla środowisk produkcyjnych
Ograniczenia sieci mostka domyślnego: Slajd przedstawia zagadnienie Wady docker0 i zalecenia produkcyjne w ramach tematu Ograniczenia sieci mostka domyślnego na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Ograniczenia sieci mostka domyślnego
31/50
Ujawnianie portów - mechanizm -p w Dockerze
Cel slajdu: Slajd omawia zagadnienie „Ujawnianie portów - mechanizm -p w Dockerze” w kontekście: Publikowanie portów kontenera na hoście.

Publikowanie portów kontenera na hoście

Zasada działania opcji -p (--publish) i mapowanie portów L4

# Składnia podstawowa: publikacja portu na wszystkich interfejsach hosta (0.0.0.0)
docker run -d --name my-web -p 8080:80 nginx

# Publikacja z jawnym określeniem protokołu transportowego (TCP lub UDP)
docker run -d --name dns-server -p 53:53/udp -p 53:53/tcp bind9

# Publikacja na wybranym adresie IP hosta (np. tylko pętla zwrotna localhost)
docker run -d --name db-local -p 127.0.0.1:5432:5432 postgres

Dwa równoległe mechanizmy realizujące publikację portu:

  • Reguły DNAT w podsystemie Netfilter (iptables): pakiety sieciowe przychodzące z sieci zewnętrznej są w locie modyfikowane w jądrze (przepisywany jest docelowy adres IP i port na prywatny adres kontenera);
  • Proces pomocniczy docker-proxy: proces w przestrzeni użytkownika (user space) nasłuchujący na zadanym porcie hosta w celu obsługi ruchu lokalnego pochodzącego z samego serwera (np. pętla zwrotna 127.0.0.1).
Ujawnianie portów - mechanizm -p w Dockerze: Slajd przedstawia zagadnienie Publikowanie portów kontenera na hoście w ramach tematu Ujawnianie portów - mechanizm -p w Dockerze na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Ujawnianie portów - mechanizm -p w Dockerze
32/50
Co Docker robi pod maską - DNAT w iptables
Cel slajdu: Slajd omawia zagadnienie „Co Docker robi pod maską - DNAT w iptables” w kontekście: Translacja adresów docelowych w iptables.

Translacja adresów docelowych w iptables

Ścieżka pakietu przez łańcuchy Netfilter podczas publikowania usług

W momencie publikacji portu demon dockerd automatycznie wstrzykuje precyzyjne reguły do podsystemu Netfilter w jądrze Linuksa:

  1. Tabela nat, łańcuch PREROUTING: pakiety przychodzące z sieci zewnętrznej trafiają do dedykowanego łańcucha DOCKER;
  2. Łańcuch DOCKER (tabela nat): reguła DNAT (Destination NAT) modyfikuje nagłówek pakietu IP/TCP:
    -A DOCKER -p tcp -m tcp --dport 8080 -j DNAT --to-destination 172.17.0.2:80
    Docelowy adres IP i port hosta zostają zamienione na adres IP i port kontenera;
  3. Decyzja o routingu (Routing Decision): jądro sprawdza tablicę FIB i stwierdza, że adres 172.17.0.2 jest osiągalny przez lokalny interfejs mostka docker0;
  4. Tabela filter, łańcuch FORWARD: pakiet trafia do łańcucha DOCKER w tabeli filter, gdzie reguła ACCEPT zezwala na przekazanie pakietu przez mostek do interfejsu kontenera.
Co Docker robi pod maską - DNAT w iptables: Slajd przedstawia zagadnienie Translacja adresów docelowych w iptables w ramach tematu Co Docker robi pod maską - DNAT w iptables na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Co Docker robi pod maską - DNAT w iptables
33/50
Przykład: docker run -p 8080:80 nginx
Cel slajdu: Slajd omawia zagadnienie „Przykład: docker run -p 8080:80 nginx” w kontekście: Analiza reguł DNAT krok po kroku.

Analiza reguł DNAT krok po kroku

Rzeczywisty zrzut reguł iptables po uruchomieniu kontenera Nginx

# 1. Uruchomienie kontenera Nginx z mapowaniem portu
docker run -d --name web-prod -p 8080:80 nginx

# 2. Podgląd reguły DNAT w tabeli 'nat' (łańcuch DOCKER)
sudo iptables -t nat -n -L DOCKER --line-numbers
num  target  prot opt source       destination
1    DNAT    tcp  --  0.0.0.0/0    0.0.0.0/0    tcp dpt:8080 to:172.17.0.2:80

# 3. Podgląd reguły zezwalającej w tabeli 'filter' (łańcuch DOCKER)
sudo iptables -n -L DOCKER --line-numbers
num  target  prot opt source       destination
1    ACCEPT  tcp  --  0.0.0.0/0    172.17.0.2   tcp dpt:80

# 4. Podgląd reguły powrotnej w łańcuchu POSTROUTING (MASQUERADE)
sudo iptables -t nat -n -L POSTROUTING | grep MASQUERADE
MASQUERADE  all  --  172.17.0.2    0.0.0.0/0
Przykład: docker run -p 8080:80 nginx: docker run -p 8080:80 nginx: Slajd przedstawia zagadnienie Analiza reguł DNAT krok po kroku w ramach tematu Przykład: docker run -p 8080:80 nginx na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Przykład: docker run -p 8080:80 nginx
34/50
Automatyczne zarządzanie iptables przez Docker
Cel slajdu: Slajd omawia zagadnienie „Automatyczne zarządzanie iptables przez Docker” w kontekście: Jak Docker utrzymuje reguły iptables.

Jak Docker utrzymuje reguły iptables

Interakcja demona dockerd z podsystemem zapory sieciowej i konflikty z UFW

Demon Dockera (dockerd) automatycznie synchronizuje stan reguł w jądrze przy każdym zdarzeniu cyklu życia kontenera (start, zatrzymanie, restart, usunięcie):

  • Opcja konfiguracyjna "iptables": true: domyślnie aktywna w daemon.json; wyłączenie jej (false) blokuje automatyczne reguły, ale zmusza administratora do ręcznego definiowania skomplikowanych reguł NAT i FORWARD dla każdego kontenera;
  • Niebezpieczny konflikt z zaporą UFW (Uncomplicated Firewall):
    • UFW standardowo konfiguruje reguły w łańcuchach INPUT i FORWARD;
    • Docker wstrzykuje regułę przekierowującą w łańcuchu PREROUTING przed regułami UFW!
    • Krytyczny skutek: opublikowanie portu (np. -p 8080:80) omija reguły UFW. Nawet jeśli UFW zablokuje port 8080 poleceniem ufw deny 8080, kontener nadal będzie dostępny z Internetu!
  • Rozwiązanie: wykorzystanie łańcucha DOCKER-USER do definiowania własnych ograniczeń dostępu.
Automatyczne zarządzanie iptables przez Docker: Slajd przedstawia zagadnienie Jak Docker utrzymuje reguły iptables w ramach tematu Automatyczne zarządzanie iptables przez Docker na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Automatyczne zarządzanie iptables przez Docker
35/50
Sprawdzanie reguł iptables dla Dockera
Cel slajdu: Slajd omawia zagadnienie „Sprawdzanie reguł iptables dla Dockera” w kontekście: Polecenia do inspekcji iptables.

Polecenia do inspekcji iptables

Weryfikacja tabel nat i filter oraz diagnostyka przepływu ruchu

# 1. Podgląd reguł translacji DNAT w tabeli 'nat' z licznikami pakietów
sudo iptables -t nat -nvL DOCKER

# 2. Podgląd reguł filtrujących w tabeli 'filter' (łańcuch FORWARD i DOCKER)
sudo iptables -nvL FORWARD --line-numbers
sudo iptables -nvL DOCKER --line-numbers

# 3. Podgląd stanu łańcucha DOCKER-USER (własne reguły administratora)
sudo iptables -nvL DOCKER-USER

# 4. Inspekcja aktywnych sesji translacji w tablicy conntrack
sudo conntrack -L -p tcp --dport 80

# 5. Podgląd reguł maskarady (SNAT) dla ruchu wychodzącego z kontenerów
sudo iptables -t nat -nvL POSTROUTING | grep -E 'MASQUERADE|docker'
  • Flaga -n: wyłącza czasochłonne rozwiązywanie nazw DNS (pokazuje surowe adresy IP i porty);
  • Flaga -v: wyświetla liczniki przetworzonych pakietów (pkts) oraz przesłanych bajtów (bytes).
Sprawdzanie reguł iptables dla Dockera: Slajd przedstawia zagadnienie Polecenia do inspekcji iptables w ramach tematu Sprawdzanie reguł iptables dla Dockera na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Sprawdzanie reguł iptables dla Dockera
36/50
Łańcuch DOCKER w iptables
Cel slajdu: Slajd omawia zagadnienie „Łańcuch DOCKER w iptables” w kontekście: Struktura i działanie łańcuchów DOCKER, DOCKER-ISOLATION i DOCKER-USER.

Struktura i działanie łańcuchów DOCKER, DOCKER-ISOLATION i DOCKER-USER

Architektura łańcuchów Netfilter i bezpieczne filtrowanie ruchu kontenerów

W celu zachowania porządku architektonicznego Docker tworzy hierarchię wyspecjalizowanych łańcuchów w tabelach nat oraz filter:

  • DOCKER (tabela nat): zawiera reguły DNAT dla publikowanych portów;
  • DOCKER (tabela filter): zawiera automatyczne reguły ACCEPT dla opublikowanych portów kontenerów;
  • DOCKER-ISOLATION-STAGE-1 / 2 (tabela filter): gwarantują separację logiczną między różnymi sieciami mostkowanymi użytkownika;
  • DOCKER-USER (tabela filter): oficjalne, dedykowane miejsce na własne reguły administratora.
Złota zasada bezpieczeństwa: Nigdy nie edytuj ręcznie łańcucha DOCKER – demon nadpisuje go automatycznie! Wszystkie własne reguły blokujące lub zezwalające należy wstawiać do łańcucha DOCKER-USER. Reguły w tym łańcuchu są ewaluowane przed regułami Dockera.
Łańcuch DOCKER w iptables: Slajd przedstawia zagadnienie Struktura i działanie łańcuchów DOCKER, DOCKER-ISOLATION i DOCKER-USER w ramach tematu Łańcuch DOCKER w iptables na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Łańcuch DOCKER w iptables
37/50
Port publishing z ograniczeniem do konkretnego IP
Cel slajdu: Slajd omawia zagadnienie „Port publishing z ograniczeniem do konkretnego IP” w kontekście: Ograniczanie dostępu do publikowanych portów.

Ograniczanie dostępu do publikowanych portów

Zabezpieczanie usług przed publicznym dostępem za pomocą składni IP:Port

Domyślna składnia -p 8080:80 publikuje usługę na adresie 0.0.0.0 (wszystkie interfejsy serwera). Aby ograniczyć zasięg sieciowy usługi, należy jawnie wskazać adres IP interfejsu hosta:

# 1. Publikacja wyłącznie na interfejsie lokalnym pętli zwrotnej (localhost)
docker run -d --name internal-api -p 127.0.0.1:8080:80 my-api
# Dostępny wyłącznie lokalnie z poziomu hosta (np. dla lokalnego Nginx Reverse Proxy)

# 2. Publikacja na dedykowanym interfejsie sieci wewnętrznej LAN lub VPN
docker run -d --name db-admin -p 10.20.0.5:8080:80 admin-panel
# Usługa osiągalna tylko z bezpiecznej podsieci administracyjnej 10.20.0.0/24!

# 3. Zabezpieczenie na poziomie DOCKER-USER: dostęp tylko z zaufanego IP
sudo iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.150 -p tcp --dport 80 -j DROP

Dobra praktyka produkcyjna: Bazy danych (PostgreSQL, MySQL, Redis) oraz panele administracyjne nigdy nie powinny być publikowane na 0.0.0.0! Należy bindować je do 127.0.0.1 lub sieci VPN.

Port publishing z ograniczeniem do konkretnego IP: Slajd przedstawia zagadnienie Ograniczanie dostępu do publikowanych portów w ramach tematu Port publishing z ograniczeniem do konkretnego IP na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Port publishing z ograniczeniem do konkretnego IP
38/50
Różnica między -p a --publish-all
Cel slajdu: Slajd omawia zagadnienie „Różnica między -p a --publish-all” w kontekście: Publikowanie selektywne (-p) vs automatyczne (-P).

Publikowanie selektywne (-p) vs automatyczne (-P)

Rola dyrektywy EXPOSE w Dockerfile oraz dynamiczna alokacja portów ephemeral

Cecha Opcja -p (lub --publish) Opcja -P (lub --publish-all)
Sposób mapowania Jawne określenie portów: hostPort:containerPort Automatyczne mapowanie wszystkich portów z EXPOSE
Wybór portu hosta Statyczny, wskazany przez administratora (np. 8080) Losowy port z puli ephemeral (np. 32768–60999)
Wymóg dyrektywy EXPOSE Nie (można opublikować dowolny port kontenera) Tak (publikuje tylko porty zadeklarowane w Dockerfile)
Przewidywalność portu Wysoka (stały port po restarcie) Niska (inny port po każdym restarcie kontenera)

Status instrukcji EXPOSE w Dockerfile: stanowi jedynie metadane dokumentacyjne dla administratora; sama w sobie nie otwiera ani nie publikuje żadnego portu w systemie!

Różnica między -p a --publish-all: Slajd przedstawia zagadnienie Publikowanie selektywne (-p) vs automatyczne (-P) w ramach tematu Różnica między -p a --publish-all na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Różnica między -p a --publish-all
39/50
Wprowadzenie do laboratorium
Cel slajdu: Slajd wprowadza zagadnienie „Wprowadzenie do laboratorium” w kontekście: Cel i środowisko laboratoryjne.

Cel i środowisko laboratoryjne

Manualna symulacja architektury Dockera w czystym systemie Linux

Celem warsztatu laboratoryjnego (slajdy 40–44) jest samodzielne, manualne zbudowanie pełnej infrastruktury sieciowej kontenerów z wykorzystaniem wyłącznie bazowych narzędzi jądra Linuksa, bez uruchamiania demona Docker.

Zakres realizowanego ćwiczenia inżynierskiego:

  • Krok 1 (slajd 40): utworzenie przestrzeni nazw ns1 i ns2 oraz wirtualnego mostka br0;
  • Krok 2 (slajd 41): stworzenie wirtualnych par Ethernet (VETH) i podłączenie ich do mostka;
  • Krok 3 (slajd 42): konfiguracja adresacji IP, interfejsu lo oraz tras bramy domyślnej;
  • Krok 4 (slajd 43): testy łączności ICMP L2/L3, forwarding w jądrze i maskarada SNAT;
  • Krok 5 (slajd 44): ręczna implementacja mechanizmu -p 8080:80 z regułami DNAT w iptables.
Wymagania środowiskowe: System Linux z uprawnieniami roota (sudo), zainstalowany pakiet iproute2, iptables, conntrack oraz curl.
Wprowadzenie do laboratorium: Slajd przedstawia zagadnienie Cel i środowisko laboratoryjne w ramach tematu Wprowadzenie do laboratorium na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Wprowadzenie do laboratorium
40/50
Krok 1: Tworzenie przestrzeni nazw
Cel slajdu: Slajd omawia zagadnienie „Krok 1: Tworzenie przestrzeni nazw” w kontekście: ip netns add i przygotowanie mostka.

ip netns add i przygotowanie mostka

Laboratorium Krok 1: Inicjalizacja odizolowanych środowisk i wirtualnego przełącznika

# 1. Utworzenie dwóch izolowanych przestrzeni nazw sieci (odpowiedniki kontenerów)
sudo ip netns add ns1
sudo ip netns add ns2

# Weryfikacja: przestrzenie są zarejestrowane w systemie
ip netns list

# 2. Utworzenie wirtualnego mostka L2 na hoście (odpowiednik docker0)
sudo ip link add name br0 type bridge

# 3. Przypisanie mostkowi adresu IP bramy sieciowej
sudo ip addr add 192.168.100.1/24 dev br0

# 4. Podniesienie interfejsu mostka
sudo ip link set dev br0 up

# Weryfikacja stanu mostka na hoście
ip addr show dev br0
Krok 1: Tworzenie przestrzeni nazw: Tworzenie przestrzeni nazw: Slajd przedstawia zagadnienie ip netns add i przygotowanie mostka w ramach tematu Krok 1: Tworzenie przestrzeni nazw na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Krok 1: Tworzenie przestrzeni nazw
41/50
Krok 2: Tworzenie par VETH i podłączanie do mostka
Cel slajdu: Slajd omawia zagadnienie „Krok 2: Tworzenie par VETH i podłączanie do mostka” w kontekście: ip link add type veth peer i wpięcie do br0.

ip link add type veth peer i wpięcie do br0

Laboratorium Krok 2: Wirtualne okablowanie łączące przestrzenie z mostkiem

# 1. Utworzenie wirtualnej pary VETH dla pierwszej przestrzeni (ns1)
sudo ip link add veth1 type veth peer name veth1-br

# 2. Przeniesienie końcówki veth1 do przestrzeni ns1
sudo ip link set veth1 netns ns1

# 3. Podłączenie końcówki veth1-br do mostka br0 i aktywacja
sudo ip link set dev veth1-br master br0
sudo ip link set dev veth1-br up

# 4. Utworzenie wirtualnej pary VETH dla drugiej przestrzeni (ns2)
sudo ip link add veth2 type veth peer name veth2-br

# 5. Przeniesienie końcówki veth2 do przestrzeni ns2
sudo ip link set veth2 netns ns2

# 6. Podłączenie końcówki veth2-br do mostka br0 i aktywacja
sudo ip link set dev veth2-br master br0
sudo ip link set dev veth2-br up

# Weryfikacja portów wpiętych do mostka
bridge link show dev br0
Krok 2: Tworzenie par VETH i podłączanie do mostka: Tworzenie par VETH i podłączanie do mostka: Slajd przedstawia zagadnienie ip link add type veth peer i wpięcie do br0 w ramach tematu Krok 2: Tworzenie par VETH i podłączanie do mostka na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Krok 2: Tworzenie par VETH i podłączanie do mostka
42/50
Krok 3: Konfiguracja adresacji IP
Cel slajdu: Slajd omawia zagadnienie „Krok 3: Konfiguracja adresacji IP” w kontekście: Adresy IP w przestrzeniach nazw i brama domyślna.

Adresy IP w przestrzeniach nazw i brama domyślna

Laboratorium Krok 3: Konfiguracja stosu L3 i tablicy routingu w kontenerach

# 1. Konfiguracja stosu sieciowego w przestrzeni ns1
sudo ip -n ns1 addr add 192.168.100.11/24 dev veth1
sudo ip -n ns1 link set dev veth1 up
sudo ip -n ns1 link set dev lo up
sudo ip -n ns1 route add default via 192.168.100.1 dev veth1

# 2. Konfiguracja stosu sieciowego w przestrzeni ns2
sudo ip -n ns2 addr add 192.168.100.12/24 dev veth2
sudo ip -n ns2 link set dev veth2 up
sudo ip -n ns2 link set dev lo up
sudo ip -n ns2 route add default via 192.168.100.1 dev veth2

# 3. Weryfikacja tablicy routingu wewnątrz przestrzeni ns1
sudo ip netns exec ns1 ip route show
default via 192.168.100.1 dev veth1
192.168.100.0/24 dev veth1 proto kernel scope link src 192.168.100.11
Krok 3: Konfiguracja adresacji IP: Konfiguracja adresacji IP: Slajd przedstawia zagadnienie Adresy IP w przestrzeniach nazw i brama domyślna w ramach tematu Krok 3: Konfiguracja adresacji IP na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Krok 3: Konfiguracja adresacji IP
43/50
Krok 4: Test łączności
Cel slajdu: Slajd omawia zagadnienie „Krok 4: Test łączności” w kontekście: Ping między przestrzeniami nazw i routing L3.

Ping między przestrzeniami nazw i routing L3

Laboratorium Krok 4: Weryfikacja komunikacji wewnętrznej i uruchomienie dostępu do Internetu

# 1. Test komunikacji bezpośredniej L2 między ns1 a ns2 przez mostek
sudo ip netns exec ns1 ping -c 3 192.168.100.12
# Wynik: 0% packet loss, opóźnienia submilisekundowe (RAM)

# 2. Test osiągalności wirtualnej bramy na hoście (br0)
sudo ip netns exec ns1 ping -c 2 192.168.100.1

# 3. Podgląd wpisów FDB mostka nauczonych podczas testu ping
bridge fdb show br br0

# 4. Zapewnienie wyjścia na świat (dostęp do Internetu dla kontenerów):
# A. Włączenie forwardingu pakietów IPv4 w jądrze
sudo sysctl -w net.ipv4.ip_forward=1

# B. Włączenie maskarady NAT na interfejsie wychodzącym hosta (np. eth0)
sudo iptables -t nat -A POSTROUTING -s 192.168.100.0/24 ! -o br0 -j MASQUERADE

# 5. Test łączności ze światem z wnętrza przestrzeni ns1
sudo ip netns exec ns1 ping -c 2 1.1.1.1
Krok 4: Test łączności: Test łączności: Slajd przedstawia zagadnienie Ping między przestrzeniami nazw i routing L3 w ramach tematu Krok 4: Test łączności na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Krok 4: Test łączności
44/50
Krok 5: Symulacja -p z iptables DNAT
Cel slajdu: Slajd omawia zagadnienie „Krok 5: Symulacja -p z iptables DNAT” w kontekście: Ręczne dodanie reguły DNAT dla portu 8080:80.

Ręczne dodanie reguły DNAT dla portu 8080:80

Laboratorium Krok 5: Odtworzenie publikacji portu Dockera (-p 8080:80)

# 1. Uruchomienie serwera WWW wewnątrz przestrzeni ns1 (nasłuch na porcie 80)
sudo ip netns exec ns1 python3 -m http.server 80 &

# Weryfikacja: serwer odpowiada lokalnie z wnętrza ns1
sudo ip netns exec ns1 curl -I http://127.0.0.1:80

# 2. Ręczne dodanie reguły DNAT w tabeli 'nat' (odpowiednik reguły Dockera)
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080   -j DNAT --to-destination 192.168.100.11:80

# 3. Dodanie reguły zezwalającej na forwarding pakietów w tabeli 'filter'
sudo iptables -A FORWARD -p tcp -d 192.168.100.11 --dport 80 -j ACCEPT

# 4. Test dostępu do usługi kontenerowej z poziomu zewnętrznego klienta LAN:
curl http://192.168.1.100:8080
# Wynik: odpowiedź serwera HTTP z wnętrza izolowanej przestrzeni ns1!
Krok 5: Symulacja -p z iptables DNAT: Symulacja -p z iptables DNAT: Slajd przedstawia zagadnienie Ręczne dodanie reguły DNAT dla portu 8080:80 w ramach tematu Krok 5: Symulacja -p z iptables DNAT na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Krok 5: Symulacja -p z iptables DNAT
45/50
Zapętlenia w mostku i STP
Cel slajdu: Slajd omawia zagadnienie „Zapętlenia w mostku i STP” w kontekście: Spanning Tree Protocol w Linux bridge.

Spanning Tree Protocol w Linux bridge

Standardy IEEE 802.1D / 802.1w oraz eliminacja pętli w złożonych topologiach

W rozbudowanych środowiskach wielomostkowych lub przy łączeniu mostków z fizycznymi przełącznikami sieciowymi redundantne łącza L2 mogą doprowadzić do katastrofalnej pętli rozgłoszeniowej (broadcast storm):

# 1. Włączenie protokołu STP na mostku Linuksa
sudo ip link set br0 type bridge stp_state 1

# 2. Ustawienie priorytetu mostka w drzewie STP (np. 32768)
sudo ip link set br0 type bridge priority 32768

# 3. Konfiguracja czasu przejścia stanów (forward delay, np. 4 sekundy)
sudo ip link set br0 type bridge forward_delay 400

# 4. Inspekcja ról i stanów portów mostka w STP
bridge link show
  • Stany portu STP: Disabled -> Blocking / Listening -> Learning -> Forwarding;
  • Pakiety BPDU (Bridge Protocol Data Units): ramki kontrolne wymieniane między węzłami L2;
  • Dlaczego Docker domyślnie wyłącza STP: mostek docker0 tworzy prostą topologię gwiazdy z kablami VETH; brak fizycznych pętli sprawia, że STP wprowadzałoby jedynie niepotrzebne 30-sekundowe opóźnienie przy starcie kontenera.
Zapętlenia w mostku i STP: Slajd przedstawia zagadnienie Spanning Tree Protocol w Linux bridge w ramach tematu Zapętlenia w mostku i STP na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Zapętlenia w mostku i STP
46/50
Błędy konfiguracji VETH
Cel slajdu: Slajd omawia zagadnienie „Błędy konfiguracji VETH” w kontekście: Problemy z VETH i typowe błędy administratora.

Problemy z VETH i typowe błędy administratora

Katalog najczęstszych awarii wirtualnego okablowania i metody ich usunięcia

Błąd konfiguracyjny Objawy i komunikaty Środki zaradcze i naprawa
Interfejs w stanie DOWN Komunikat Network is down lub 100% utraty pakietów Podniesienie obu końców pary: ip link set dev vethX up
Wyłączony interfejs lo Aplikacje nie mogą połączyć się z 127.0.0.1 ani lokalnymi gniazdami Jawna aktywacja interfejsu pętli: ip -n <ns> link set dev lo up
Utrata IP przy migracji Adres IP znika po przeniesieniu interfejsu do netns Adres należy nadawać po przeniesieniu interfejsu do docelowej przestrzeni!
Adres IP na porcie slave Asymetryczny routing, brak odpowiedzi ARP, konflikty L3 Usunięcie IP z końcówki wpiętej do mostka; IP nadajemy tylko na mostku
Brak trasy domyślnej Błąd Network unreachable przy próbie wyjścia poza podsieć Dodanie trasy: ip -n <ns> route add default via <IP_mostka>
Błędy konfiguracji VETH: Slajd przedstawia zagadnienie Problemy z VETH i typowe błędy administratora w ramach tematu Błędy konfiguracji VETH na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Błędy konfiguracji VETH
47/50
Problemy z DNAT w Dockerze
Cel slajdu: Slajd omawia zagadnienie „Problemy z DNAT w Dockerze” w kontekście: Kolejność reguł iptables i problem Hairpin NAT.

Kolejność reguł iptables i problem Hairpin NAT

Diagnostyka zaawansowanych problemów z publikacją portów w kontenerach

Typowe wyzwania inżynierskie podczas publikacji portów za pomocą DNAT:

  • Błąd bind: address already in use:
    • Występuje, gdy wskazany port hosta jest już zajęty przez proces systemowy lub inny kontener;
    • Diagnostyka: sudo ss -tlpn | grep :<port> w celu identyfikacji procesu blokującego port.
  • Problem Hairpin NAT (kontener łączy się z własnym opublikowanym portem):
    • Kontener A próbuje połączyć się z kontenerem B (lub samym sobą) za pośrednictwem publicznego adresu IP hosta i portu publikowanego zamiast prywatnego IP w mostku;
    • Pakiet wychodzi z kontenera, trafia do reguły DNAT, która zawraca go na ten sam mostek;
    • Objaw awarii: pakiet odpowiedzi trafia bezpośrednio do kontenera z pominięciem hosta, klient odrzuca odpowiedź z powodu niespójności adresów IP (brak matching SYN/ACK);
    • Rozwiązanie Dockera: reguła Hairpin MASQUERADE w łańcuchu POSTROUTING oraz włączenie trybu hairpin on na wirtualnych portach mostka.
  • Brak przekazywania pakietów (ip_forward): upewnij się, że net.ipv4.ip_forward = 1 w /etc/sysctl.conf.
Problemy z DNAT w Dockerze: Slajd przedstawia zagadnienie Kolejność reguł iptables i problem Hairpin NAT w ramach tematu Problemy z DNAT w Dockerze na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Problemy z DNAT w Dockerze
48/50
Narzędzia do debugowania
Cel slajdu: Slajd omawia zagadnienie „Narzędzia do debugowania” w kontekście: Zestaw narzędzi diagnostycznych wirtualizacji sieci.

Zestaw narzędzi diagnostycznych wirtualizacji sieci

Praktyczne instrumentarium inżyniera sieciowego w środowiskach kontenerowych

# 1. Przechwytywanie ruchu na wirtualnym mostku z filtrowaniem
sudo tcpdump -i br0 -n -vvv icmp or port 80

# 2. Monitorowanie zmian w tablicy FDB mostka w czasie rzeczywistym
sudo bridge monitor fdb

# 3. Wejście do przestrzeni sieciowej procesu kontenera bez docker exec
sudo nsenter -t 14205 -n ip addr show

# 4. Sprawdzenie liczników błędów i odrzuconych pakietów na interfejsie VETH
ip -s link show dev veth1-br

# 5. Podgląd aktywnych wpisów w tablicy conntrack dla publikowanych portów
sudo conntrack -L -p tcp --dport 8080

# 6. Nowoczesne śledzenie pakietów w jądrze z użyciem eBPF (pwru - Packet Where aRe yoU)
# narzędzie spoza standardowych repozytoriów (projekt Cilium: github.com/cilium/pwru)
sudo pwru --filter-netns /proc/14205/ns/net
Narzędzia do debugowania: Slajd przedstawia zagadnienie Zestaw narzędzi diagnostycznych wirtualizacji sieci w ramach tematu Narzędzia do debugowania na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Narzędzia do debugowania
49/50
Podsumowanie - najważniejsze koncepcje i CNI w Kubernetes
Cel slajdu: Slajd omawia zagadnienie „Podsumowanie - najważniejsze koncepcje i CNI w Kubernetes” w kontekście: Od mostka Linuksa do interfejsu CNI w orkiestracji kontenerów.

Od mostka Linuksa do interfejsu CNI w orkiestracji kontenerów

Synteza wiedzy o wirtualizacji sieci oraz ewolucja w stronę Kubernetes CNI

Wirtualizacja sieci w systemie Linux opiera się na trzech fundamentalnych filarach:

  • Linux Bridge: wirtualny przełącznik L2 w pamięci jądra (tablica FDB, MAC learning, VLAN filtering 802.1Q);
  • Wirtualne pary Ethernet (VETH): dwukierunkowy kabel w RAM spinający odizolowane przestrzenie nazw;
  • Podsystem Netfilter (iptables / nftables): translacja DNAT/SNAT oraz zapora ogniowa dla kontenerów.

Ewolucja w klastrach wielowęzłowych – standard CNI (Container Network Interface):

  • W Kubernetes każdy Pod otrzymuje własny, unikalny i bezpośrednio trasowalny adres IP (brak konieczności NAT między podami);
  • Flannel: prosta wtyczka CNI tworząca sieć nakładkową z enkapsulacją VXLAN lub trasowaniem host-gw;
  • Project Calico: wysoka wydajność dzięki natywnemu trasowaniu L3 za pomocą protokołu BGP (demon Bird na każdym węźle) oraz zaawansowane NetworkPolicy;
  • Cilium (Rewolucja eBPF): całkowite zastąpienie reguł iptables przez bezpieczny kod eBPF wstrzykiwany do jądra, obsługa szyfrowania WireGuard i obserwacja L7 z Hubble.
Podsumowanie - najważniejsze koncepcje i CNI w Kubernetes: Slajd przedstawia zagadnienie Od mostka Linuksa do interfejsu CNI w orkiestracji kontenerów w ramach tematu Podsumowanie - najważniejsze koncepcje i CNI w Kubernetes na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Podsumowanie - najważniejsze koncepcje i CNI w Kubernetes
50/50
Cheat Sheet - wszystkie najważniejsze polecenia
Cel slajdu: Slajd omawia zagadnienie „Cheat Sheet - wszystkie najważniejsze polecenia” w kontekście: Podręczne kompendium poleceń wirtualizacji sieci.

Podręczne kompendium poleceń wirtualizacji sieci

Skonsolidowane zestawienie komend administracyjnych i diagnostycznych

## === LINUX BRIDGE (MOSTEK L2) ===
sudo ip link add name br0 type bridge           # Utworzenie mostka
sudo ip link set dev br0 up                     # Podniesienie interfejsu mostka
sudo ip link set dev eth1 master br0            # Dołączenie interfejsu do mostka
sudo ip link set dev eth1 nomaster              # Usunięcie interfejsu z mostka
bridge fdb show br br0                          # Wyświetlenie tablicy FDB (MAC learning)
bridge link show                                # Status i parametry portów mostka

## === VIRTUAL ETHERNET (PARY VETH) ===
sudo ip link add v0 type veth peer name v1      # Utworzenie wirtualnej pary VETH
sudo ip link set v1 netns ns1                  # Przeniesienie końca pary do netns
ethtool -S v0 | grep peer_ifindex               # Sprawdzenie powiązanego indeksu peer

## === NETWORK NAMESPACES (PRZESTRZENIE NETNS) ===
sudo ip netns add ns1                           # Utworzenie nowej przestrzeni nazw
sudo ip -n ns1 addr add 10.0.0.1/24 dev v1      # Konfiguracja adresu IP w przestrzeni
sudo ip -n ns1 link set dev v1 up               # Podniesienie interfejsu w przestrzeni
sudo ip -n ns1 link set dev lo up               # Obowiązkowa aktywacja pętli zwrotnej
sudo ip netns exec ns1 <polecenie>              # Wykonanie komendy wewnątrz netns
sudo ip netns del ns1                           # Usunięcie przestrzeni nazw

## === DOCKER NETWORKING ===
docker network ls                               # Lista wszystkich sieci Dockera
docker network create -d bridge my-net          # Nowa sieć mostkowana z serwerem DNS
docker network connect my-net my-container      # Dynamiczne podłączenie kontenera
docker run -d -p 8080:80 nginx                  # Publikacja portu przez DNAT

## === DIAGNOSTYKA I ZAPORA NETFILTER ===
sudo iptables -t nat -nvL DOCKER                # Reguły translacji DNAT Dockera
sudo iptables -nvL DOCKER-USER                  # Własne reguły bezpieczeństwa administratora
sudo tcpdump -i br0 -n icmp                     # Podsłuch ruchu na wirtualnym mostku
sudo nsenter -t <PID> -n ip addr show           # Wejście do stosu sieciowego kontenera
Cheat Sheet - wszystkie najważniejsze polecenia: Slajd przedstawia zagadnienie Podręczne kompendium poleceń wirtualizacji sieci w ramach tematu Cheat Sheet - wszystkie najważniejsze polecenia na przykładach konfiguracji i diagnostyki w systemie Linux. Mechanizmy mostów i przestrzeni nazw opisuje dokumentacja jądra Linux, a sieci kontenerów opisuje dokumentacja sterowników sieci Docker.
Cheat Sheet - wszystkie najważniejsze polecenia