Omrežni imenski prostori Linuxa za VPN: česa ne izolirajo
Imenski prostor premakne vmesnike, poti in vtičnice, ne datotek ali računov. Tu je, kaj VPN v svojem netns pokriva in kod promet še vedno uhaja.
Zaženite VPN znotraj njegovega lastnega imenskega prostora, tam zaženite eno aplikacijo, in promet še vedno odhaja po poti gostitelja. Nič ni pokvarjeno: imenski prostor upravlja samo procese, ki vanj vstopijo, in uhajanje je prišlo iz procesa, ki ni nikoli vstopil. Vmesniki, naslovi, poti, pravila požarnega zidu in vtičnice so tisto, kar imenski prostor ima. Datoteke, računi in že delujoče storitve niso, in od tod prihaja večina presenečenj.
Kaj imenski prostor ima in kje se rodi vtičnica
Premaknite vmesnik v imenski prostor in gostitelj ga izgubi; zgradite znotraj tunel in gostitelj ga ne more videti. To je mehanizem VPN, omejenega na imenski prostor: naprava in poti do nje živijo v kontekstu, ki ga dosežejo le izbrani procesi. Gostitelj obdrži privzeto pot, zato vse zunaj ostane nedotaknjeno.
Pri WireGuarda je kontekst ustvarjanja enako pomemben kot trenutna lokacija: vtičnica UDP se veže v imenskem prostoru, kjer je bil vmesnik ustvarjen, tudi potem ko se naprava premakne drugam. Od katere usmerjevalne tabele so odvisni šifrirani paketi, je odvisno od tega kraja rojstva. Ko vtičnica ostane v kontekstu brez poti do partnerja, vmesnik poizveduje in rokovanje nikoli ne odide. Preverite kraj njenega rojstva, nato trenutno lokacijo.
Česa imenski prostor ne izolira
Nič tukaj ne ločuje datotečnih sistemov, računov ali skrivnosti, in nobena od teh meja se ne pojavi zato, ker ste ustvarili imenski prostor. Konfiguracija razreševalnika je datoteka, zato lahko proces znotraj še vedno prebere nastavitev, ki kaže na razreševalnik gostitelja, in pošlje svojo poizvedbo po poti, ki jo to implicira. Aplikacija, ki zahtevo preda že delujočemu posredniku ali sistemski storitvi, vključi proces v povsem drugem kontekstu. Oba sta zahtevi, na kateri meja nikoli ni bila namenjena odgovoriti.
Rešitev je datoteka za vsak imenski prostor v /etc/netns/<name>/resolv.conf, ali bind mount pripravljene datoteke, usmerjen na razreševalnik, dosegljiv od znotraj. Urejanje /etc/resolv.conf na gostitelju ne spremeni ničesar od tega, kar imenski prostor vidi.
Postavitev procesov je nadzor
Izolacija, ki jo dobite, je natanko izolacija procesov, ki jih zaženete znotraj. Lupina, zagnana prek pomočnika exec imenskega prostora, in vse, kar ustvari, ostane znotraj; namizna aplikacija, zagnana iz seje gostitelja, ne. Ustvarite kontekst, premaknite napravo in nato dokažite obe strani:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Preberite prvi wg show od znotraj imenskega prostora in drugega z gostitelja, in pričakujte, da bo le eden od njiju navedel partnerja. Če oba, se naprava ni nikoli premaknila; če noben, je šla drugam. Ko je zaganjalnik upravitelj storitev, je treba urediti datoteko enote, ne bližnjice na namizju. Enota brez nastavitve imenskega prostora zažene demona v kontekstu gostitelja in tiho razveljavi zasnovo.
Preizkusite iz konteksta aplikacije
Zaženite preverjanje z isto binarno datoteko in istim uporabnikom, ki ju uporablja aplikacija, znotraj imenskega prostora. Vključite DNS in obe družini naslovov, ker je pot IPv6, na katero niste pomislili, običajen izhod. Preizkus iz vaše lastne lupine dokaže le, da je vaša lupina izolirana.
Nato zaženite enako preverjanje na gostitelju in potrdite, da se odgovori razlikujejo: naslov tunela in predvideni izhod znotraj, pot gostitelja in pisarniški izhod zunaj, ter razreševalnik po imenu. Imenske prostore poimenujte po uvedbi, ne po protokolu, da čistilni skript ne zamenja dveh.
Posredovanje, politika napake in čiščenje
Za prehod zavestno vklopite posredovanje in se odločite, kaj naj se zgodi, ko tunel pade. Imenski prostor ne blokira poti, ki jih namestite znotraj, zato bo nadomestna pot do gostitelja uporabljena, če jo ustvarite. To je politična odločitev in zapisati jo je treba, preden jo preizkusi izpad.
Zapišite imena imenskih prostorov, vmesnike in kdo je lastnik konfiguracije, da čiščenje odstrani le tisto, kar je ustvarila uvedba. Ponastavitev omrežja gostitelja med vrnitvijo spremeni čiščenje v izpad. Stran network_namespaces(7) je kratka in vredna branja, preden oblikujete to pot.