NET_ADMIN ndani ya kontena ya VPN: nini na wapi inaweza kubadilisha
Uwezo huu huruhusu mabadiliko ya violesura, njia na firewall ndani ya nafasi moja ya majina ya mtandao. Kwa mtandao wa mwenyeji, nafasi hiyo ni staki ya mwenyeji mwenyewe.
NET_ADMIN ni uwezo wa Linux unaoruhusu mchakato kufanya usimamizi wa mtandao, na ndani ya kontena hufanya hivyo hasa ndani ya nafasi ya majina ya mtandao ambayo mchakato unaendeshwa. Si leseni ya kufungua soketi, na si badala ya kifaa au njia. Swali la kuvutia kamwe si kama uwezo umepewa, bali ni nafasi gani ya majina inayopokea mabadiliko.
Uwezo unashughulikia nini
Ndani ya nafasi yake ya majina, mchakato ulio na NET_ADMIN unaweza kuinua na kushusha violesura, kugawa anwani, kuongeza na kuondoa njia na kuandika kanuni za firewall, ambayo ni kundi la shughuli ambazo capabilities(7) hukusanya chini ya uwezo huu. Unaweza pia kurekebisha mipangilio ya ngazi ya kiolesura inayodhibiti jinsi kerneli inavyoweka trafiki kwenye foleni na kuichuja. Mteja wa VPN kwa kawaida huhitaji baadhi yao wakati wa kuanza na hakuna kingine baada ya hapo. Ndiyo sababu taswira nyingi huomba wigo mkubwa kuliko zile zinazotumia.
Shughuli nje ya nafasi hiyo ya majina hazijashughulikiwa, na manufaa ya karibu ni tofauti. Kusoma na kuandika pakiti ghafi ni mali ya NET_RAW, na kuunda kifaa cha tun kunahitaji uwezo na ufikiaji wa nodi ya kifaa zote mbili. Mchakato usio na kifaa hupata hitilafu ya ruhusa inayofanana na tatizo la mtandao lakini siyo.
Nafasi ya majina huamua eneo la uharibifu
Kontena kwenye mtandao wake wa daraja hufikia loopback yake, violesura vyake na jedwali lake la njia. Kutoa NET_ADMIN hapo humruhusu mteja wa VPN kujenga handaki bila kugusa maamuzi ya njia ya mwenyeji, ambayo ni mpangilio ambao taswira nyingi za kontena huchukulia.
Badilisha kontena hilo kuwa mtandao wa mwenyeji na ruhusa hiyo hiyo sasa huhariri njia za mwenyeji na firewall ya mwenyeji, kwa sababu hakuna nafasi ya majina iliyobaki. Mteja aliyepaswa kusimamia handaki moja anaweza kuelekeza trafiki ya mashine yote, na kosa katika hati yake ya kubomoa huiachia mwenyeji kanuni ambazo hakuna aliyedhani kuandika. Hakuna kilichobadilika katika uwezo wenyewe; muktadha ulibadilika. Ndiyo sababu faili hiyo hiyo ya compose hujiendesha tofauti kwenye wenyeji wawili.
Masharti matatu yanayounganishwa kuwa moja
Kushindwa kwa kuanza katika kontena za VPN kwa kawaida huhusisha moja ya mambo matatu tofauti: uwezo, kifaa cha handaki na msaada wa kerneli kwa itifaki. Kutoa yote matatu kwa pamoja hufanya kazi, na pia hufanya kushindwa kunakofuata kusiweze kuhusishwa. Kipande cha chini cha compose hutoa uwezo na hupitisha nodi ya kifaa waziwazi:
services:
vpn:
image: example/vpn-client:latest
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
sysctls:
- net.ipv4.conf.all.src_valid_mark=1Soma nyaraka za taswira yenyewe kuhusu ni sysctl gani inahitaji, kwa sababu sysctl ndani ya kontena inaweza kuhitaji manufaa ya ziada au mpangilio wa ngazi ya mwenyeji. Ambapo taswira inaunga mkono hali ya nafasi ya mtumiaji pekee, kifaa hakihitajiki kabisa na orodha ya uwezo hupungua ipasavyo.
Toa operesheni nyembamba, si hali
Hali ya upendeleo hukabidhi kila uwezo na wakati huohuo hupanua ufikiaji wa vifaa, kwa hivyo huficha ni sharti gani kati ya matatu lilikuwa halipo. Pia hufanya njia za kushindwa za kontena zisiweze kutofautishwa na mabadiliko ya mwenyeji. Pendelea orodha iliyo wazi hata ikiwa ni ndefu kuandika.
Usanidi usio na mzizi na wa nafasi za majina ya mtumiaji hubadilisha maana ya uwezo kivitendo, kwa sababu mchakato unaweza kuwa nao ndani ya nafasi ya majina iliyopangwa pekee. Kunakili orodha ya uwezo kutoka mfano wenye mzizi kwenda mazingira yasiyo na mzizi na kutarajia wigo sawa ni njia ya kawaida ya kupoteza mchana.
Siri ni za uamuzi tofauti. Kuwa na NET_ADMIN hakusemi chochote kuhusu utambulisho gani wa mwenzake ambao mteja anawasilisha, ni vyeti gani anavyopakia au jinsi vinavyozungushwa. Usimamizi wa mtandao hautoi uaminifu.
Thibitisha mabadiliko na uandike kwa nini ruhusa ipo
Thibitisha kile kontena ilipokea kwa kweli kabla ya kutatua handaki. Ukaguzi hapa chini huripoti uwezo ulioongezwa na hali ya mtandao, kisha huonyesha jinsi orodha ya violesura inavyoonekana kutoka ndani:
docker inspect --format '{{.HostConfig.CapAdd}} {{.HostConfig.NetworkMode}} {{.HostConfig.Privileged}}' vpn
docker exec vpn sh -c 'grep CapEff /proc/self/status'
docker exec vpn ip -br addr
docker exec vpn ip routeIkiwa uwezo upo na orodha ya violesura bado ni tupu, mteja alishindwa kabla ya kuweza kuunda kitu chochote, na mahali panapofuata pa kuangalia ni kumbukumbu za kontena. Ikiwa handaki lipo lakini trafiki haitiririki, jedwali la njia ndani ya kontena hujibu swali linalofuata.
Jaribu pia njia ya kubomoa, kwa sababu mteja anayeandika kanuni za firewall anaweza kuziacha nyuma. Simamisha kontena na uangalie tena seti ya kanuni za mwenyeji ikiwa mtandao wa mwenyeji unatumika. Ruhusa inayohitajika kwa sekunde mbili tu wakati wa kuanza haipaswi kuelezewa katika faili ya compose kama hitaji la kudumu bila dokezo linaloeleza hilo.
Andika sababu kando ya kila uwezo: ni operesheni gani iliuhitaji na nini hushindwa bila hiyo. Dokezo hilo huendelea kuwepo baada ya masasisho ya taswira, na ndiyo tofauti kati ya orodha ya manufaa iliyopitiwa na ile iliyokua kwa kunakili na kubandika.