Hapësirat e emrave të rrjetit Linux për një VPN: çfarë nuk izolojnë
Një hapësirë emrash zhvendos ndërfaqet, rrugët dhe soketat, jo skedarët ose llogaritë. Këtu është çfarë mbulon një VPN në netns-in e vet, dhe nga ku trafiku ende shpëton.
Nisni VPN-në brenda hapësirës së vet të emrave, ekzekutoni atje një aplikacion, dhe trafiku prapë del nga rruga e hostit. Asgjë nuk është prishur: hapësira e emrave qeveris vetëm proceset që hyjnë në të, dhe rrjedhja erdhi nga një proces që nuk hyri kurrë. Ndërfaqet, adresat, rrugët, rregullat e murit mbrojtës dhe soketat janë ajo që zotëron hapësira e emrave. Skedarët, llogaritë dhe shërbimet që tashmë ekzekutohen nuk janë, dhe nga këtu vijnë shumica e surprizave.
Çfarë zotëron hapësira e emrave, dhe ku lind soketi
Zhvendosni një ndërfaqe në një hapësirë emrash dhe hosti e humb atë; ndërtoni një tunel brenda dhe hosti nuk mund ta shohë. Ky është mekanizmi i një VPN të kufizuar në hapësirë emrash: pajisja dhe rrugët drejt saj jetojnë në një kontekst që vetëm proceset e zgjedhura arrijnë. Hosti mban rrugën e tij të parazgjedhur, kështu që gjithçka jashtë mbetet e paprekur.
Për WireGuard konteksti i krijimit ka rëndësi njësoj si vendndodhja aktuale: soketi UDP lidhet në hapësirën e emrave ku u krijua ndërfaqja, edhe pasi pajisja zhvendoset diku tjetër. Nga cila tabelë rrugëtimi ndjekin paketat e kriptuara varet nga ai vend lindjeje. Kur soketi mbetet në një kontekst pa rrugë drejt partnerit, ndërfaqja kërkon dhe shtrëngimi i duarve nuk del kurrë. Kontrolloni vendin e lindjes, pastaj vendndodhjen aktuale.
Çfarë nuk izolon një hapësirë emrash
Asgjë këtu nuk ndan sistemet e skedarëve, llogaritë ose sekretet, dhe asnjë prej këtyre kufijve nuk shfaqet sepse krijuat një hapësirë emrash. Konfigurimi i rezolutorit është një skedar, prandaj një proces brenda ende mund të lexojë një cilësim që tregon rezolutorin e hostit dhe të dërgojë pyetjen e vet nëpër rrugën që kjo nënkupton. Një aplikacion që ia dorëzon kërkesën një ndërmjetësi ose shërbimi sistemi që tashmë ekzekutohet përfshin një proces në një kontekst krejt tjetër. Të dyja janë kërkesa që kufiri nuk ishte kurrë i destinuar t’u përgjigjet.
Zgjidhja është një skedar për çdo hapësirë emrash në /etc/netns/<name>/resolv.conf, ose një bind mount i një skedari të përgatitur, i drejtuar drejt një rezolutori të arritshëm nga brenda. Redaktimi i /etc/resolv.conf në host nuk ndryshon asgjë nga ajo që sheh hapësira e emrave.
Vendosja e proceseve është kontrolli
Izolimi që merrni është saktësisht izolimi i proceseve që nisni brenda. Një shell i nisur përmes ndihmësit exec të hapësirës së emrave, dhe gjithçka që ai prodhon, mbetet brenda; një aplikacion desktop i nisur nga sesioni i hostit jo. Krijoni kontekstin, zhvendosni pajisjen, pastaj provoni të dyja anët:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Lexoni wg show e parë nga brenda hapësirës së emrave dhe të dytin nga hosti, dhe prisni që vetëm njëri prej tyre të listojë partnerin. Nëse të dy e bëjnë, pajisja nuk u zhvendos kurrë; nëse asnjë, shkoi diku tjetër. Kur nisësi është menaxher shërbimesh, skedari unit është ai që duhet redaktuar, jo shkurtorja e desktopit. Një unit pa cilësimin e hapësirës së emrave nis daemonin në kontekstin e hostit dhe e anulon dizajnin në heshtje.
Testoni nga konteksti i aplikacionit
Ekzekutoni kontrollin me të njëjtin binar dhe të njëjtin përdorues që përdor aplikacioni, brenda hapësirës së emrave. Përfshini DNS dhe të dyja familjet e adresave, sepse një rrugë IPv6 për të cilën nuk keni menduar kurrë është një dalje e zakonshme. Një test nga shell-i juaj provon vetëm se shell-i juaj është i izoluar.
Pastaj ekzekutoni të njëjtin kontroll në host dhe konfirmoni se përgjigjet ndryshojnë: adresa e tunelit dhe dalja e synuar brenda, rruga e hostit dhe dalja e zyrës jashtë, dhe rezolutori sipas emrit. Emërtoni hapësirat e emrave sipas vendosjes dhe jo protokollit, që një skript pastrimi të mos ngatërrojë dy prej tyre.
Përcjellja, politika e dështimit dhe pastrimi
Për një portë, aktivizoni përcjelljen me qëllim dhe vendosni çfarë duhet të ndodhë kur tuneli bie. Një hapësirë emrash nuk bllokon rrugët që instaloni brenda saj, prandaj një rrugë rezervë drejt hostit do të përdoret nëse krijoni një. Ky është një vendim politike, dhe duhet të shkruhet para se një ndërprerje ta testojë.
Shënoni emrat e hapësirave të emrave, ndërfaqet dhe kush zotëron konfigurimin, që pastrimi të heqë vetëm atë që krijoi vendosja. Rikthimi i rrjetit të hostit gjatë një kthimi pas e kthen pastrimin në ndërprerje. Faqja network_namespaces(7) është e shkurtër dhe ia vlen të lexohet para se të projektoni atë rrugë.