Зупинка служби видаляє інтерфейс навіть із налаштованим persist-tun. Це опція, що працює як задокументовано, а не збій. Опція описує один шлях перезапуску всередині працюючого процесу, і systemctl stop не є цим шляхом.

Прочитайте обидві назви разом, і задум стає зрозумілим. Одне утримує дескриптор, інше утримує матеріал ключа, і обидва існують через те, що відбувається після скидання привілеїв.

Два ресурси й перезапуск, до якого вони належать

OpenVPN сигналізує про власний перезапуск у двох звичайних ситуаціях. Явний SIGUSR1 робить це, і ping-restart, викликаний мертвим партнером, робить те саме. Обидва залишають процес живим і повторно виконують налаштування з'єднання, і саме там опції виправдовують своє місце.

EventTUN/TAP deviceKey and auth filesAddresses and routesup/down hooks
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itselfsurvives only with persist-tunsurvive only with persist-keysurvive with the device, otherwise rebuiltrun again only when restart hooks are enabled
Configuration reload, SIGHUPrecreatedre-read from diskrebuilt once the device returnsrun again
Service stoplostre-read at the next startremovedrun at the next start

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

Чому ці опції взагалі існують

Зміцнений сервер OpenVPN зазвичай запускається як root, відкриває свої ключі та свій пристрій, а потім переходить до непривілейованого користувача. Після цього переходу деякі операції просто зникають. Читання файлу ключа з режимом 0600, створення мережевого інтерфейсу або зміна маршрутів можуть бути відхилені.

Без опцій persist партнер, який мовчить достатньо довго, щоб викликати ping-restart, примусив би саме ці операції. Повторне підключення зазнало б невдачі, хоча в конфігурації нічого не змінилося. Процес виглядав би так, ніби вмирає без причини, а журнал показав би помилку прав замість мережевої помилки.

З ними м'який перезапуск повторно використовує те, що привілейована фаза вже отримала. Жодної магії тут немає, і процес нічого не переживає. Отримання ресурсів просто відкладається.

Читайте першу помилку, а не останню

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

Хуки мають власний перемикач. Посібник OpenVPN пов'язує опції persist з up-restart, який вирішує, чи запускатимуться скрипти up і down знову після перезапуску. Тому інтерфейс, що залишився піднятим, нічого не говорить вам про те, чи оновилася ваша інтеграція з resolver.

# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'

# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0

Ця пара команд розділяє два режими відмови за секунди. Інтерфейс, який існує, але без маршрутів, — це проблема хука або маршруту. Зниклий інтерфейс означає, що процес справді завершився.

Збережений інтерфейс — не аварійний вимикач

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

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

Назвіть подію перш ніж її діагностувати. М'який перезапуск, невдала спроба підключення й зупинка служби — це три події з трьома поведінками, і лише перша — те, що описують ці опції.

Схожі статті