Kodėl jūsų split tunnel taisyklė nustojo atitikti paslaugą
Taisyklė fiksuoja priešdėlį, o paslauga persikėlė. Perskaitykite tikslą, kurį programa iš tikrųjų naudoja, ir tada taisykite mechanizmą, o ne plėskite išimtį.
Split tunneling paprastai nepavyksta vienu iš dviejų būdų. Arba srautas, kuris turėtų būti tunelio viduje, jį apeina, arba srautas, kuris turėtų likti lauke, įtraukiamas į vidų. Pasenusios taisyklės gedimas yra pirmasis atvejis, ir jis labiau klaidina, nes taisyklė vykdoma tiksliai taip, kaip parašyta. Pasikeitė tikslas: paslauga dabar atsako adresu, kurio taisyklė niekada neįvardijo, o tunelyje nieko nėra blogai.
Ką taisyklė fiksuoja ir ką grąžina DNS
Split tunnel taisyklė yra statinis teiginys apie tikslus, paprastai išreikštas priešdėliu, maršrutu arba adresų sąrašu. Ji vertinama pagal paketo tikslą siuntimo metu. Pagrindinio kompiuterio vardas yra užklausa, kuri grąžina adresų rinkinį su galiojimo laiku ir podėliu, o atsakymas gali skirtis priklausomai nuo resolver, užklausos tipo ir minutės.
Šie du objektai niekada nesidera tarpusavyje. Taisyklė toliau atitinka jai duotą priešdėlį, paslauga toliau keičia išduodamą adresą, o tarpas tarp jų tyliai didėja. Štai kodėl simptomas pasirodo po teikėjo migracijos arba sertifikato atnaujinimo, o ne po konfigūracijos pakeitimo. Niekas neredagavo tunelio, todėl niekas nežiūri į tunelį, ir diagnozė krypsta į programą, o ne į politiką.
Trys būdai, kuriais atitikimas lūžta
Akivaizdus atvejis yra persikėlusi paslauga: operatorius jai suteikė naują adresą, DNS sekė, o išimtis ne. Antrasis yra adresų šeima, kurios taisyklė niekada neaprėpė, o tai atsitinka, kai vardas pradeda grąžinti AAAA įrašus, kurių išimtis tik IPv4 atveju ignoruoja. Trečiasis yra resolver skirtumas: vidinis ir viešas vaizdas gali grąžinti skirtingus adresus tam pačiam vardui, todėl adresas, kurį naudoja jūsų programa, nėra tas, su kuriuo testavote.
Podėlyje saugomas ryšys yra ketvirtasis variantas, ir jį lengva praleisti. Programa gali vis dar kalbėtis su adresu, kurį išsprendė prieš valandą, o tai reiškia, kad jūsų nauja užklausa ir jos atviras socket nesutaria, kur gyvena paslauga.
Perskaitykite tikslą, kurį programa iš tikrųjų naudoja
Klauskite operacinės sistemos ir socket lentelės, o ne naršyklės skirtuko. Užklausa atsako, į ką vardas išsprendžiamas dabar, o socket lentelė rodo adresą, su kuriuo procesas yra sujungtas, ir jis gali būti senesnis. Paleiskite abu prieš formuodami teoriją, nes skirtumas tarp jų maždaug pusėje atvejų yra pats atsakymas.
getent ahosts api.example.com
dig +short api.example.com A
dig +short api.example.com AAAA
ss -tnp | grep -F api
ip route get 203.0.113.40
Tada palyginkite su tuo, ką apima taisyklė. Jei dabartinis adresas patenka už išimties ribų, o užklausa vis tiek nepavyksta, radote priežastį neliesdami tunelio konfigūracijos. Jei programa prijungta prie adreso, kuris atitinka taisyklę, o užklausa vis tiek nepavyksta, problema yra kažkur už tunelio, ir tai yra neteisingas tyrimas.
Taisykite mechanizmą, o ne simptomą
Jei produktas palaiko prižiūrimą domenu pagrįstą nukreipimą, naudokite jį ir laikykitės jo dokumentuoto atnaujinimo ir apimties elgesio. Tai pakeičia statinį spėjimą prižiūrimu atsakymu, už kainą priklausomybės nuo to, kad funkcija veiktų taip, kaip dokumentuota.
Jei dizainas remiasi statiniu sąrašu, suteikite jam savininką ir atnaujinimo planą. Plane turėtų būti pasakyta, kaip adresas atrandamas, kas patvirtina pakeitimą ir kaip greitai sąrašas turėtų sekti teikėjo migraciją. Sąrašas be savininko yra būsimas sutrikimas su žinoma priežastimi.
Neplėskite išimties į didelį kaimyninį tinklą vien tam, kad pagautumėte kiekvieną adresą, kurį matėte per trumpą testą. Tai ne taisymas; tai nuolatinis saugumo ribos pakeitimas, ir jis tyliai leis nesusijusioms paslaugoms apeiti tunelį tol, kol taisyklė egzistuoja.
Patikrinkite abi ketinimo puses
Split tunnel dizainas turi du ketinimus, ir taisymas turėtų išsaugoti abu. Apsaugota paslauga turi eiti per tunelį, o išskirtos kategorijos turi toliau jį apeiti. Išbandykite naują ryšį su sutaisytu tikslu, tada išbandykite ką nors, kas turėtų likti lauke.
curl -sv --max-time 5 https://api.example.com/ -o /dev/null 2>&1 | grep -E 'Trying|Connected to'
curl -sS --max-time 5 https://public.example/ -o /dev/null -w '%{http_code}\n'
Užrašykite naują adresą, pasirinktą mechanizmą ir datą. Būtent ši pastaba neleidžia kitam žmogui padaryti išvados, kad VPN atsitiktinai ignoravo savo pačios konfigūraciją.