Network Namespace
Taarifa Msingi
Nafasi ya mtandao ni kipengele cha kernel ya Linux kinachotoa kujitenga kwa safu ya mtandao, kuruhusu kila nafasi ya mtandao kuwa na usanidi wake wa mtandao huru, interface, anwani za IP, meza za kuelekeza, na sheria za firewall. Kujitenga huku kunafaa katika mazingira mbalimbali, kama vile kubebeshaji, ambapo kila kibebeshaji kinapaswa kuwa na usanidi wake wa mtandao, huru na mabebeshaji mengine na mfumo wa mwenyeji.
Jinsi inavyofanya kazi:
Wakati nafasi mpya ya mtandao inapoundwa, inaanza na safu ya mtandao iliyotengwa kabisa, bila kuwa na interface za mtandao isipokuwa kwa interface ya loopback (lo). Hii inamaanisha kuwa michakato inayofanya kazi katika nafasi mpya ya mtandao haiwezi kuwasiliana na michakato katika nafasi nyingine au mfumo wa mwenyeji kwa chaguo-msingi.
Interface za mtandao za kubuni, kama vile jozi za veth, zinaweza kuundwa na kuhamishwa kati ya nafasi za mtandao. Hii inaruhusu kuweka uunganisho wa mtandao kati ya nafasi au kati ya nafasi na mfumo wa mwenyeji. Kwa mfano, mwisho mmoja wa jozi ya veth unaweza kuwekwa katika nafasi ya mtandao ya kontena, na mwisho mwingine unaweza kuunganishwa na daraja au interface nyingine ya mtandao katika nafasi ya mwenyeji, ikitoa uunganisho wa mtandao kwa kontena.
Interface za mtandao ndani ya nafasi zinaweza kuwa na anwani zao za IP, meza za kuelekeza, na sheria za firewall, huru na nafasi nyingine. Hii inaruhusu michakato katika nafasi tofauti za mtandao kuwa na usanidi tofauti wa mtandao na kufanya kazi kana kwamba inafanya kazi kwenye mifumo tofauti ya mtandao.
Michakato inaweza kuhamia kati ya nafasi kwa kutumia wito wa mfumo wa
setns()
, au kuunda nafasi mpya kwa kutumia wito wa mfumo waunshare()
auclone()
na bendera yaCLONE_NEWNET
. Wakati michakato inahamia kwenye nafasi mpya au kuunda moja, itaanza kutumia usanidi wa mtandao na interface zinazohusiana na nafasi hiyo.
Maabara:
Unda Nafasi Tofauti
CLI
Kwa kusakinisha kifungu kipya cha mfumo wa faili ya /proc
ikiwa unatumia paramu --mount-proc
, unahakikisha kuwa kifungu kipya cha kufunga kinaona taarifa sahihi na iliyotengwa ya mchakato maalum kwa kifungu hicho.
Docker
Angalia kwenye namespace gani mchakato wako uko
Unaweza kuangalia kwenye namespace gani mchakato wako uko kwa kutumia amri ifuatayo:
Badilisha <PID>
na kitambulisho cha mchakato unayotaka kuangalia. Amri hii itakuonyesha viungo kwa namespace tofauti ambazo mchakato wako amehusishwa nazo.
Tafuta majina yote ya nafasi za mtandao
```bash nsenter -n TARGET_PID --pid /bin/bash ``` Pia, unaweza **ingia kwenye namespace nyingine ya mchakato ikiwa wewe ni root**. Na huwezi **kuingia** kwenye namespace nyingine **bila kigeuzi** kinachoelekeza kwake (kama vile `/proc/self/ns/net`).
Marejeo
Last updated