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

Дзве машыны, два пытанні, на якія трэба адказаць спачатку

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

Адказ на гэтыя два пытанні ў зваротным парадку — гэта шлях, якім людзі пачынаюць спрабаваць прапхнуць batch-файл на ноўтбук з Windows. Сервер ведае, хто падключыўся; ноўтбук ведае, як выглядае яго ўласны сеткавы стек. Ні адзін не мае інфармацыі іншага, і спроба звычайна ціха правальваецца, а не дае ясную памылку.

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

Серверны варыянт: падзея на кожнае злучэнне

Скрыпт client-connect выконваецца ў кантэксце працэсу сервера, калі падключаецца аўтэнтыфікаваны кліент, і атрымлівае дакументаваныя звесткі пра злучэнне, такія як common name і прызначаны адрас. Гэта правільнае месца, каб запісаць фрагмент канфігурацыі для кліента, прымусіць выканаць палітычнае рашэнне або зафіксаваць стан, якім валодае сервер.

Адрозненне, якое людзі прапускаюць, — гэта розніца паміж гэтым хукам і серверным хукам up. Хук up спрацоўвае, калі сервер адкрывае сваю тунэльную прыладу, што на шмацькліенцкім серверы адбываецца адзін раз пры запуску дэмана. Гэта не падзея на кожны ўваход, і код, змешчаны там, выконваецца пры запуску службы, а не пры падключэнні карыстальнікаў.

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

Кліенцкі варыянт: праца, якая мусіць выконвацца лакальна

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

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

Назвы таксама важныя. Хук up адпавядае стварэнню прылады, а route-up — усталёўцы маршрутаў, але задача, якой патрэбная дасяжнасць прыватнай сеткі, павінна правяраць дасяжнасць, а не меркаваць, што стварэнне прылады азначае гатоўнасць кожнага маршруту, запісу рэзалвера і праграмы.

Чаму пушыць выканальны код не прапаноўваецца

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

Уключэнне выканання скрыптоў лакальна гэтага не змяняе. Ваша налада script-security дазваляе лакальныя скрыпты, якія вы выбралі; яна не дае серверу права пастаўляць новыя.

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

Што праверыць, перш чым давяраць любому з хукаў

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

Тэстуйце пад уліковым запісам, які сапраўды будзе яго выконваць, у момант, калі ён сапраўды будзе выконвацца. Дапаможнік openvpn(8) апісвае абодва сямействы хукаў і абмежаванні push; платформа, на якую вы разгортваеце, апісвае, ці прапануе яна іх наогул. Скрыпт, які паспяхова выконваецца ў інтэрактыўным тэрмінале адміністратара, — гэта гіпотэза, а не праверка.

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