Network Namespace
Osnovne informacije
Mrežni namespace je funkcionalnost Linux kernela koja omogućava izolaciju mrežnog sloja, omogućavajući svakom mrežnom namespace-u da ima sopstvenu nezavisnu mrežnu konfiguraciju, interfejse, IP adrese, rutne tabele i pravila za zaštitu od požara. Ova izolacija je korisna u raznim scenarijima, kao što je kontejnerizacija, gde svaki kontejner treba da ima sopstvenu mrežnu konfiguraciju, nezavisnu od drugih kontejnera i host sistema.
Kako radi:
Kada se kreira novi mrežni namespace, on počinje sa potpuno izolovanim mrežnim slojem, sa bez mrežnih interfejsa osim petljačkog interfejsa (lo). To znači da procesi koji se izvršavaju u novom mrežnom namespace-u ne mogu komunicirati sa procesima u drugim namespace-ima ili host sistemu po default-u.
Virtuelni mrežni interfejsi, kao što su veth parovi, mogu se kreirati i premestiti između mrežnih namespace-ova. Ovo omogućava uspostavljanje mrežne konekcije između namespace-ova ili između namespace-a i host sistema. Na primer, jedan kraj veth para može biti smešten u mrežnom namespace-u kontejnera, a drugi kraj može biti povezan sa mostom ili drugim mrežnim interfejsom u host namespace-u, pružajući mrežnu konekciju kontejneru.
Mrežni interfejsi unutar namespace-a mogu imati svoje IP adrese, rutne tabele i pravila za zaštitu od požara, nezavisno od drugih namespace-a. Ovo omogućava procesima u različitim mrežnim namespace-ima da imaju različite mrežne konfiguracije i da funkcionišu kao da se izvršavaju na odvojenim mrežnim sistemima.
Procesi mogu da se premeštaju između namespace-a koristeći
setns()
sistemski poziv, ili da kreiraju nove namespace-e koristećiunshare()
iliclone()
sistemski poziv saCLONE_NEWNET
zastavicom. Kada proces pređe u novi namespace ili ga kreira, počeće da koristi mrežnu konfiguraciju i interfejse povezane sa tim namespace-om.
Lab:
Kreiranje različitih Namespace-ova
CLI
Montiranjem nove instance /proc
fajl sistema, korišćenjem parametra --mount-proc
, obezbeđujete da nova namespace za montiranje ima tačan i izolovan prikaz informacija o procesu specifičnih za tu namespace.
Docker
Proverite u kojem namespace-u se nalazi vaš proces
Da biste proverili u kojem namespace-u se nalazi vaš proces, možete koristiti sledeću komandu:
Ova komanda će vam prikazati simboličku vezu koja pokazuje na trenutni namespace mreže u kojem se nalazi vaš proces.
Pronađi sve mrežne namespace-ove
```bash nsenter -n TARGET_PID --pid /bin/bash ``` Takođe, možete **ući u drugi proces namespace samo ako ste root**. I **ne možete** **ući** u drugi namespace **bez deskriptora** koji na njega pokazuje (poput `/proc/self/ns/net`).
Reference
Last updated