Клијент се повезује, не успева током TLS преговора, чека и поново покушава исти сервер са истим резултатом. Под надзорником који поново покреће неуспели процес, ти покушаји постају бесконачна петља у дневнику, а прва дијагностичка линија измиче из домашаја. OpenVPN нуди опцију која тај неуспех преговора претвара у видљив излаз уместо још једног покушаја. То је подешавање за дијагностику и надзор, а не поправка, зато га повежите са политиком која процесу заиста дозвољава да остане заустављен.

Циклус који скрива прву грешку

Оно што видите није један неуспех, него блок који се понавља: покушај повезивања, TLS грешка, пауза и затим исти след. Свако понављање гура изворну линију све више у дневнику. Ако се јединица поново покреће при неуспеху, циклус може трајати сатима а да нико не прочита узрок. Симптом је петља, иако је основни квар један проблем са преговорима.

Интерактивне сесије то подносе јер се пролазна грешка може очистити у следећем покушају. Аутоматске везе не могу себи да приуште исти оптимизам: процес мора да се заустави да би човек или монитор видео стање.

Пре него што било шта промените, забележите један пун циклус. Запишите удаљену адресу, TLS фазу наведену у грешци и да ли процес уопште излази.

Механизам понављања иза петље

Понављање је подразумевано јер неколико неповезаних временских ограничења дели исти механизам. connect-retry поставља размак између покушаја повезивања, connect-retry-max може ограничити колико се често покушава сваки удаљени унос, а resolv-retry управља поновљеним претрагама имена. Неуспех TLS преговора стиже до тог механизма као транспортни догађај, па клијент заказује још један покушај уместо да пријави. Подразумевана вредност помаже при нестабилној вези и штети при квар који не може да се излечи.

Опција --tls-exit мења само случај преговора. Приручник је описује као излаз при неуспеху TLS преговора, што је уже од изласка при свакој грешци. Временска ограничења, грешке resolvеr-а и одбијања аутентификације задржавају своје понашање.

Натерајте клијент да изађе при TLS неуспеху

Ставите tls-exit у профил који клијент заиста учитава, или наведите --tls-exit при покретању, и покрените га једном у првом плану. Читајте излазни статус и последњу линију дневника, јер надзорник реагује управо на статус. Излаз различит од нуле после неуспеха преговора је жељени резултат. Ако процес настави да покушава уместо да се заврши, опција није у профилу који клијент заиста учитава.

Надзорник одлучује да ли је тај излаз видљив. systemd јединица са Restart=always или Restart=on-failure поново покреће клијент, па се петља наставља и опција изгледа као да не ради ништа. Проверите политику пре него што оптужите клијент:

systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager

Restart=no дозвољава процесу да остане заустављен, а Restart=on-failure ипак поново покреће после статуса различитог од нуле. Ако желите да неуспех буде видљив али да се услуга опорави од неповезаних падова, поставите Restart=on-failure и користите StartLimitBurst и StartLimitIntervalSec да зауставите олују поновних покретања. Затим прочитајте статус јединице да потврдите последњи излазни код: systemctl status га извештава, а дневник чува прву грешку изнад поновних покретања.

Запишите одлуку у јединицу или у белешке профила. Профил који излази при TLS неуспеху изгледа као случајност следећој особи, осим ако разлог није забележен. Наведите које грешке треба да зауставе процес, а које треба поновити.

Докажите то привременом крајњом тачком

Да бисте видели понашање пре него што му поверујете, копирајте профил и усмерите копију на крајњу тачку која прихвата TCP везу, али никада не говори OpenVPN. Довољан је слушалац који одговори и затим ућути. Са tls-exit клијент би требало да се заврши када руковање не успе; без тога исти профил треба да настави да кружи. Користите копију, никада радни профил.

Упоредите два покретања по излазном статусу и по првој линији грешке, а не по томе колико је које трајало. Статус говори да ли се опција активирала, а прва линија говори која фаза није успела.

Уклоните тест профил када завршите. Копија са намерно погрешном крајњом тачком је замка за свакога ко касније покрене сваки профил у директоријуму.

Фазе до којих ова опција никада не стиже

Одбијање аутентификације је каснија фаза. Ако сервер оцени налог и одбије га, TLS је већ договорен, па tls-exit не делује. Подешавања понављања аутентификације су следеће место за преглед, а разлог сервера је важнији од последње линије клијента. Погрешна лозинка и сертификат који недостаје могу да произведу сличне поруке на страни клијента.

Маршута која недостаје, погрешан resolver или недоступан гејтвеј су такође изван опције, јер нису неуспеси преговора. Тихо губљење пакета је најмање очигледан случај: зависно од тога колико је размена одмакла, клијент може да пријави неуспех преговора или једноставно да истекне.

Задржите ту разлику у белешкама. Подешавање је за дијагностику и надзор, а не за поправку, зато не исправља неподударање шифре, проблем са сертификатом или погрешан порт. Прво поправите узрок неуспешних преговора, затим одлучите да ли тренутни излаз још одговара распоређивању.

Повезани чланци