Tuneļi, kas parādās tikai pēc tam, kad kāds ir pieteicies, parasti tiek palaisti no šīs personas sesijas, nevis no automātiskā pakalpojuma. Parastais vaininieks ir sāknēšanas saīsne, kas palaiž openvpn-gui.exe, un tā nav bojāta instalācija. Saīsne palaiž galddatora lietotni lietotāja sesijas ietvaros ar šī lietotāja profilu, šī lietotāja sertifikātu krātuvēm un šī lietotāja spēju atbildēt uz uzvedni. Nekas no tā nepadara savienojumu neatkarīgu no pieteikušās personas, un tieši tas ir nepieciešams tunelim pirms pieteikšanās.

Simptomam parasti ir trīs cēloņi

Trīs modeļi no malas izskatās vienādi, bet tiem ir atšķirīgi risinājumi. Pirmais ir izpildes īpašnieks, kas ir lietotāja sesija, nevis pakalpojums, tas ir sāknēšanas saīsnes gadījums. Otrais ir profils, kas atrodas tur, kur pakalpojums neskatās, tāpēc pakalpojums startē, neko neatrod un tīri beidz darbu. Trešais ir profils, ko pakalpojums atrod un startē, bet kura akreditācijas datiem nepieciešama mijiedarbība, ko neviens pakalpojums nevar nodrošināt.

Lai noteiktu, kurš gadījums attiecas, vajadzīgi divi nolasījumi: ko pakalpojums ir konfigurēts palaist un kādus failus tas var redzēt. Abi ir pa vienai komandai, un neviens no tiem netraucē darbojošos savienojumu.

Ko automātiskais pakalpojums faktiski nolasa

Community automātiskais pakalpojums ir ietvars, kas skenē tā konfigurēto automātiskās palaišanas direktoriju, parasti config-auto instalācijas mapē, un palaiž OpenVPN procesu katram atrastajam atbilstošajam profilam. Profils, kas redzams lietotāja GUI izvēlnē, atrodas šī lietotāja viesabonēšanas profila ietvaros, direktorijā, ko pakalpojuma konts nenolasa. Windows pakalpojuma rokasgrāmata apraksta šo atklāšanu, un to ir vērts izlasīt pirms kaut kā kopēšanas, jo mērķa direktorijs ir instalācijas īpašība, nevis noteikta konvencija. Tāpēc faila kopēšana GUI mapē pakalpojumam neko nemaina, bet kopēšana katrā mapē ar nosaukumu config rada dublikātus, nevis risinājumu.

Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'

Pēdējā komanda uzskaita, ko ietvars faktiski redzēs, un tas ir ātrākais veids, kā apstiprināt, ka profils atrodas nepareizā vietā. Otrā rinda parāda arī kontu, ar kuru pakalpojums darbojas, un šis konts izlemj, kuri failu ceļi un sertifikātu krātuves vispār ir sasniedzami.

Kāpēc galddatora pieteikšanās darbojas, bet sāknēšanas starts ne

Panākumi galddatorā var ilgu laiku slēpt atkarību no ievades. GUI var savākt atslēgas paroli, konta paroli vai otru faktoru dialogā, jo tas darbojas interaktīvā sesijā ar redzamu galddatoru. Pakalpojums darbojas sesijā bez galddatora, tāpēc pieprasījumam pēc ievades nav kur parādīties, un savienojums pārtrūkst pēc taimauta, kas nemaz neizskatās pēc akreditācijas datu problēmas.

Failu piekļuve ievēro to pašu noteikumu. Privātā atslēga, kas glabājas lietotāja profilā, vai sertifikāts lietotāja personīgajā krātuvē, nav pieejams pakalpojumam, kas darbojas kā mašīna. Salīdziniet absolūtos ceļus, atļaujas un katras puses veikto sertifikāta izvēli, nevis pieņemiet, ka viens un tas pats profila fails nozīmē vienu un to pašu vidi.

Plānotais uzdevums, kas iestatīts darboties neatkarīgi no tā, vai lietotājs ir pieteicies, manto līdzīgu ierobežojumu. Tas var veiksmīgi palaist GUI izpildāmo failu un tomēr radīt procesu, kas nekad neiegūst akreditācijas datus, tāpēc procesa klātbūtne uzdevumu pārvaldniekā nav pierādījums strādājošam tunelim.

Izvēlieties vienu īpašnieku un pārbaudiet reālo dzīves ciklu

Savienojumam, kas pieder pieteikušajai personai, izmantojiet GUI atbalstīto automātiskās palaišanas darbību un atstājiet pakalpojumu ārpus tā. Tunelim, kam jāpastāv pirms kāds pieteicas, konfigurējiet pakalpojumu, ievietojiet profilu tur, kur to nolasa ietvars, un izmantojiet atbalstītu bezuzraudzības akreditācijas datu mehānismu, piemēram, atslēgu bez interaktīvas paroles vai dokumentētu akreditācijas datu failu.

Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'

Pārbaudiet dzīves ciklu, kam ir nozīme: pārstartēšanu, kad neviens nepiesakās, pēc tam atkārtotu savienojumu pēc tīkla maiņas. Turiet vienu īpašnieku savienojumam, jo divi konkurējoši palaišanas mehānismi parasti rada divas instances, kas cīnās par tiem pašiem maršrutiem un to pašu servera sesiju, un to diagnosticēt ir grūtāk nekā jebkuru mehānismu atsevišķi.

Saistītie raksti