Linux-nettverksnamnerom for ein VPN: kva dei ikkje isolerer
Eit namnerom flyttar grensesnitt, ruter og sockets, ikkje filer eller kontoar. Her er kva ein VPN i sitt eige netns dekkjer, og kvar trafikken framleis slepp ut.
Start VPN-en inne i sitt eige namnerom, køyr éin applikasjon der, og trafikken går framleis ut via ruta til verten. Ingenting er øydelagt: namnerommet styrer berre prosessar som går inn i det, og lekkasjen kom frå ein som aldri gjorde det. Grensesnitt, adresser, ruter, brannmurreglar og sockets er det namnerommet eig. Filer, kontoar og tenester som alt køyrer er det ikkje, og det er der dei fleste overraskingane kjem frå.
Kva namnerommet eig, og kvar socketen vert fødd
Flytt eit grensesnitt inn i eit namnerom, og verten mistar det; bygg ein tunnel inni, og verten kan ikkje sjå han. Det er mekanismen bak ein namneromsavgrensa VPN: eininga og rutene som peikar mot henne lever i ein kontekst berre dei valde prosessane kan nå. Verten held på standardruta si, så alt utanfor vert urørt.
For WireGuard tel opprettingskonteksten like mykje som noverande plassering: UDP-socketen vert bunden i namnerommet der grensesnittet vart oppretta, sjølv etter at eininga flyttar ein annan stad. Kva rutetabell dei krypterte pakkane følgjer, kjem an på den fødestaden. Når socketen vert verande i ein kontekst utan rute til peeren, slår grensesnittet opp, og handtrykket går aldri ut. Kontroller fødestaden, deretter noverande plassering.
Kva eit namnerom ikkje isolerer
Ingenting her skil filsystem, kontoar eller løyndommar, og ingen av desse grensene dukkar opp fordi du oppretta eit namnerom. Resolverkonfigurasjonen er ei fil, så ein prosess inni kan framleis lese ei innstilling som peikar på resolveren til verten og sende spørjinga si ut gjennom den ruta det inneber. Ein applikasjon som overlèt førespurnaden til ein alt køyrande mellomledd eller systemteneste, involverer ein prosess i ein heilt annan kontekst. Begge er førespurnader grensa aldri var meint å svare på.
Løysinga er ei fil per namnerom på /etc/netns/<name>/resolv.conf, eller ei bind mount av ei førebudd fil, retta mot ein resolver som er nåbar innanfrå. Å redigere /etc/resolv.conf på verten endrar ingenting av det namnerommet ser.
Plasseringa av prosessar er kontrollen
Isolasjonen du får, er nøyaktig isolasjonen til prosessane du startar inni. Eit skal starta gjennom exec-hjelparen til namnerommet, og alt det avlar, vert inne; ein skrivebordsapplikasjon starta frå økta til verten vert ikkje. Opprett konteksten, flytt eininga, og prov deretter begge sider:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Les den første wg show innanfrå namnerommet og den andre frå verten, og vent at berre éin av dei listar peeren. Om begge gjer det, har eininga aldri flytta seg; om ingen gjer det, gjekk ho ein annan stad. Når oppstartaren er ein tenestebehandlar, er det unit-fila som skal redigerast, ikkje skrivebordsnarvegen. Ei unit utan namneromsinnstillinga startar daemonen i konteksten til verten og opphevar stille designet.
Test frå konteksten til applikasjonen
Køyr kontrollen med same binærfil og same brukar som applikasjonen brukar, inne i namnerommet. Ta med DNS og begge adressefamiliane, fordi ei IPv6-rute du aldri har tenkt på, er ein vanleg veg ut. Ein test frå ditt eige skal provar berre at skalet ditt er isolert.
Køyr deretter den identiske kontrollen på verten og stadfest at svara er ulike: tunneladresse og tiltenkt utgang inni, ruta til verten og utgangen til kontoret utanfor, og resolveren ved namn. Namngje namnerom etter utrullinga og ikkje protokollen, slik at eit oppryddingsskript ikkje forvekslar to av dei.
Vidaresending, feilpolitikk og opprydding
For ein gateway slår du medvite på vidaresending og avgjer kva som skal skje når tunnelen fell. Eit namnerom blokkerer ikkje ruter du installerer inni det, så ein reserveveg til verten vert brukt om du lagar ein. Det er ei politisk avgjerd, og ho bør skrivast ned før eit utfall testar henne.
Noter namna på namneromma, grensesnitta og kven som eig konfigurasjonen, slik at oppryddinga berre fjernar det utrullinga oppretta. Å nullstille nettverket til verten under ei tilbakerulling gjer opprydding til eit utfall. Sida network_namespaces(7) er kort og verdt å lese før du designar den vegen.