Linux hálózati névterek VPN-hez: mit nem izolálnak
A névtér interfészeket, útvonalakat és socketeket mozgat, nem fájlokat vagy fiókokat. Íme, mit fed le egy VPN a saját netns-ében, és honnan szökik ki mégis a forgalom.
Indítsa el a VPN-t a saját névterében, futtasson ott egy alkalmazást, és a forgalom mégis a gazdagép útvonalán távozik. Semmi sem tört el: a névtér csak azokra a folyamatokra hat, amelyek belépnek, és a szivárgás abból jött, amelyik soha nem lépett be. Az interfészek, címek, útvonalak, tűzfalszabályok és socketek azok, amiket a névtér birtokol. A fájlok, fiókok és a már futó szolgáltatások nem, és a legtöbb meglepetés innen ered.
Mit birtokol a névtér, és hol születik a socket
Vigyen át egy interfészt egy névtérbe, és a gazdagép elveszíti; építsen belül alagutat, és a gazdagép nem látja. Ez a névtérhez kötött VPN mechanizmusa: az eszköz és a rá mutató útvonalak olyan környezetben élnek, amelyet csak a kiválasztott folyamatok érnek el. A gazdagép megtartja az alapértelmezett útvonalát, így minden kívüli érintetlen marad.
A WireGuardnál a létrehozási környezet ugyanolyan fontos, mint a jelenlegi hely: az UDP socket abban a névtérben kötődik, ahol az interfész létrejött, még azután is, hogy az eszköz máshová kerül. Hogy melyik útválasztási táblát követik a titkosított csomagok, azon a születési helyen múlik. Ha a socket olyan környezetben marad, ahol nincs útvonal a partnerhez, az interfész keres, és a kézfogás soha nem megy ki. Ellenőrizze a születési helyét, majd a jelenlegi helyét.
Mit nem izolál egy névtér
Itt semmi sem választja el a fájlrendszereket, fiókokat vagy titkokat, és ezek a határok nem azért jelennek meg, mert névteret hozott létre. A feloldó konfigurációja egy fájl, ezért a bent lévő folyamat még mindig olvashat egy beállítást, amely a gazdagép feloldójára mutat, és elküldheti a lekérdezését azon az útvonalon, amit ez magával von. Egy alkalmazás, amely a kérést egy már futó közvetítőnek vagy rendszerszolgáltatásnak adja át, teljesen más környezetben lévő folyamatot von be. Mindkettő olyan kérés, amelyre a határt soha nem szánták.
A megoldás egy névtérenkénti fájl a /etc/netns/<name>/resolv.conf helyen, vagy egy előkészített fájl bind mountja, amely egy belülről elérhető feloldóra mutat. A /etc/resolv.conf szerkesztése a gazdagépen semmit sem változtat azon, amit a névtér lát.
A folyamatok elhelyezése a vezérlés
A kapott izoláció pontosan a belül indított folyamatok izolációja. A névtér exec-segédjén keresztül indított shell és minden, amit létrehoz, bent marad; a gazdagép munkamenetéből indított asztali alkalmazás nem. Hozza létre a környezetet, mozgassa az eszközt, majd bizonyítsa mindkét oldalt:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Olvassa le az első wg show kimenetet a névtér belsejéből, a másodikat a gazdagépről, és várja, hogy csak az egyik listázza a partnert. Ha mindkettő teszi, az eszköz soha nem mozdult el; ha egyik sem, máshová került. Ha az indító egy szolgáltatáskezelő, a unit fájlt kell szerkeszteni, nem az asztali parancsikont. A névtér-beállítás nélküli unit a gazdagép környezetében indítja a démont, és csendben megsemmisíti a tervet.
Teszteljen az alkalmazás környezetéből
Futtassa az ellenőrzést ugyanazzal a bináris fájllal és ugyanazzal a felhasználóval, amelyet az alkalmazás használ, a névtéren belül. Vegye bele a DNS-t és mindkét címcsaládot, mert egy IPv6-útvonal, amelyre soha nem gondolt, gyakori kivezető út. A saját shelljéből indított teszt csak azt bizonyítja, hogy a saját shellje izolált.
Ezután futtassa ugyanezt az ellenőrzést a gazdagépen, és erősítse meg, hogy a válaszok eltérnek: alagútcíme és a szándékolt kijárat bent, a gazdagép útvonala és az irodai kijárat kint, valamint a feloldó név szerint. A névtereket a telepítésről nevezze el, ne a protokollról, hogy egy takarítószkript ne keverje össze kettőt.
Továbbítás, hibaüzemmód és takarítás
Átjáró esetén kapcsolja be a továbbítást szándékosan, és döntse el, mi történjen, ha az alagút megszakad. A névtér nem blokkolja a benne telepített útvonalakat, ezért a gazdagép felé mutató tartalék útvonalat használni fogja, ha létrehoz egyet. Ez szakpolitikai döntés, és érdemes leírni, mielőtt egy kiesés próbára teszi.
Jegyezze fel a névterek nevét, az interfészeket és hogy kié a konfiguráció, hogy a takarítás csak azt távolítsa el, amit a telepítés létrehozott. A gazdagép hálózatának visszaállítása visszagörgetéskor takarításból kiesést csinál. A network_namespaces(7) oldal rövid, és érdemes elolvasni, mielőtt azt az utat megtervezi.