Тунэлі, якія з'яўляюцца толькі пасля ўваходу кагосьці ў сістэму, звычайна запускаюцца сеансам гэтага чалавека, а не аўтаматычнай службай. Звычайны вінаваты — ярлык у аўтазагрузцы, які запускае openvpn-gui.exe, і гэта не зламаная ўстаноўка. Ярлык запускае праграму працоўнага стала ўнутры карыстальніцкага сеансу, з профілем гэтага карыстальніка, яго сховішчамі сертыфікатаў і здольнасцю адказаць на запыт. Нішто ў гэтым не робіць злучэнне незалежным ад чалавека, які ўвайшоў, а менавіта гэтага патрабуе тунэль да ўваходу.

Сімптом звычайна мае тры прычыны

Тры ўзоры выглядаюць аднолькава звонку і маюць розныя выпраўленні. Першы — уладальнік выканання, які з'яўляецца карыстальніцкім сеансам, а не службай; гэта выпадак ярлыка ў аўтазагрузцы. Другі — профіль, які знаходзіцца там, куды служба не зазірае, таму служба запускаецца, нічога не знаходзіць і чыста выходзіць. Трэці — профіль, які служба знаходзіць і запускае, але яго ўліковыя даныя патрабуюць узаемадзеяння, якога ніводная служба не можа забяспечыць.

Каб вызначыць, які выпадак падыходзіць, патрэбны два чытанні: што служба сканфігуравана запускаць і якія файлы яна бачыць. Кожнае — адна каманда, і ніводнае не парушае працуючае злучэнне.

Што насамрэч чытае аўтаматычная служба

Аўтаматычная служба Community — гэта абгортка, якая скануе сваю сканфігураваную папку аўтазапуску, звычайна config-auto унутры ўстаноўкі, і запускае працэс OpenVPN для кожнага адпаведнага профілю, які знаходзіць. Профіль, бачны ў меню GUI карыстальніка, ляжыць замест гэтага ў яго roaming-профілі, у папцы, якую ўліковы запіс службы не чытае. Кіраўніцтва па службе Windows апісвае гэтае выяўленне, і яго варта прачытаць перад капіраваннем чаго-небудзь, бо мэтавая папка — уласцівасць устаноўкі, а не фіксаваная ўмова. Таму капіраванне файла ў папку GUI нічога не змяняе для службы, а капіраванне ў кожную папку з назвай config стварае дублікаты, а не выпраўленне.

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'

Апошняя каманда паказвае, што абгортка насамрэч убачыць, і гэта найхутчэйшы спосаб пацвердзіць, што профіль знаходзіцца не там. Другі радок таксама паказвае ўліковы запіс, пад якім працуе служба, а гэты запіс вырашае, якія шляхі да файлаў і сховішчы сертыфікатаў наогул даступныя.

Чаму ўваход на працоўны стол працуе, а загрузка — не

Поспех на працоўным стале можа доўга хаваць залежнасць ад уводу. GUI можа сабраць парольную фразу ключа, пароль уліковага запісу ці другі фактар у дыялогу, бо ён працуе ў інтэрактыўным сеансе з бачным працоўным сталом. Служба працуе ў сеансе без працоўнага стала, таму запыт на ўвод нідзе не можа з'явіцца, і злучэнне зрываецца пасля тайм-аўту, які зусім не падобны на праблему з уліковымі данымі.

Доступ да файлаў падпарадкоўваецца таму ж правілу. Прыватны ключ, захаваны ў профілі карыстальніка, ці сертыфікат у асабістым сховішчы карыстальніка недаступныя службе, якая працуе ад імя машыны. Параўноўвайце абсалютныя шляхі, дазволы і выбар сертыфіката, які робіць кожны бок, а не меркавайце, што адзін і той жа файл профілю азначае адно і тое ж асяроддзе.

Запланаваная задача, настроеная працаваць незалежна ад таго, ці ўвайшоў карыстальнік, атрымлівае падобнае абмежаванне. Яна можа паспяхова запусціць выканальны файл GUI і ўсё ж стварыць працэс, які ніколі не атрымае ўліковых даных, таму наяўнасць працэсу ў дыспетчары задач не з'яўляецца доказам працуючага тунэлю.

Выберыце аднаго ўладальніка і праверце рэальны жыццёвы цыкл

Для злучэння, якое належыць чалавеку, які ўвайшоў, выкарыстоўвайце падтрымліваемую аўтазагрузку GUI і пакіньце службу ў баку. Для тунэлю, які павінен існаваць да таго, як хто-небудзь увойдзе, сканфігуруйце службу, змясціце профіль там, дзе яго чытае абгортка, і выкарыстоўвайце падтрымліваемы механізм аўтаномных уліковых даных, напрыклад ключ без інтэрактыўнай парольнай фразы або дакументаваны файл уліковых даных.

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

Праверце жыццёвы цыкл, які мае значэнне: перазагрузка, калі ніхто не ўваходзіць, а затым перападключэнне пасля змены сеткі. Трымайце аднаго ўладальніка злучэння, бо два канкуруючыя механізмы запуску звычайна ствараюць два асобнікі, якія змагаюцца за адны маршруты і адзін серверны сеанс, і гэта цяжэй дыягнаставаць, чым любы з механізмаў асобна.

Падобныя артыкулы