Выдаленне састарэлага запісу VPN з базы даных resolvconf
На хаспе, дзе стан належыць resolvconf з Debian, выдаліць запіс лёгка. Спачатку дакажыце, што запіс састарэлы і нікому не належыць, потым праверце перазапіс.
Унутранае імя ўсё яшчэ развяртаецца ў сервер VPN праз дзень пасля закрыцця тунэля, і файл рэзалвера зноў вяртаецца з гэтым запісам. Там, дзе стан належыць resolvconf з Debian, гэты файл збіраецца з запісаў пастаўшчыкоў, і адзін з іх — рэшта. Выдаленне запісу займае хвіліну; доказ таго, што выдаляць бяспечна, — гэта сапраўдная праца. Гэтыя брамы ідуць па чарзе, і няўдалая брама завяршае працэдуру, а не адпраўляе вас да наступнага кроку.
Пацвердзіце, што стан належыць 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 запускае толькі гэтыя скрыпты абнаўлення. Ён ніколі не вызначае і не выдаляе састарэлы запіс, а перабудова з састарэлых уваходаў стварае той жа непатрэбны файл.
Забіты хук разлучэння пакідае запіс
Аднаразовая чыстка вяртае сённяшні стан, і наступнае перарванае выключэнне зноў ставіць запіс. Прайдзіце шлях сняцця: хук разлучэння кліента, памочнік, які выклікае гэты хук, і што адбываецца, калі забіць любы з іх. Перарванае выключэнне — звычайная прычына, бо хук наогул не запусціўся. Залогіруйце код выхаду хука адзін раз, і вы даведаецеся, ці ён маўкліва памыляецца.
Трымайце наладжванне і чыстку пад адным уладальнікам. Другі сцэнар, які ўгадвае імёны інтэрфейсаў, рана ці позна выдаліць запіс іншага злучэння, што горш за састарэлы запіс, з якога вы пачалі. Уладальнік таксама павінен вырашаць, калі запіс састарэлы, бо ён ведае, якое злучэнне яго ўсталявала.
Затым прагоньце жыццёвы цыкл: падключыцеся, адключыцеся, зноў пералічыце запісы. Запіс, які знікае сам, — адзіны доказ таго, што рамонт трымаецца.