Клієнт підключається, зазнає невдачі під час узгодження TLS, чекає і знову пробує той самий сервер з тим самим результатом. Під наглядачем, який перезапускає невдалий процес, ці спроби перетворюються на нескінченний цикл у журналі, і перший діагностичний рядок зникає з поля зору. OpenVPN має опцію, яка перетворює цю невдачу узгодження на видимий вихід замість ще однієї спроби. Це налаштування для діагностики й нагляду, а не ремонт, тому поєднуйте його з політикою, яка справді дозволяє процесу залишитися зупиненим.

Цикл, який приховує першу помилку

Те, що ви бачите, — це повторюваний блок, а не одна невдача: спроба з'єднання, помилка TLS, пауза і потім та сама послідовність. Кожне повторення штовхає початковий рядок вище в журналі. Якщо юніт перезапускається при невдачі, цикл може тривати годинами, поки ніхто не прочитає причину. Симптом — цикл, хоча основна вада одна: проблема узгодження.

Інтерактивні сеанси це терплять, бо тимчасова невдача може зникнути наступної спроби. Автоматичні з'єднання не можуть дозволити собі такий самий оптимізм: процес має зупинитися, щоб людина або монітор побачив стан.

Перш ніж щось змінювати, зафіксуйте один повний цикл. Запишіть віддалену адресу, етап TLS, названий у помилці, і чи процес узагалі виходить.

Механізм повторних спроб за циклом

Повтор — типова поведінка, бо кілька не пов'язаних тайм-аутів використовують той самий механізм. connect-retry задає інтервал між спробами з'єднання, connect-retry-max може обмежити, як часто пробується кожен віддалений запис, а resolv-retry керує повторними пошуками імен. Невдача узгодження TLS потрапляє в цей механізм як транспортна подія, тому клієнт планує ще одну спробу замість повідомлення. Типове значення допомагає на нестабільному каналі й шкодить при ваді, яка не може вилікуватися.

Опція --tls-exit змінює лише випадок узгодження. Посібник описує її як вихід при невдачі узгодження TLS, що вужче, ніж вихід при кожній помилці. Тайм-аути, збої резолвера й відмови автентифікації зберігають власну поведінку.

Змусити клієнт виходити при невдачі 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 не спрацьовує. Налаштування повтору автентифікації — наступне місце для перевірки, і причина від сервера важливіша за останній рядок клієнта. Неправильний пароль і відсутній сертифікат можуть давати схожі повідомлення на боці клієнта.

Відсутній маршрут, неправильний резолвер або недосяжний шлюз теж поза опцією, бо це не невдачі узгодження. Тиха втрата пакетів — найменш очевидний випадок: залежно від того, як далеко зайшов обмін, клієнт може повідомити про невдачу узгодження або просто вийти за тайм-аутом.

Зберігайте цю різницю в нотатках. Налаштування призначене для діагностики й нагляду, а не для ремонту, тому воно не виправляє невідповідність шифру, проблему із сертифікатом або неправильний порт. Спершу усуньте причину невдалого узгодження, потім вирішіть, чи невідкладний вихід ще підходить для розгортання.

Схожі статті