Апликацијски контејнер који дели мрежни простор имена VPN контејнера нема сопствени интерфејс, па је лако претпоставити да не може ништа да пошаље када тунел закаже. Та претпоставка је погрешна у режиму квара који је важан. Ако VPN процес умре док простор имена преживи, апликација задржава своје сокете, а простор имена задржава своје руте, и саобраћај се наставља путем који је још инсталиран. Прави кил-свич је изричита политика филтрирања плус тестови животног циклуса runtime-а, а не зависност при покретању.

Зашто дељење простора имена није кил-свич

Дељење простора имена значи да апликација користи интерфејсе, адресе и табелу рута VPN контејнера. То уклања независни пут апликације до мреже док је заједнички простор имена нетакнут, и не говори ништа о томе шта ће тај простор имена урадити када тунел нестане.

Услови зависности у Compose-у могу да одложе покретање апликације док зависност не буде здрава. То покрива један тренутак у времену и ниједан каснији квар, па је то алат за редослед покретања, а не трајни излазни firewall.

Шта се стварно дешава када контејнер изађе

Разликујте три догађаја. VPN процес унутар контејнера може да умре док контејнер наставља да ради. Контејнер може да се заустави или уклони, што уништава простор имена. Контејнер може поново да се створи, што гради нови простор имена и нова правила.

У првом случају простор имена остаје, подразумевана рута може још да показује на физички интерфејс, а апликација наставља да шаље директно. У другом случају зависна апликација обично потпуно изгуби повезаност јер је њен простор имена нестао. У трећем случају апликација може поново да се повеже са новим простором имена пре него што је тунел спреман. Сваки случај захтева другачији тест, а дизајн који покрива само уредан прекид покрива онај најмање занимљив.

Изградите изричиту политику излазног саобраћаја

Напишите политику унутар заједничког простора имена да би се примењивала на пакете апликације. Облик је подразумевано одбацивање са уским изузецима: loopback, интерфејс тунела, и одређена адреса и порт крајње тачке које транспорт тунела захтева.

Изузетак за крајњу тачку мора постојати пре него што се тунел подигне, иначе VPN клијент не може да достигне свој сервер. Зато скуп правила изричито дозвољава спољни транспорт уместо да дозволи физички интерфејс уопште. Додајте и IPv6 правила ако простор имена има IPv6 повезаност, јер политика само за IPv4 оставља другу фамилију отвореном.

DNS такође припада политици. Ако апликација разрешава имена преко разрешивача доступног само унутар тунела, правило одбацивања прекинуће разрешавање када тунел падне, што је исправно понашање за кил-свич. Одлучите свесно да ли је то оно што желите.

Тестирајте животни циклус, не само прекид

Пошаљите свеж безопасан захтев док је тунел здрав, затим убијте VPN процес и пошаљите још један. Поновите након заустављања контејнера, након поновног покретања и након поновног стварања. Свеж захтев је важан јер постојећа веза може да преживи промену правила која блокира нове.

Не ослањајте се на проверу здравља ни на тражење излазне IP адресе као механизам блокирања. Провера посматра стање и извештава о њему; политика контролише саобраћај. Обоје припада истој имплементацији, и нису замена једно другом.

Забележите правила да би тест преживео ажурирање

Напишите очекивани исход за сваки случај квара у документацију имплементације, заједно са правилима која га спроводе. Тај запис омогућава покретање истог теста након ажурирања слике или надоградње runtime-а, када се понашање простора имена или подразумеване руте могу променити без да било ко уређује compose датотеку.

Држите потребни спољни пут VPN крајње тачке одвојеним од неограниченог излаза апликације и држите DNS и IPv6 унутар предвиђене покривености. Ако политика дозвољава цело физичко сучеље ради практичности, кил-свич је нестао. Docker документација о мрежама описује распоред заједничког простора имена на којем се политика темељи, и то је референца коју треба проверити када је понашање runtime-а упитно.

Повезани чланци