Linux tīkla nosaukumtelpas VPN vajadzībām: ko tās neizolē
Nosaukumtelpa pārvieto saskarnes, maršrutus un ligzdas, nevis failus vai kontus. Lūk, ko VPN savā netns aptver un kur satiksme joprojām izplūst.
Palaidiet VPN savā nosaukumtelpā, tur palaidiet vienu lietojumprogrammu, un satiksme joprojām iziet pa resursdatora maršrutu. Nekas nav salauzts: nosaukumtelpa pārvalda tikai tos procesus, kas tajā ieiet, un noplūde nāca no procesa, kas nekad neiegāja. Saskarnes, adreses, maršruti, ugunsmūra noteikumi un ligzdas ir tas, kam nosaukumtelpa pieder. Faili, konti un jau darbojošies pakalpojumi nav, un no šejienes nāk lielākā daļa pārsteigumu.
Ko nosaukumtelpa pārvalda un kur piedzimst ligzda
Pārvietojiet saskarni uz nosaukumtelpu, un resursdators to pazaudē; izveidojiet tuneli iekšpusē, un resursdators to nevar redzēt. Tas ir VPN, kas ierobežots ar nosaukumtelpu, mehānisms: ierīce un uz to vērstie maršruti dzīvo kontekstā, kuru sasniedz tikai atlasītie procesi. Resursdators saglabā savu noklusējuma maršrutu, tāpēc viss ārpusē paliek neskarts.
WireGuard gadījumā izveides konteksts ir tikpat svarīgs kā pašreizējā atrašanās vieta: UDP ligzda tiek piesaistīta tajā nosaukumtelpā, kur tika izveidota saskarne, pat pēc tam, kad ierīce pārvietojas citur. Kuru maršrutēšanas tabulu šifrētie paketes seko, ir atkarīgs no šīs dzimšanas vietas. Kad ligzda paliek kontekstā bez maršruta uz partneri, saskarne meklē un roku paspiešana nekad neiziet. Pārbaudiet tās dzimšanas vietu, pēc tam pašreizējo atrašanās vietu.
Ko nosaukumtelpa neizolē
Nekas šeit neatdala failu sistēmas, kontus vai noslēpumus, un neviena no šīm robežām neparādās tāpēc, ka izveidojāt nosaukumtelpu. Resolver konfigurācija ir fails, tāpēc process iekšpusē joprojām var nolasīt iestatījumu, kas norāda uz resursdatora resolveri, un nosūtīt savu vaicājumu pa maršrutu, ko tas nozīmē. Lietojumprogramma, kas pieprasījumu nodod jau darbojošamies starpniekam vai sistēmas pakalpojumam, iesaista procesu pilnīgi citā kontekstā. Abi ir pieprasījumi, uz kuriem robeža nekad nav bijusi paredzēta atbildēt.
Risinājums ir fails katrai nosaukumtelpai /etc/netns/<name>/resolv.conf vietā, vai sagatavota faila bind mount, kas vērsts uz resolveri, kas sasniedzams no iekšpuses. /etc/resolv.conf rediģēšana resursdatorā neko nemaina tajā, ko redz nosaukumtelpa.
Procesu izvietojums ir kontrole
Izolācija, ko iegūstat, ir tieši iekšpusē palaisto procesu izolācija. Čaula, kas palaista caur nosaukumtelpas exec palīgu, un viss, ko tā rada, paliek iekšpusē; darbvirsmas lietojumprogramma, kas palaista no resursdatora sesijas, ne. Izveidojiet kontekstu, pārvietojiet ierīci, pēc tam pierādiet abas puses:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Nolasiet pirmo wg show nosaukumtelpas iekšpusē un otro resursdatorā, un gaidiet, ka tikai viens no tiem uzskaitīs partneri. Ja abi to dara, ierīce nekad nav pārvietojusies; ja neviens, tā aizgāja citur. Kad palaidējs ir pakalpojumu pārvaldnieks, rediģējamais ir unit fails, nevis darbvirsmas saīsne. Unit bez nosaukumtelpas iestatījuma palaiž dēmonu resursdatora kontekstā un klusi atceļ dizainu.
Pārbaudiet lietojumprogrammas kontekstā
Palaidiet pārbaudi ar to pašu bināro failu un to pašu lietotāju, ko izmanto lietojumprogramma, nosaukumtelpas iekšpusē. Iekļaujiet DNS un abas adrešu saimes, jo IPv6 maršruts, par ko nekad neesat domājis, ir ierasta izeja. Pārbaude no jūsu paša čaulas pierāda tikai to, ka jūsu čaula ir izolēta.
Pēc tam palaidiet to pašu pārbaudi resursdatorā un apstipriniet, ka atbildes atšķiras: tuneļa adrese un paredzētā izeja iekšpusē, resursdatora maršruts un biroja izeja ārpusē, un resolver pēc nosaukuma. Nosaucie nosaukumtelpas pēc izvietojuma, nevis protokola, lai tīrīšanas skripts nesajauktu divas no tām.
Pāradresācija, kļūmju politika un tīrīšana
Vārtejai apzināti ieslēdziet pāradresāciju un izlemiet, kas jānotiek, kad tunelis nokrīt. Nosaukumtelpa nebloķē maršrutus, ko tajā instalējat, tāpēc rezerves maršruts uz resursdatoru tiks izmantots, ja tādu izveidosiet. Tas ir politikas lēmums, un tas jāpieraksta pirms tam, kad to pārbaudīs kļūme.
Pierakstiet nosaukumtelpu nosaukumus, saskarnes un to, kam pieder konfigurācija, lai tīrīšana noņemtu tikai to, ko izveidoja izvietojums. Resursdatora tīkla atiestatīšana atritināšanas laikā pārvērš tīrīšanu kļūmē. Lapa network_namespaces(7) ir īsa, un to ir vērts izlasīt pirms šī ceļa projektēšanas.