Network Namespace
Podstawowe informacje
Przestrzeń nazw sieciowych to funkcja jądra Linux, która zapewnia izolację stosu sieciowego, umożliwiając każdej przestrzeni nazw sieciowych posiadanie własnej niezależnej konfiguracji sieciowej, interfejsów, adresów IP, tablic routingu i reguł zapory ogniowej. Ta izolacja jest przydatna w różnych scenariuszach, takich jak konteneryzacja, gdzie każdy kontener powinien mieć swoją własną konfigurację sieciową, niezależną od innych kontenerów i systemu hosta.
Jak to działa:
Po utworzeniu nowej przestrzeni nazw sieciowych, rozpoczyna się ona z całkowicie izolowanym stosie sieciowym, bez żadnych interfejsów sieciowych oprócz interfejsu pętli zwrotnej (lo). Oznacza to, że procesy działające w nowej przestrzeni nazw sieciowych domyślnie nie mogą komunikować się z procesami w innych przestrzeniach nazw ani z systemem hosta.
Mogą być tworzone i przenoszone wirtualne interfejsy sieciowe, takie jak pary veth, między przestrzeniami nazw sieciowych. Pozwala to na nawiązanie połączenia sieciowego między przestrzeniami nazw lub między przestrzenią nazw a systemem hosta. Na przykład, jeden koniec pary veth może być umieszczony w przestrzeni nazw sieciowej kontenera, a drugi koniec może być podłączony do mostka lub innego interfejsu sieciowego w przestrzeni nazw hosta, zapewniając połączenie sieciowe do kontenera.
Interfejsy sieciowe w ramach przestrzeni nazw mogą mieć własne adresy IP, tablice routingu i reguły zapory ogniowej, niezależne od innych przestrzeni nazw. Pozwala to procesom w różnych przestrzeniach nazw sieciowych mieć różne konfiguracje sieciowe i działać tak, jakby działały na oddzielnych systemach sieciowych.
Procesy mogą przenosić się między przestrzeniami nazw za pomocą wywołania systemowego
setns()
, lub tworzyć nowe przestrzenie nazw za pomocą wywołań systemowychunshare()
lubclone()
z flagąCLONE_NEWNET
. Gdy proces przenosi się do nowej przestrzeni nazw lub ją tworzy, zaczyna korzystać z konfiguracji sieciowej i interfejsów powiązanych z tą przestrzenią nazw.
Laboratorium:
Utwórz różne przestrzenie nazw
CLI
Montując nową instancję systemu plików /proc
przy użyciu parametru --mount-proc
, zapewniasz, że nowa przestrzeń montowania ma dokładny i izolowany widok informacji o procesach specyficznych dla tej przestrzeni.
Docker
Sprawdź, w jakim przestrzeni nazw znajduje się Twój proces
Aby sprawdzić, w jakiej przestrzeni nazw znajduje się Twój proces, wykonaj poniższą komendę:
Wynik pokaże Ci, w jakiej przestrzeni nazw znajduje się Twój proces.
Znajdź wszystkie przestrzenie nazw sieciowych
```bash nsenter -n TARGET_PID --pid /bin/bash ``` Ponadto, możesz **wejść do innego przestrzeni nazw procesu tylko jeśli jesteś rootem**. I **nie możesz** **wejść** do innej przestrzeni nazw bez deskryptora wskazującego na nią (np. `/proc/self/ns/net`).
Referencje
Last updated