Чаму выдалены peer WireGuard вяртаецца пасля перазапуску
Спіс peer захоўваюць два станы: працуючы інтэрфейс і тое, што запісвае яго пры загрузцы. Прыбярыце яго з абодвух і праверце SaveConfig, перш чым нешта змяняць.
Ідэнтычнасць знікае з працуючага інтэрфейса, і здаецца, што змена завершана. Пасля перазапуску службы яна вяртаецца, і гэта выглядае так, нібы WireGuard ігнаруе каманду. Насамрэч адбылося прасцейшае: канфігурацыя пры загрузцы ўсё яшчэ змяшчае peer.
Гэты спіс трымаюць два станы. Адкліканне рэальнае толькі тады, калі яго губляюць абодва.
Што wg set насамрэч змяняе
Каманда wg set wg0 peer <public-key> remove рэдагуе працуючы інтэрфейс у ядры. Яна нічога не запісвае на дыск. Файл канфігурацыі, профіль NetworkManager або захаваны стан маршрутызатара застаюцца нязменнымі. Гэта задума, а не памылка.
Гэтае раздзяленне наўмыснае, бо інструмент не ведае, хто валодае інтэрфейсам. Каманда часу выканання павінна быць бяспечнай для інтэрфейса, якім кіруе нешта іншае. Яна не можа здагадацца, дзе жыве трывалая копія. Вынік просты: выдаленне падчас працы па сваёй прыродзе часовае.
Таму peer вяртаецца пры наступным перазапуску, і вяртаецца з сваімі першапачатковымі дазволенымі прэфіксамі. Усё, што праз яго маршрутызуецца, таксама ствараецца нанова. Такім чынам, нібыта адкліканая ідэнтычнасць можа пасля перачытвання дасягнуць былых пунктаў прызначэння. Нішто ў вывадзе часу выканання нікога не папярэдзіла.
Знайдзіце таго, хто запісвае, перш чым рэдагаваць файл
У інтэрфейса ёсць уладальнік. Гэта можа быць wg-quick, які чытае файл, NetworkManager, які ўжывае профіль, уласная канфігурацыя інтэрфейса маршрутызатара або пункт уваходу кантэйнера, які стварае інтэрфейс пры запуску. Рэдагаванне файла, які ўладальнік ніколі не чытае, не дае ніякай трывалай змены.
Пачніце з працуючага інтэрфейса і вызначце публічныя ключы, бо імёны і адрасы — больш слабыя ідэнтыфікатары, чым сам ключ. Затым параўнайце гэты спіс з захаванай канфігурацыяй, якую ўладальнік насамрэч чытае.
wg show wg0 peers
wg show wg0 allowed-ips
systemctl status wg-quick@wg0 --no-pager
ls -l /etc/wireguard
Жывы інтэрфейс, чый спіс peer і змесціва файла не супадаюць, — гэта і ёсць увесь дыягназ. Захаваная канфігурацыя перамагае пры загрузцы, а стан часу выканання прайграе. Параўнайце іх, перш чым змяняць любы з іх.
Пастка SaveConfig
wg-quick дадае асаблівасць, якая ловіць тых, хто рэдагуе файлы ўручную. Калі SaveConfig уключаны, яго дакументаваныя паводзіны пры спыненні запісваюць бягучы стан часу выканання паверх файла канфігурацыі.
Гэта перавяртае звычайны кірунак захавання. Вы выдаляеце peer з файла, потым служба спыняецца. Працуючы стан запісваецца паверх вашай праўкі і аднаўляе peer, які вы толькі што выдалілі.
Таму парадак важны: рэдагуйце файл, калі інтэрфейс спынены, або адключыце SaveConfig перад праўкай, затым узніміце інтэрфейс і пацвердзіце, што загрузілася. Праўка ўручную пры ўзнятым інтэрфейсе — гэта гонка з запісам пры спыненні.
Змяніце абодва станы, затым перачытайце
У часе выканання выдаліце peer па ключы. У захаванай канфігурацыі выдаліце той жа блок праз падтрымліваемую аперацыю ўладальніка, а не рэдагуючы вакол яго.
Затым перагледзьце, што peer насіў. Маршрутызаваная сетка, якая належала адкліканай ідэнтычнасці, павінна быць свядома перапрызначана або выдалена, а не моўчкі ўспадкавана тым peer, які будзе рэдагавацца наступным.
Трымайце шлях аднаўлення адкрытым, калі шлюз таксама нясе ваш адміністрацыйны доступ. Перазапуск, які выдаляе не той peer, — гэта перапынак, створаны сваімі рукамі. Тое ж датычыцца перазапуску, які выдаляе не той маршрут.
Як выглядае паспяховы тэст
Перачытайце або перазапусціце службу, затым зноў прачытайце спіс peer. Стары ключ павінен адсутнічаць, а peer, якія вы хацелі пакінуць, павінны заставацца на месцы і працаваць.
wg show wg0 peers
wg show wg0 allowed-ips
sudo wg-quick down wg0 && sudo wg-quick up wg0
wg show wg0 peers
Дзе сітуацыя дазваляе, пацвердзіце, што старая ідэнтычнасць больш не дасягае былых рэсурсаў. Акуратны спіс інтэрфейса перад перазапускам — гэта палова тэсту. Другая палова — што ідэнтычнасць можа рабіць пасля гэтага.
Калі нейкі менеджар увесь час аднаўляе peer, спыніце паўтараць нізкаўзроўневае выдаленне. Выпраўце інвентар, які чытае гэты запісвальнік, бо да таго часу кожны перазапуск — чарговае запрашэнне ідэнтычнасці з'явіцца зноў.