Konteinerio HTTPS stringa įmonės VPN? Išbandykite DTLS atšaką
Prisijungimas konteineryje veikia, bet HTTPS stringa, todėl išbandykite UDP duomenų kanalą. Išjunkite DTLS, palyginkite abu srautus, tada patikrinkite MTU, prieš palikdami vėliavėlę.
Konteineryje už įmonės VPN DNS išsprendžiamas, prisijungimo puslapis įkeliamas, sveikatos tikrinimo taškas atsako, o tada HTTPS užklausa stringa, kol baigiasi laikas. Iš naujo surinkti atvaizdą ir pakeisti tarpinio serverio kintamuosius nieko nekeičia, nes sugedusi dalis yra ne atvaizde. Klientas autentifikuojasi vienu transportu, o didelius duomenis perkelia kitu, ir tik antrasis yra sugedęs.
Du transportai, vienas klaidinantis simptomas
TLS pagrindu veikiantis įmonės klientas paprastai autentifikuojasi per įprastą TLS ryšį, o tada sesijai derasi dėl antrojo UDP pagrindu veikiančio duomenų kanalo. Kai ši antroji atšaka veikia, pralaidumas ir delsa gerėja. Kai ji filtruojama arba netelpa į kelią, viskas prieš didelį perdavimą pavyksta, o pats perdavimas sustoja, ir tai yra būtent aukščiau aprašytas modelis.
Konteineris tos derybų nekeičia; jis keičia kelią, kuriuo eina išoriniai paketai. Hostas išverčia konteinerio srautą, todėl UDP datagramos išeina iš kito šaltinio prievado nei kliento vietinis lizdas ir grįžta per vertimo įrašą, kuris baigiasi daug trumpesniu laikmačiu nei užmegztas TCP srautas. Jei tunelis veikia hoste, o konteineryje nepavyksta, palyginkite tuos du srautus prieš kaltindami programą. Tas palyginimas nusprendžia daugiau nei bet koks atvaizdo perrinkimas.
Spręskite eksperimentu, ne intuicija
Pigiausias eksperimentas išjungia UDP duomenų kanalą ir pakartoja užklausą. Naudokite komandinės eilutės klientą, o ne darbalaukio apvalkalą, kad vėliavėlė tikrai būtų pritaikyta: openconnect vpn.example.net --user=you --interface=tun0 --no-dtls. Jei anksčiau stringusi užklausa dabar baigiama, problema buvo DTLS atšaka, o likusi dalis buvo triukšmas.
Patvirtinkite rezultatą abiem kryptimis iš to paties konteinerio: viena didelė užklausa su vėliavėle ir viena be jos. Vėliavėlę atitinkantis elgsenos pokytis yra įrodymas; puslapis, kuris galiausiai įkeliamas, ne.
Jei vėliavėlė tai išsprendžia, nuspręskite kodėl
Trys sąlygos sukelia tą patį simptomą ir reikalauja skirtingų atsakymų. Kelias gali visiškai filtruoti UDP, todėl vėliavėlė tampa teisingu nuolatiniu atsakymu tam tinklui. Kelias gali leisti UDP, bet mesti dideles datagramas, o tai rodo MTU, o ne filtravimą. Arba kelias gali būti toks nuostolingas, kad UDP atšaka veikia prasčiau nei TCP, o tai yra talpos, o ne pasiekiamumo sprendimas.
Atskirkite juos prieš dokumentuodami apėjimo sprendimą. Filtravimas išlieka esant bet kokiam paketo dydžiui, MTU problemos atsiranda tik virš slenksčio, o nuostoliai pasireiškia kaip pakartotinis siuntimas ir kintanti delsa, o ne kaip švarus sustojimas. Kiekvienas bandymas susiaurina priežastį nekeisdamas kliento konfigūracijos.
Patikrinkite paketo dydį prieš palikdami apėjimo sprendimą
Jei priežastis yra dydis, tunelio sąsaja priima paketus, kurių kelias negali pernešti, ir problema grįžta bet kuriuo transportu, kai tik padidėja naudingoji apkrova. Palyginkite sąsajas: ip link show tun0 hoste, tada docker network inspect bridge, kad perskaitytumėte tinklo parinktyse įrašytą MTU. Konteinerio tiltas, vis dar 1500 baitų po tuneliu, kuris perneša mažiau, yra įprastas radinys.
Tyrinėkite aukštyn nuo žinomo gero dydžio su draudimo fragmentuoti testu tunelio viduje, tada sumažinkite konteinerio tinklo MTU arba suspaudkite TCP MSS tunele. Bet kuri pataisa dažnai vėl padaro UDP kelią tinkamą naudoti ir pašalina vėliavėlės poreikį, o tai yra geresnis rezultatas, kai filtravimas nėra priežastis.
Nuspręskite, kuo esate pasirengę keistis
Išjungus duomenų kanalą, tunelis savo apkrovą neša TCP ryšio viduje. Švariame kelyje tai tik lėčiau; nuostolingame vienas prarastas segmentas uždelsia viską už jo, o išorinis pakartotinis siuntimas konkuruoja su vidiniu. Šie mainai tinka interaktyviam kūrimui ir mažiems API kvietimams, o prastai tinka dideliems perdavimams ar ilgoms sesijoms per mobiliuosius ryšius.
Kad ir kurią parinktį pasirinktumėte, užrašykite, kokį transportą tunelis galiausiai naudojo ir kodėl. Konteineris, kuris tyliai priklauso nuo vėliavėlės, kurią kažkas pridėjo prieš mėnesius, yra kitas gedimas, o tas, kuris jį derins, nežinos, ar vėliavėlė buvo filtravimo apėjimas, ar MTU eksperimento likutis.