Programos konteineris, bendrinantis VPN konteinerio tinklo vardų erdvę, neturi savo sąsajos, todėl nesunku manyti, kad tuneliui sutrikus jis negali nieko siųsti. Ši prielaida klaidinga tuo sutrikimo atveju, kuris svarbus. Jei VPN procesas miršta, o vardų erdvė išlieka, programa išsaugo savo lizdus, o vardų erdvė išsaugo savo maršrutus, ir srautas tęsiasi tuo keliu, kuris dar įdiegtas. Tikras kill switch yra aiški filtravimo politika ir vykdymo aplinkos gyvavimo ciklo testai, o ne paleidimo priklausomybė.

Kodėl vardų erdvės bendrinimas nėra kill switch

Bendrinti vardų erdvę reiškia, kad programa naudoja VPN konteinerio sąsajas, adresus ir maršrutų lentelę. Tai panaikina savarankišką programos kelią į tinklą, kol bendrinama vardų erdvė nepažeista, ir nieko nesako apie tai, ką ta vardų erdvė darys, kai tunelis išnyks.

Compose priklausomybės sąlygos gali atidėti programos paleidimą, kol priklausomybė bus sveika. Tai apima vieną laiko akimirką ir jokio vėlesnio sutrikimo, todėl tai yra paleidimo eiliškumo įrankis, o ne nuolatinė išėjimo užkarda.

Kas iš tikrųjų nutinka, kai konteineris išjungiamas

Atskirkite tris įvykius. VPN procesas konteinerio viduje gali mirti, o konteineris toliau veikia. Konteineris gali sustoti arba būti pašalintas, ir tai sunaikina vardų erdvę. Konteineris gali būti sukurtas iš naujo, ir tai sukuria naują vardų erdvę bei naujas taisykles.

Pirmuoju atveju vardų erdvė išlieka, numatytasis maršrutas gali vis dar rodyti į fizinę sąsają, o programa toliau siunčia tiesiogiai. Antruoju atveju priklausoma programa paprastai visiškai praranda ryšį, nes jos vardų erdvė dingo. Trečiuoju atveju programa gali iš naujo prisijungti prie naujos vardų erdvės, kol tunelis dar neparengtas. Kiekvienas atvejis reikalauja skirtingo testo, o projektas, apimantis tik tvarkingą atjungimą, apima mažiausiai įdomų atvejį.

Sukurkite aiškią išėjimo politiką

Parašykite politiką bendrinamos vardų erdvės viduje, kad ji galiotų programos paketams. Forma yra numatytasis atmetimas su siauromis išimtimis: loopback, tunelio sąsaja ir konkretus galinio taško adresas bei prievadas, kurių reikia tunelio transportui.

Galinio taško išimtis turi būti įvesta prieš pakeliant tunelį, kitaip VPN klientas negalės pasiekti savo serverio. Štai kodėl taisyklių rinkinys aiškiai leidžia išorinį transportą, o ne leidžia fizinę sąsają apskritai. Pridėkite ir IPv6 taisykles, jei vardų erdvė turi IPv6 ryšį, nes politika, taikoma tik IPv4, palieka kitą šeimą atvirą.

DNS taip pat priklauso politikai. Jei programa išsprendžia vardus per sprendiklį, pasiekiamą tik tunelio viduje, atmetimo taisyklė nutrauks sprendimą, kai tunelis bus išjungtas, ir tai yra teisingas kill switch elgesys. Nuspręskite sąmoningai, ar to norite.

Tikrinkite gyvavimo ciklą, ne tik atjungimą

Nusiųskite naują nekenksmingą užklausą, kol tunelis sveikas, tada nužudykite VPN procesą ir nusiųskite dar vieną. Pakartokite po konteinerio sustabdymo, po perkrovimo ir po sukūrimo iš naujo. Nauja užklausa svarbi todėl, kad esamas ryšys gali išgyventi taisyklių pakeitimą, blokuojantį naujus.

Nepasikliaukite sveikatos patikra ar išėjimo IP paieška kaip blokavimo mechanizmu. Patikra stebi būseną ir ją praneša; politika valdo srautą. Abu priklauso tam pačiam diegimui, ir jie nepakeičia vienas kito.

Užrašykite taisykles, kad testas išliktų po atnaujinimo

Įrašykite kiekvieno sutrikimo atvejo laukiamą rezultatą į diegimo dokumentaciją kartu su jį įgyvendinančiomis taisyklėmis. Šis įrašas leidžia paleisti tą patį testą po atvaizdo atnaujinimo ar vykdymo aplinkos atnaujinimo, kai vardų erdvės elgsena ar numatytieji maršrutai gali pasikeisti niekam neredaguojant compose failo.

Laikykite reikiamą išorinį VPN galinio taško kelią atskirai nuo neriboto programos išėjimo ir laikykite DNS bei IPv6 numatytoje aprėptyje. Jei politika dėl patogumo leidžia visą fizinę sąsają, kill switch dingo. Docker tinklų dokumentacija aprašo bendrinamos vardų erdvės išdėstymą, kuriuo politika pagrįsta, ir tai yra nuoroda, kurią reikia patikrinti, kai vykdymo aplinkos elgsena kelia abejonių.

Susiję straipsniai