Kopirajte profil na tablet, povežite se — i laptop ispadne. Dodajte duplicate-cn, oba ostanu povezana i problem izgleda riješen sve dok se dva uređaja ne počnu otimati za istu adresu tunela ili dok izgubljeni tablet ne izbaci cijeli račun iz mreže. Ta opcija mijenja jednu stvar i samo jednu: dopušta li server drugu sesiju pod imenom koje je već vidio. Sve što ljudi očekuju da će popraviti, od neovisnosti uređaja preko adresiranja po uređaju do selektivnog opoziva, i dalje se rješava identitetom, a identitet je ovdje certifikat.

Mit: druga sesija je drugi identitet

Intuicija kaže da dvije veze moraju biti dva klijenta, a dva klijenta dva uređaja s vlastitim pravima. Server to ne modelira tako. On vidi zajedničko ime i, kad je duplicate-cn uključen, prihvaća više od jedne aktivne sesije s tim imenom, pri čemu svaka dobiva vlastito stanje sesije u daemonu.

Ništa u tom prihvaćanju ne dira provjeru certifikata. Isti certifikat je i dalje vjerodajnica, isti ključ je i dalje privatni ključ, a svaka politika vezana uz subjekt certifikata i dalje se dva puta razrješava na istu vrijednost. Druga sesija je drugi socket, a ne drugi identitet.

Ta razlika je nevidljiva dok sve radi. Postaje vrlo vidljiva onog trenutka kad trebate razlikovati dva uređaja, a to je obično dan kad se jedan od njih izgubi.

Što se stvarno mijenja kad dvije sesije dijele ime

Bez opcije, nova veza pod zajedničkim imenom koje je već povezano potiskuje raniju sesiju. Zato laptop ispadne kad se tablet poveže, i to je namjerna zaštita od nejasnoće, a ne bug. S opcijom obje sesije ostaju žive i server ih prati odvojeno po sesiji, a ne po uređaju.

Svaka sesija i dalje dobiva vlastitu vanjsku vezu i vlastite dogovorene ključeve, pa je istovremeni protok doista istovremen. Dijele sve što proizlazi iz vjerodajnice: pretrage politika, konfiguraciju specifičnu za klijenta, identitet u zapisima i opoziv. Stanje sesije pripada vezi i umire s njom, dok činjenice na razini vjerodajnice ostaju za obje. Zato statusni izlaz može dvaput navesti isto ime, a brojači ostaju odvojeni.

Provjerite što vaša gradnja doista radi prije nego što na tome projektirate, jer učinak opcije definira sama opcija, a ne predanja:

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

Statična adresa za koju ste mislili da ste je dodijelili

Konfiguracija po klijentu traži se po imenu i u tome je zamka. Datoteka client-config-dir nazvana po zajedničkom imenu primjenjuje se na svaki uređaj koji koristi to ime, pa ifconfig-push u njoj daje obama uređajima istu adresu tunela. Druga se sesija ili ne uspostavi, ili se sudari tako da to izgleda kao greška usmjeravanja.

Dinamički bazen ponaša se bolje slučajno, jer se svakoj sesiji adresa iz bazena dodjeljuje neovisno. To vam i dalje ne daje stabilnu adresu po uređaju, a svakako vam ne daje politiku po uređaju vezanu uz tu adresu.

Ako postava koristi username-as-common-name, ključ pretrage postaje autentificirano korisničko ime umjesto subjekta certifikata i ista se kolizija ponavlja za svakoga tko se prijavi dvaput. Ime koje pokreće konfiguraciju mora biti jedinstveno po uređaju da bi konfiguracija po uređaju imala smisla.

Što zajednički identitet ne može pri uklanjanju

Opoziv djeluje na certifikat, ne na prikazano ime i ne na sesiju. Opozvite taj certifikat i svaki uređaj koji drži kopiju odmah gubi pristup, uključujući onaj u uredu koji nitko ne želi uznemiravati. Zadržite ga i izgubljeni uređaj nastavlja raditi, jer ga ništa u protokolu ne razlikuje od odobrene kopije.

Zapisi nasljeđuju istu nejasnoću. Statusni izlaz pokazuje zajedničko ime i stvarnu adresu, a oboje može pripadati bilo kojem od dvaju uređaja. Analiza incidenta koja mora znati koje je računalo što učinilo ne može odgovoriti na to pitanje iz vlastitih zapisa VPN-a, koliko god detalja pružala razina zapisivanja.

Za to nema kriptografskog zaobilaznog rješenja. Dva uređaja koja predočuju isti certifikat su za server isti sudionik dvaput, a svaka shema koja tvrdi suprotno jest konvencija imenovanja, a ne kontrola.

Kada je dijeljenje ispravno i kako ga ograničiti

Dijeljenje ima legitimne upotrebe: laboratorijski račun koji koristi nekoliko testnih računala ili kućanstvo u kojem se uređajima upravlja zajedno i granularnost opoziva nije važna. U tim slučajevima svjesno uključite opciju, držite zajedničku vjerodajnicu izvan politike po uređaju i dajte bazenu prostora da se sesije ne mogu sudariti na adresi.

Za sve što treba zasebne adrese, zasebne zapise ili zasebno uklanjanje, izdajte zasebne certifikate uobičajenim putem upisa. To svakom nizvodnom sustavu daje zaseban objekt na koji se može vezati, a opcija prestaje biti važna jer su imena već jedinstvena.

Koji god put odabrali, testirajte model upravljanja, a ne prijavu. Povežite oba uređaja, potvrdite da imaju različite adrese, zatim simulirajte gubitak i provjerite možete li ukloniti točno jedan od njih. Priručnik openvpn(8) definira doseg opcije; vaš postupak uklanjanja definira je li dijeljenje doista prihvatljivo.

Povezani članci