Видалення застарілого запису VPN із бази даних resolvconf
На хості, де станом володіє Debian resolvconf, видалити запис легко. Спершу доведіть, що запис застарілий і не має власника, а потім перевірте перезапис.
Внутрішнє ім'я досі розв'язується в сервер VPN через добу після закриття тунелю, і файл резолвера знову й знову повертається з цим записом. Там, де станом володіє Debian resolvconf, цей файл збирається із записів постачальників, і один із них — залишок. Видалення запису займає хвилину; доведення, що його безпечно видалити, — справжня робота. Ці шлюзи виконуються по черзі, і невдалий шлюз завершує процедуру, а не надсилає вас до наступного кроку.
Підтвердьте, що станом володіє resolvconf
Спершу визначте власника, бо той самий симптом під systemd-resolved потребує інших команд та іншого ремонту. Пакунок resolvconf тримає базу даних у /run/resolvconf і спрямовує /etc/resolv.conf на файл, який збирає з цієї бази. Два читання вирішують питання: ціль символьного посилання і те, чи пакунок встановлено й чи він активний. Ціль у /run/systemd/resolve означає іншу конструкцію, де ніщо з наведеного нижче не діє.
dpkg -l resolvconf | tail -1
ls -l /etc/resolv.conf
systemctl is-active resolvconf.service
Якщо посилання вказує в інше місце або пакунка немає, зупиніться тут. Обгортка сумісності, яка позичила назву і постачається іншим менеджером резолвера, не володіє цією базою даних.
База даних тримає входи, а не відповідь
База даних тримає входи, а файл — це вихід, тому перелік входів — єдиний спосіб побачити, яка програма встановила запис, від якого ви хочете позбутися. Записи короткі, а їхні ключі — це ручки, які знадобляться пізніше. Прочитайте їх, перш ніж вирішувати, який застарілий, бо назва, схожа на інтерфейс VPN, може належати іншому клієнтові. Тримайте приватні адреси й внутрішні домени пошуку поза спільною діагностикою; сам ключ зазвичай ідентифікує запис.
sudo resolvconf --list
sudo resolvconf -i
Перша команда друкує надані записи без їх обробки, а друга перелічує інтерфейси, які зараз надають конфігурацію DNS. Ключі зазвичай будуються з назви інтерфейсу та програми-постачальника. Посібник resolvconf описує базу даних, до якої ці ключі звертаються.
Скопіюйте ключ із виводу замість того, щоб будувати його заново. Запис не називається tun0 лише тому, що старий скрипт використовував цю назву.
Доведіть, що запис не має власника
Запис безпечно видаляти, коли його не встановлювало жодне живе з'єднання. Зіставте ключ із з'єднанням, яке його створило, а потім підтвердьте, що це з'єднання зникло. Саме це зіставлення і є весь шлюз, і це крок, який найчастіше пропускають на шляху до команди видалення. Якщо докази неоднозначні, вважайте запис живим і зупиніться.
Назви процесів — слабкий доказ. OpenConnect викликає vpnc-script, тому перевірка процесу vpnc нічого не каже про те, який запис поточний. Нове з'єднання може також повторно використати назву інтерфейсу, залишену старим, через що ключ виглядає старшим, ніж є. Порівняйте адресу сервера всередині запису з адресами тунелів, які ще піднято, і зупиніться, якщо вони збігаються.
Звичайне відключення через менеджер-власник — перший засіб. Воно відкликає те, що встановило це з'єднання, і не торкається інших постачальників.
Перевірте видалення та перезапис
Коли запис підтверджено як застарілий, видаліть його за точним ключем і потім прочитайте результат, а не припускайте його. Команда змінює стан резолвера для кожного застосунку на хості, тому запускайте її у вікні, яке контролюєте. Візьміть ключ у лапки, бо він містить символи, які оболонка інакше розкрила б. Заповнювач у блоці означає ключ, скопійований зі списку, а не буквальний рядок.
sudo resolvconf -d "RECORD_KEY_FROM_THE_LIST"
sudo resolvconf --list
resolvectl query host.corp.example || getent hosts host.corp.example
Видалення запускає скрипти оновлення, коли оновлення ввімкнено; коли оновлення вимкнено, воно відкладає оновлення, тож видалений запис і перезаписаний файл — дві окремі події. Перечитайте список і підтвердьте, що ключ зник, перш ніж дивитися на файл. Потім запитайте одне ім'я, яке все ще має розв'язуватися через решту постачальників, і одне публічне ім'я, і порівняйте обидва з тим, що бачили до зміни. Якщо приватне ім'я остаточно перестає розв'язуватися, цей запис усе ще його ніс.
resolvconf -u запускає лише ці скрипти оновлення. Він ніколи не виявляє й не видаляє застарілий запис, а перезбирання зі застарілих входів відтворює той самий небажаний файл.
Убитий хук відключення залишає запис
Разова чистка відновлює сьогоднішній стан, а наступне перерване вимкнення повертає запис. Пройдіть шлях демонтажу: хук відключення клієнта, помічник, який цей хук викликає, і що відбувається, коли будь-кого з них убито. Перерване вимкнення — звичайне джерело, бо хук взагалі не запускався. Запишіть один раз код виходу хука, і ви знатимете, чи він тихо не працює.
Тримайте налаштування й чищення під одним власником. Другий скрипт, який вгадує назви інтерфейсів, зрештою видалить запис іншого з'єднання, що гірше за застарілий запис, з якого ви почали. Власник має вирішувати й коли запис застарів, бо знає, яке з'єднання його встановило.
Потім попрактикуйте життєвий цикл: підключіться, відключіться, знову перелічіть записи. Самостійне зникнення запису — єдиний доказ, що ремонт тримається.