Linux-netwurknammeruonten foar in VPN: wat se net isolearje
In nammeruonte ferpleatst ynterfaces, rûtes en sockets, net bestannen of akkounts. Hjir is wat in VPN yn syn eigen netns dekt, en wêr’t ferkear noch altyd ûntsnapt.
Start de VPN binnen syn eigen nammeruonte, rin ien applikaasje dêr, en ferkear giet noch altyd fuort fia de rûte fan ’e host. Neat is stikken: de nammeruonte bestjoert allinich prosessen dy’t deryn komme, en de lek kaam fan ien dy’t dat nea die. Ynterfaces, adressen, rûtes, firewallregels en sockets binne wat de nammeruonte besit. Bestannen, akkounts en al rinnende tsjinsten net, en dêr komme de measte ferrassingen wei.
Wat de nammeruonte besit, en wêr’t de socket berne wurdt
Ferpleats in ynterface nei in nammeruonte en de host ferliest it; bou in tunnel binnen en de host kin it net sjen. Dat is it meganisme efter in nammeruonte-bûn VPN: it apparaat en de rûtes dernei libje yn in kontekst dy’t allinich de keazen prosessen berikke kinne. De host hâldt syn standertrûte, dus alles bûten bliuwt ûnoantaat.
Foar WireGuard jildt de oanmeitsjenkontekst likefolle as de hjoeddeiske lokaasje: de UDP-socket wurdt bûn yn ’e nammeruonte dêr’t it ynterface oanmakke is, sels neidat it apparaat earne oars hinne ferpleatst. Hokker rûtetabel de fersifere pakketten folgje, hinget fan dat bertesteed ôf. As de socket yn in kontekst bliuwt sûnder rûte nei de peer, siket it ynterface en de hânskikking giet nea fuort. Kontrolearje syn bertesteed, dan syn hjoeddeiske lokaasje.
Wat in nammeruonte net isolearret
Neat hjir skiedt bestânssystemen, akkounts of geheimen, en gjin fan dy grinzen ûntstiet om’t jo in nammeruonte oanmakke hawwe. Resolver-konfiguraasje is in bestân, dus in proses binnen kin noch altyd in ynstelling lêze dy’t nei de resolver fan ’e host wiist en syn fraach fuortstjoere fia hokker rûte dat ek ymplisearret. In applikaasje dy’t it fersyk oerdraacht oan in al rinnende broker of systeemtsjinst belûkt in proses yn in hiel oare kontekst. Beide binne fersiken dy’t de grins nea bedoeld wie om te beantwurdzjen.
De oplossing is in bestân per nammeruonte by /etc/netns/<name>/resolv.conf, of in bind mount fan in taret bestân, rjochte op in resolver berikber fan binnen. /etc/resolv.conf op ’e host bewurkje feroaret neat fan wat de nammeruonte sjocht.
It pleatsen fan prosessen is de kontrôle
De isolaasje dy’t jo krije is krekt de isolaasje fan ’e prosessen dy’t jo binnen starte. In shell start fia de exec-helper fan ’e nammeruonte, en alles wat dy foartbringt, bliuwt binnen; in buroblêdapplikaasje lansearre fan ’e hostsessy net. Meitsje de kontekst, ferpleats it apparaat, en bewize dan beide kanten:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Lês de earste wg show fan binnen de nammeruonte en de twadde fan ’e host, en fervacht dat mar ien fan beide de peer listet. As beide dat dogge, hat it apparaat him nea ferpleatst; as gjinien dat docht, is it earne oars hinne gien. As de lansearder in tsjinstbehearder is, is it unitbestân wat bewurke wurde moat, net de buroblêdferwizing. In unit sûnder de nammeruonte-ynstelling start de daemon yn ’e hostkontekst en makket it ûntwerp stilwei ûngedien.
Test fan ’e applikaasjekontekst
Rin de kontrôle mei deselde binary en deselde brûker dy’t de applikaasje brûkt, binnen de nammeruonte. Nim DNS en beide adresfamyljes mei, want in IPv6-rûte dêr’t jo nea oan tocht hawwe is in gewoane útgong. In test fan jo eigen shell bewiist allinnich dat jo shell isolearre is.
Rin dan deselde kontrôle op ’e host en befêstigje dat de antwurden ferskille: tunneladres en bedoelde útgong binnen, hostrûte en kantoarútgong bûten, en de resolver by namme. Neam nammeruonten nei de útrulling ynstee fan it protokol, sadat in opromskript net twa fan harren trochinoar hellet.
Trochstjoeren, flaterbelied en opromjen
Foar in gateway set trochstjoeren bewust oan en beslút wat der barre moat as de tunnel falt. In nammeruonte blokkearret gjin rûtes dy’t jo deryn ynstallearje, dus in fallbackrûte nei de host wurdt brûkt as jo der ien meitsje. Dat is in beliedsbeslút, en it soe opskreaun wurde moatte foardat in útfal it test.
Skriuw de nammeruontenammen, de ynterfaces en wa’t de konfiguraasje besit op, sadat opromjen allinnich fuorthellet wat de útrulling oanmakke hat. It weromsetten fan it hostnetwurk by in weromrôljen feroaret in opromjen yn in útfal. De network_namespaces(7) side is koart en wurdich om te lêzen foardat jo dat paad ûntwerpe.