Spustite VPN v jeho vlastnom mennom priestore, spustite tam jednu aplikáciu, a prevádzka napriek tomu odchádza cez trasu hostiteľa. Nič nie je pokazené: menný priestor riadi len procesy, ktoré doň vstúpia, a únik prišiel z procesu, ktorý doň nikdy nevstúpil. Rozhrania, adresy, trasy, pravidlá firewallu a sockety sú to, čo menný priestor vlastní. Súbory, účty a už bežiace služby nie, a odtiaľ pochádza väčšina prekvapení.

Čo menný priestor vlastní a kde sa rodí socket

Presuňte rozhranie do menného priestoru a hostiteľ oň príde; postavte vnútri tunel a hostiteľ ho neuvidí. To je mechanizmus VPN obmedzenej na menný priestor: zariadenie a trasy k nemu žijú v kontexte, kam sa dostanú len vybrané procesy. Hostiteľ si ponechá svoju predvolenú trasu, takže všetko vonku zostáva nedotknuté.

Pre WireGuard je kontext vytvorenia rovnako dôležitý ako aktuálna poloha: socket UDP sa viaže v mennom priestore, kde bolo rozhranie vytvorené, aj po tom, čo sa zariadenie presunie inam. Ktorú smerovaciu tabuľku šifrované pakety sledujú, závisí od tohto miesta zrodenia. Keď socket zostane v kontexte bez trasy k partnerovi, rozhranie sa dopytuje a handshake nikdy neodíde. Skontrolujte miesto jeho zrodenia, potom aktuálnu polohu.

Čo menný priestor neizoluje

Nič tu neoddeľuje súborové systémy, účty ani tajomstvá, a žiadna z týchto hraníc nevzniká preto, že ste vytvorili menný priestor. Konfigurácia resolvera je súbor, takže proces vnútri ešte stále môže prečítať nastavenie ukazujúce na resolver hostiteľa a odoslať svoj dotaz po trase, ktorú to implikuje. Aplikácia, ktorá požiadavku odovzdá už bežiacemu sprostredkovateľovi alebo systémovej službe, zapája proces v úplne inom kontexte. Obe sú požiadavky, na ktoré hranica nikdy nebola určená odpovedať.

Riešením je súbor pre každý menný priestor v /etc/netns/<name>/resolv.conf, alebo bind mount pripraveného súboru, nasmerovaný na resolver dostupný zvnútra. Úprava /etc/resolv.conf na hostiteľovi nemení nič z toho, čo menný priestor vidí.

Umiestnenie procesov je tá kontrola

Izolácia, ktorú získate, je presne izoláciou procesov, ktoré spustíte vnútri. Shell spustený cez pomocník exec menného priestoru a všetko, čo vytvorí, zostáva vnútri; desktopová aplikácia spustená zo sedenia hostiteľa nie. Vytvorte kontext, presuňte zariadenie a potom dokážte obe strany:

ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show

Prečítajte prvý wg show zvnútra menného priestoru a druhý z hostiteľa a očakávajte, že len jeden z nich vypíše partnera. Ak oba, zariadenie sa nikdy nepohlo; ak ani jeden, odišlo inam. Keď je spúšťačom správca služieb, upravovať sa má súbor jednotky, nie odkaz na ploche. Jednotka bez nastavenia menného priestoru spustí démona v kontexte hostiteľa a potichu zruší návrh.

Testujte z kontextu aplikácie

Spustite kontrolu s rovnakým binárnym súborom a rovnakým používateľom, aké používa aplikácia, vnútri menného priestoru. Zahrňte DNS a obe rodiny adries, pretože trasa IPv6, na ktorú ste nemysleli, je bežná cesta von. Test z vášho vlastného shellu dokazuje len to, že váš shell je izolovaný.

Potom spustite totožnú kontrolu na hostiteľovi a potvrďte, že odpovede sa líšia: adresa tunela a zamýšľaný odchod vnútri, trasa hostiteľa a kancelársky odchod vonku, a resolver podľa mena. Pomenujte menné priestory podľa nasadenia, nie protokolu, aby si upratovací skript nepomýlil dva z nich.

Preposielanie, politika zlyhania a upratovanie

Pri bráne zapnite preposielanie vedome a rozhodnite, čo sa má stať, keď tunel padne. Menný priestor neblokuje trasy, ktoré v ňom nainštalujete, takže záložná trasa k hostiteľovi sa použije, ak nejakú vytvoríte. Je to politické rozhodnutie a malo by byť zapísané skôr, než ho otestuje výpadok.

Zaznamenajte názvy menných priestorov, rozhrania a to, komu patrí konfigurácia, aby upratovanie odstránilo len to, čo vytvorilo nasadenie. Resetovanie siete hostiteľa počas vrátenia zmení upratovanie na výpadok. Stránka network_namespaces(7) je krátka a stojí za prečítanie pred navrhnutím tej cesty.

Súvisiace články