Вы рэдагуеце канфігурацыю WireGuard унутры працуючага кантэйнера, усё працуе, і наступнае абнаўленне вобраза яе сцірае. Нічога не было наладжана няправільна. Файл жыў у запісваемым пласце кантэйнера, які існуе толькі для гэтага асобніка кантэйнера. Важнае параўнанне не ў тым, які інструмент выкарыстоўваць, а ў тым, якія ўваходы аб'яўляе ваша разгортванне. Усё, што вы адрэдагавалі ўручную, — гэта ўваход, пра які разгортванне не ведае.

Два віды стану, адзін з іх аднаразовы

Кантэйнер мае запісваемы пласт для змен, зробленых падчас працы, і гэты пласт адкідваецца, калі кантэйнер замяняюць. Ён не сховішча канфігурацыі і не рэзервовая копія. Вобраз плюс аб'яўленыя ўваходы — гэта поўнае азначэнне таго, што працуе.

Спытайцеся, якія з вашых файлаў VPN з'яўляюцца аб'яўленымі ўваходамі, а якія — выпадковасцю:

docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpn

diff пералічвае тое, што змянілася ў запісваемым пласце, а гэта менавіта набор рэчаў, якія знікнуць. Спіс мантаванняў паказвае тое, што застанецца. Параўнанне двух адказвае на пытанне, перш чым вы нешта страціце.

Bind-мантаванне, іменны volume або secret: што кожнае абараняе

Усе тры могуць захоўваць профіль VPN, і яны адрозніваюцца тым, хто можа яго чытаць і што адбываецца пры замене.

MechanismSurvives recreationWho can read it
Writable layerNoAnyone with container access, until it is gone
Bind mountYes, while the host path existsWhatever the host permissions allow
Named volumeYes, until the volume is removedManaged by the runtime
SecretYes, as a declared inputThe container process, by design

Bind-мантаванне адлюстроўвае шлях хоста, таму файл абаронены настолькі, наколькі абаронены гэты шлях, і бачны настолькі, наколькі дазваляюць правы хоста. Іменны volume кіруецца асяроддзем выканання і перажывае выдаленне кантэйнера, што робіць яго больш бяспечным тыповым выбарам для стану, якім валодае разгортванне. Механізм secret прызначаны для матэрыялу, які вы не хочаце трымаць у вобразе або зменнай асяроддзя.

Не стаўцеся да кожнай зменнай асяроддзя і кожнага файла хоста як да раўназначнай абароны, бо яны такімі не з'яўляюцца.

Рэдагаванне ўнутры кантэйнера — гэта пастка

Пастка не ў інструменце, а ў кірунку рэдагавання. Змена, зробленая ўнутры працуючага кантэйнера, нябачная для разгортвання, таму наступнае перастварэнне моўчкі яе адкочвае, і сімптом выглядае як рэгрэсія ў вобразе. Калі вам трэба змяніць нешта там для дыягностыкі, скапіруйце гэта адразу вонкі і пастаўце ў аб'яўлены ўваход. Потым перастварыце, каб даказаць, што разгортванне яго ўзнаўляе.

Профіль можа несці прыватныя ключы і матэрыял уліковага запісу, што робіць рэзервовую копію гэтага файла задачай працы з сакрэтамі, а не проста капіраваннем файла. Трымайце ўласнасць і доступ на чытанне абмежаванымі фактычным працэсам кантэйнера, замест таго каб пашыраць каталог хоста, каб знікла памылка правоў.

Менавіта такое пашырэнне ператварае зручнасць кантэйнера ў нагоду для знешняга доступу да хоста.

Перастварайце свядома, потым праверце чатыры рэчы

Запішыце версію вобраза, патрэбную прыладу і магчымасці, падключэнне да сеткі і пастаянныя ўваходы. Спіс прылад і магчымасцей асабліва важны для кантэйнера VPN, бо тунелю патрэбна сеткавая прылада і права яе наладзіць.

Пацвердзіце, які згенераваны стан часу выканання трэба перабудаваць, а не захаваць. Ключы, якія тунель згенераваў пры першым запуску, — гэта стан, і рашэнне захаваць іх ці згенераваць нанава мае наступствы для кожнага peer, які ведае стары публічны ключ.

Пасля кантраляванага перастварэння праверце ідэнтычнасць, маршрутызацыю, DNS і патрэбную блакіроўку пры збоі. Працэс, які запускаецца без памылак, не даказвае нічога з гэтых чатырох. Праверце гэта, пакуль тунель працуе, і зноў пасля яго прыпынення, бо блакіроўка пры збоі паказвае сябе толькі тады, калі тунель знікае.

Трымайце копію для аднаўлення па-за кантэйнерам

Трымайце копію для аднаўлення, якая жыве незалежна ад кантэйнера, і праверце яе аднаўленне праз дакументаваны працэс. Неправераная рэзервовая копія профілю VPN — гэта надзея, асабліва калі шлях аднаўлення патрабуе правоў, патрэбных працэсу кантэйнера.

Калі кантэйнер, які валодае VPN, замяняюць, узгадніце праграмы, што дзеляць яго сеткавы стек, у межах падтрымліванага жыццёвага цыкла асяроддзя выканання.

Гэтая ўзгодненасць — розніца паміж перазапускам і прастоем. Разгортванне павінна апісваць, адкуль бярэцца канфігурацыя, а дакументацыя па volumes — гэта месца, дзе правяраюць, што асяроддзе выканання сапраўды захоўвае.

Падобныя артыкулы