Linux tinklo vardų erdvės VPN: ko jos neišskiria
Vardų erdvė perkelia sąsajas, maršrutus ir lizdus, o ne failus ar paskyras. Štai ką VPN savo netns apima ir kur srautas vis tiek ištrūksta.
Paleiskite VPN savo vardų erdvėje, ten paleiskite vieną programą, o srautas vis tiek išeina pagrindinio kompiuterio maršrutu. Niekas nesugadinta: vardų erdvė valdo tik į ją patenkančius procesus, o nuotėkis atėjo iš proceso, kuris niekada neįėjo. Sąsajos, adresai, maršrutai, ugniasienės taisyklės ir lizdai yra tai, ką vardų erdvė valdo. Failai, paskyros ir jau veikiančios paslaugos – ne, ir iš čia kyla dauguma netikėtumų.
Ką vardų erdvė valdo ir kur gimsta lizdas
Perkelkite sąsają į vardų erdvę ir pagrindinis kompiuteris ją praranda; sukurkite tunelį viduje ir pagrindinis kompiuteris jo nematys. Tai yra VPN, apribotos vardų erdve, mechanizmas: įrenginys ir į jį vedantys maršrutai gyvena kontekste, kurį pasiekia tik pasirinkti procesai. Pagrindinis kompiuteris išlaiko numatytąjį maršrutą, todėl viskas išorėje lieka nepaliesta.
WireGuard atveju kūrimo kontekstas toks pat svarbus kaip dabartinė vieta: UDP lizdas susiejamas toje vardų erdvėje, kurioje buvo sukurta sąsaja, net po to, kai įrenginys persikelia kitur. Kurią maršrutizavimo lentelę seka šifruoti paketai, priklauso nuo tos gimimo vietos. Kai lizdas lieka kontekste be maršruto į partnerį, sąsaja ieško ir rankos paspaudimas niekada neišeina. Patikrinkite jo gimimo vietą, tada dabartinę vietą.
Ko vardų erdvė neišskiria
Niekas čia neatskiria failų sistemų, paskyrų ar paslapčių, ir nė viena iš šių ribų neatsiranda todėl, kad sukūrėte vardų erdvę. Rezolverio konfigūracija yra failas, todėl viduje esantis procesas vis tiek gali perskaityti nuostatą, kuri nurodo į pagrindinio kompiuterio rezolverį, ir išsiųsti savo užklausą tuo maršrutu, kurį tai reiškia. Programėlė, kuri užklausą perduoda jau veikiančiam tarpininkui ar sistemos tarnybai, įtraukia procesą visiškai kitame kontekste. Abu yra prašymai, į kuriuos riba niekada nebuvo skirta atsakyti.
Sprendimas yra failas kiekvienai vardų erdvei /etc/netns/<name>/resolv.conf vietoje, arba paruošto failo bind mount, nukreiptas į rezolverį, pasiekiamą iš vidaus. /etc/resolv.conf redagavimas pagrindiniame kompiuteryje nieko nekeičia, ką mato vardų erdvė.
Procesų išdėstymas yra valdymas
Izoliacija, kurią gaunate, yra būtent viduje paleistų procesų izoliacija. Apvalkalas, paleistas per vardų erdvės exec pagalbininką, ir viskas, ką jis sukuria, lieka viduje; darbalaukio programėlė, paleista iš pagrindinio kompiuterio sesijos, – ne. Sukurkite kontekstą, perkelkite įrenginį, tada įrodykite abi puses:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Perskaitykite pirmąjį wg show vardų erdvės viduje, o antrąjį – pagrindiniame kompiuteryje, ir tikėkitės, kad tik vienas iš jų išvardys partnerį. Jei abu tai daro, įrenginys niekada nejudėjo; jei nė vienas, jis nuėjo kitur. Kai paleidėjas yra paslaugų tvarkyklė, redaguoti reikia unit failą, o ne darbalaukio nuorodą. Unit be vardų erdvės nuostatos paleidžia demoną pagrindinio kompiuterio kontekste ir tyliai panaikina dizainą.
Išbandykite programėlės kontekste
Vykdykite patikrą su tuo pačiu dvejetainiu failu ir tuo pačiu naudotoju, kuriuos naudoja programėlė, vardų erdvės viduje. Įtraukite DNS ir abi adresų šeimas, nes IPv6 maršrutas, apie kurį niekada negalvojote, yra įprastas išėjimas. Testas iš jūsų apvalkalo tik įrodo, kad jūsų apvalkalas izoliuotas.
Tada vykdykite tą pačią patikrą pagrindiniame kompiuteryje ir patvirtinkite, kad atsakymai skiriasi: tunelio adresas ir numatoma išeitis viduje, pagrindinio kompiuterio maršrutas ir biuro išeitis išorėje, ir rezolveris pagal pavadinimą. Pavadinkite vardų erdves pagal diegimą, o ne protokolą, kad valymo scenarijus nesupainiotų dviejų.
Persiuntimas, gedimų politika ir valymas
Tinklų sietuvui sąmoningai įjunkite persiuntimą ir nuspręskite, kas turėtų nutikti, kai tunelis nukrenta. Vardų erdvė neblokuoja maršrutų, kuriuos joje įrengiate, todėl atsarginis maršrutas į pagrindinį kompiuterį bus naudojamas, jei jį sukursite. Tai politikos sprendimas, ir jis turėtų būti užrašytas prieš tai, kai jį išbandys gedimas.
Užrašykite vardų erdvių pavadinimus, sąsajas ir kas valdo konfigūraciją, kad valymas pašalintų tik tai, ką sukūrė diegimas. Pagrindinio kompiuterio tinklo atkūrimas atšaukimo metu paverčia valymą gedimu. Puslapis network_namespaces(7) trumpas ir vertas dėmesio prieš projektuojant tą kelią.