Авариен прекъсвач за VPN страничен контейнер: блокирай трафика, когато излезе
Споделянето на именното пространство на VPN контейнер не спира приложението, когато тунелът умре. Добавете ясна политика за изходящия трафик и тествайте рестарти, не само прекъсвания.
Контейнер на приложение, който споделя мрежовото именно пространство на VPN контейнер, няма собствен интерфейс, затова е лесно да се предположи, че при отказ на тунела не може да изпрати нищо. Това предположение е грешно в режима на отказ, който има значение. Ако процесът VPN умре, докато именното пространство оцелее, приложението запазва своите сокети, а именното пространство запазва маршрутите си, и трафикът продължава по пътя, който все още е инсталиран. Истинският авариен прекъсвач е ясна политика за филтриране плюс тестове на жизнения цикъл на средата за изпълнение, а не зависимост при стартиране.
Защо споделянето на именно пространство не е прекъсвач
Споделянето на именно пространство означава, че приложението използва интерфейсите, адресите и таблицата с маршрути на VPN контейнера. Това премахва независимия път на приложението към мрежата, докато споделеното именно пространство е непокътнато, и не казва нищо за това какво ще направи то, когато тунелът изчезне.
Условията за зависимост в Compose могат да отложат стартирането на приложение, докато зависимост стане здравa. Това покрива само един момент във времето и никакъв последващ отказ, затова това е инструмент за ред на стартиране, а не постоянна изходяща защитна стена.
Какво всъщност се случва, когато контейнерът излезе
Разграничете три събития. Процесът VPN вътре в контейнера може да умре, докато контейнерът продължава да работи. Контейнерът може да спре или да бъде премахнат, което унищожава именното пространство. Контейнерът може да бъде създаден наново, което изгражда ново именно пространство и нови правила.
В първия случай именното пространство се запазва, маршрутът по подразбиране може все още да сочи физическия интерфейс, и приложението продължава да изпраща директно. Във втория случай зависимото приложение обикновено губи връзката напълно, защото именното му пространство изчезна. В третия случай приложението може да се свърже отново с ново именно пространство, преди тунелът да е готов. Всеки случай изисква различен тест, а проект, който покрива само подреденото прекъсване, покрива най-малко интересния случай.
Изградете ясна политика за изходящия трафик
Напишете политиката вътре в споделеното именно пространство, за да важи за пакетите на приложението. Формата е отхвърляне по подразбиране с тесни изключения: loopback, интерфейсът на тунела, както и конкретният адрес и порт на крайната точка, които транспортът на тунела изисква.
Изключението за крайната точка трябва да съществува, преди тунелът да се вдигне, иначе VPN клиентът не може да достигне своя сървър. Затова наборът от правила изрично разрешава външния транспорт, вместо да разрешава физическия интерфейс по принцип. Добавете и правила за IPv6, ако именното пространство има IPv6 свързаност, защото политика само за IPv4 оставя другото семейство отворено.
DNS също принадлежи на политиката. Ако приложението решава имена чрез резолвер, достъпен само вътре в тунела, правилото за отхвърляне ще прекъсне решаването, когато тунелът е долу, и това е правилното поведение за авариен прекъсвач. Решете съзнателно дали това е, което искате.
Тествайте жизнения цикъл, не само прекъсването
Изпратете нова безвредна заявка, докато тунелът е здрав, след това убийте процеса VPN и изпратете още една. Повторете след спиране на контейнера, след рестарт и след повторно създаване. Новата заявка е важна, защото съществуваща връзка може да преживее промяна на правила, която блокира новите.
Не разчитайте на проверка на здравето или търсене на изходящ IP като механизъм за блокиране. Проверката наблюдава състоянието и докладва за него; политиката управлява трафика. Двете принадлежат към едно и също разгръщане, и не се заменят взаимно.
Запишете правилата, за да преживее тестът едно обновяване
Запишете очаквания резултат за всеки случай на отказ в документацията за разгръщане, заедно с правилата, които го реализират. Този запис позволява същият тест да се изпълни след обновяване на образа или на средата за изпълнение, когато поведението на именното пространство или маршрутите по подразбиране могат да се променят, без някой да редактира файла compose.
Дръжте изисквания външен път на VPN крайната точка отделно от неограничения изходящ трафик на приложението и дръжте DNS и IPv6 в предвидения обхват. Ако политиката за удобство разрешава целия физически интерфейс, аварийният прекъсвач го няма. Документацията на Docker за мрежи описва схемата на споделено именно пространство, върху която е изградена политиката, и това е препратката, която трябва да се провери, когато поведението на средата за изпълнение е под въпрос.