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

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

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

Запитайте, які з ваших файлів VPN є оголошеними входами, а які — випадковістю:

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

Diff перелічує, що змінилося в записуваному шарі, і це саме той набір речей, який зникне. Список монтувань показує, що залишиться. Порівняння двох відповідає на питання, перш ніж ви щось втратите.

Bind mount, іменований том або секрет: що захищає кожен

Усі три можуть зберігати профіль 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 mount відображає шлях хоста, тому файл захищений настільки, наскільки захищений цей шлях, і видимий настільки, наскільки дозволяють права хоста. Іменований том керується середовищем виконання і переживає видалення контейнера, що робить його безпечнішим варіантом за замовчуванням для стану, яким володіє розгортання. Механізм секретів призначений для матеріалу, який ви не хочете тримати в образі чи змінній середовища.

Не ставтеся до кожної змінної середовища і кожного файлу хоста як до рівноцінного захисту, бо це не так.

Редагування всередині контейнера — це пастка

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

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

Саме таке розширення перетворює зручність у контейнері на розкриття хоста.

Перестворіть свідомо, потім перевірте чотири речі

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

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

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

Тримайте копію для відновлення поза контейнером

Тримайте копію для відновлення, яка живе незалежно від контейнера, і перевірте її відновлення за документованим процесом. Неперевірена резервна копія профілю VPN — це надія, особливо коли шлях відновлення включає права, потрібні процесу контейнера.

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

Ця узгодженість — різниця між перезапуском і простоєм. Розгортання має описувати, звідки береться конфігурація, а документація щодо томів — це місце, де перевіряють, що середовище виконання справді зберігає.

Схожі статті