Nukopijuokite profilį į planšetę, prisijunkite — ir nešiojamasis kompiuteris atsijungia. Pridėkite duplicate-cn, abu lieka prisijungę, ir problema atrodo išspręsta, kol du įrenginiai nepradeda kautis dėl to paties tunelio adreso arba pamesta planšetė neišjungia visos paskyros. Ši parinktis keičia vieną dalyką ir tik vieną: ar serveris leidžia antrą sesiją vardu, kurį jau matė. Viskas, ko žmonės tikisi, kad ji sutvarkys — nuo įrenginių nepriklausomumo iki adresavimo pagal įrenginį ir selektyvaus atšaukimo — vis dar daroma per tapatybę, o tapatybė čia yra sertifikatas.

Mitas: antra sesija yra antra tapatybė

Intuicija sako, kad dvi jungtys turi būti du klientai, o du klientai turėtų būti du įrenginiai su savo teisėmis. Serveris to taip nemodeliuoja. Jis mato bendrą vardą ir, įjungus duplicate-cn, priima daugiau nei vieną gyvą sesiją su tuo vardu, ir kiekviena gauna savo sesijos būseną tarnybos procese.

Tas priėmimas niekaip neliečia sertifikato tikrinimo. Tas pats sertifikatas tebėra prisijungimo duomuo, tas pats raktas tebėra privatusis raktas, ir bet kokia politika, pagrįsta sertifikato subjektu, vis dar du kartus išsprendžiama į tą pačią reikšmę. Antra sesija yra antras socket, ne antra tapatybė.

Šis skirtumas nematomas, kol viskas veikia. Jis tampa labai matomas tą akimirką, kai reikia atskirti du įrenginius — o tai paprastai ta diena, kai vienas jų pametamas.

Kas tikrai pasikeičia, kai dvi sesijos dalijasi vardu

Be parinkties nauja jungtis bendru vardu, kuris jau prijungtas, išstumia ankstesnę sesiją. Štai kodėl nešiojamasis kompiuteris atsijungia, kai prisijungia planšetė, ir tai yra sąmoninga apsauga nuo dviprasmybės, o ne klaida. Su parinktimi abi sesijos lieka gyvos, ir serveris jas seka atskirai pagal sesiją, o ne pagal įrenginį.

Kiekviena sesija vis dar gauna savo išorinę jungtį ir savo suderėtus raktus, todėl lygiagretus pralaidumas tikrai lygiagretus. Bendra yra viskas, kas kildinama iš prisijungimo duomens: politikos paieškos, klientui būdinga konfigūracija, tapatybė žurnaluose ir atšaukimas. Sesijos būsena priklauso jungčiai ir miršta kartu su ja, o prisijungimo duomens lygio faktai išlieka abiem. Todėl būsenos išvestis gali du kartus išvardyti tą patį vardą, o skaitikliai lieka atskiri.

Patikrinkite, ką jūsų rinkinys iš tikrųjų daro, prieš projektuodami pagal jį, nes parinkties poveikį apibrėžia pati parinktis, o ne padavimai:

grep -n 'duplicate-cn\|client-config-dir\|username-as-common-name' /etc/openvpn/server.conf

Statinis adresas, kurį manėte priskyrę

Konfigūracija kiekvienam klientui ieškoma pagal vardą, ir čia yra spąstai. Failas client-config-dir, pavadintas bendru vardu taikomas kiekvienam įrenginiui, naudojančiam tą vardą, todėl jame esantis ifconfig-push suteikia abiem įrenginiams tą patį tunelio adresą. Antra sesija arba nenusistato, arba susiduria taip, kad atrodo kaip maršrutizavimo gedimas.

Dinaminis telkinys elgiasi geriau atsitiktinai, nes kiekvienai sesijai adresas iš telkinio skiriamas nepriklausomai. Tai vis tiek neduoda stabilaus adreso pagal įrenginį ir tikrai neduoda su tuo adresu susietos politikos pagal įrenginį.

Jei diegimas naudoja username-as-common-name, paieškos raktas tampa autentifikuotas vartotojo vardas, o ne sertifikato subjektas, ir ta pati kolizija ištinka kiekvieną, kas prisijungia du kartus. Konfigūraciją valdantis vardas turi būti unikalus kiekvienam įrenginiui, kad konfigūracija pagal įrenginį ką nors reikštų.

Ko bendra tapatybė negali padaryti šalinimo metu

Atšaukimas veikia sertifikatą, o ne rodomą vardą ir ne sesiją. Atšaukite tą sertifikatą — ir kiekvienas įrenginys su kopija iškart netenka prieigos, įskaitant tą biure, kurio niekas nenori trikdyti. Palikite jį — ir pamestas įrenginys veikia toliau, nes protokole niekas jo neatskiria nuo patvirtintos kopijos.

Žurnalai paveldi tą pačią dviprasmybę. Būsenos išvestis rodo bendrą vardą ir tikrą adresą, ir abu gali priklausyti bet kuriam iš dviejų įrenginių. Incidento apžvalga, kuriai reikia žinoti, kuri mašina ką padarė, negali atsakyti į šį klausimą iš pačių VPN įrašų, kad ir kiek detalių suteiktų žurnalo lygis.

Tam nėra kriptografinio apėjimo būdo. Du įrenginiai, pateikiantys tą patį sertifikatą, serveriui yra tas pats dalyvis du kartus, ir bet kokia schema, teigianti priešingai, yra pavadinimų konvencija, o ne kontrolė.

Kada dalijimasis teisingas ir kaip jį apriboti

Dalijimasis turi teisėtų naudojimo atvejų: laboratorijos paskyra, kurią naudoja kelios bandomosios mašinos, arba namai, kur įrenginiai administruojami kartu ir atšaukimo detalumas nesvarbus. Tokiais atvejais įjunkite parinktį sąmoningai, laikykite bendrą prisijungimo duomenį už politikos pagal įrenginį ribų ir palikite telkiniui vietos, kad sesijos negalėtų susidurti dėl adreso.

Viskam, kam reikia atskirų adresų, atskirų žurnalų ar atskiro šalinimo, išduokite atskirus sertifikatus įprastu registracijos keliu. Tai kiekvienai tolesnei sistemai duoda atskirą objektą, kuriuo remtis, ir parinktis nustoja būti svarbi, nes vardai jau unikalūs.

Kad ir kokį kelią pasirinktumėte, tikrinkite valdymo modelį, o ne prisijungimą. Prijunkite abu įrenginius, patvirtinkite, kad jie turi skirtingus adresus, tada imituokite praradimą ir patikrinkite, ar galite pašalinti tiksliai vieną iš jų. openvpn(8) vadovas apibrėžia parinkties apimtį; jūsų šalinimo procedūra apibrėžia, ar dalijimasis tikrai priimtinas.

Susiję straipsniai