Tunelis savienojas no mājas līnijas un iestrēgst viesnīcas vai biroja tīklā, un servera pārvietošana uz 443. portu neko nemainīja. Šis rezultāts ir gana izplatīts, lai tam būtu forma: ports bija vieglā daļa, un pārējais lēmums pieder visam, kas sēž starp klientu un serveri. Divi jautājumi izšķir lielāko daļu gadījumu, un neviens no tiem nav par šifriem. Vai tīkls pieņem TLS rokasspiedienu uz šo adresi, un vai klients saglabā maršrutu uz savu ietvaru, kamēr tunelis ir augšā?

Rokasspiediens atklāj vairāk nekā numurs

Vietējais VPN klausītājs uz TCP 443 runā savā protokolā jau no pirmās paketes. ClientHello ir versijas lauks, nejauša vērtība un paplašinājumu saraksts, un ierīce, kas nolasa dažus simtus baitu, var saskatīt atšķirību, neko neatšifrējot. Portu numurus ir lēti apmierināt, un filtra faktiski pārbaudītā lieta ir protokola forma. Noteikumi parasti tiek rakstīti arī pa protokoliem, tāpēc politika, kas pārbauda TLS, neko nepasaka par UDP.

Caurspīdīgs starpniekserveris, kas pieprasa derīgu TLS sesiju, savienojumu nomet iestatīšanas laikā, bieži pēc tam, kad TCP rokasspiediens ir pabeigts. Šī detaļa ir svarīga vēlāk, jo tā nozīmē, ka klienta žurnāls apstājas pēc ligzdas izveides.

Straumes ietvarināšana rada divus kļūmes punktus

TLS ietvars, piemēram, stunnel, atjauno gaidīto formu: klients savienojas ar vietējo klausītāju, ietvars atver īstu TLS sesiju ar serveri 443. portā, un otrs ietvars serverī pārsūta atšifrētos baitus VPN dēmonam. Ārējā sesija tagad izskatās kā jebkurš cits HTTPS savienojums. VPN dēmonam serverī vajadzētu klausīties tikai loopback, jo nekam ārpus ietvara nav tas jāsasniedz.

Šai konstrukcijai ir jāsakrīt trim atsevišķām lietām. Klienta profils norāda uz vietējo klausītāju, servera sertifikāts atbilst vārdam, ko klients pārbauda, un pārsūtīšana servera pusē mērķē uz portu, ko dēmons patiešām izmanto. Ja kļūdīsities kaut vienā, savienojums mirst pirms VPN slāņa sasniegšanas. Tad sertifikāta neatbilstība parādās kā ietvara kļūda, nevis VPN kļūda, un tāpēc ir vērts lasīt abus žurnālus līdzās.

Maršruts uz ietvaru ir slazds

Tiklīdz tunelis paceļas, noklusējuma maršruts rāda tajā, un ārējai TLS sesijai vajag ceļu, kas neieiet tunelī, ko tā nes. Parasts VPN klients aizsargā adresi, uz kuru tas zvana; ietvertais klients zvana uz savu loopback, tāpēc ietvara galamērķa adrese šai aizsardzībai nav redzama.

sudo ip route add 198.51.100.20 via 192.168.0.1
sudo openvpn --config client.ovpn
sudo ip route del 198.51.100.20

Precīzās adreses aizpildāt jūs, un maršrutam jāpastāv visu savienojuma mūžu, ne tikai palaišanas laikā. Mazs ietvara skripts, kas pievieno maršrutu pirms klienta un pēc tam to noņem, ir uzticamāks par atcerētu komandu.

Android ietvaros šī izņēmuma ekvivalents ir iestatījums katrai lietotnei: izslēdziet ietvara lietotni no tuneļa, lai tās pašas trafiks izietu caur mobilo savienojumu. Bez izslēgšanas ietvars tiek maršrutēts tunelī, ko tas cenšas uzbūvēt, un atkārtotas savienošanas cilpa izskatās kā servera problēma.

Pirms kaut ko mainīt, izlasiet laiku

Sesija, kas katru reizi mirst pēc tā paša intervāla, ir politikas paraksts, nevis kriptogrāfiska kļūme, un ilgtermiņa plūsmas ierobežojumi rada tieši šādu modeli. Savienojums, kas tiek atiestatīts tūlīt pēc rokasspiediena, liecina par starpniekserveri, kuram nepatika sertifikātu ķēde.

Salīdziniet parastas HTTPS vietnes sertifikāta izdevēju no abiem tīkliem. Ja ierobežotajā tīklā izdevējs atšķiras, kaut kas izbeidz TLS pa vidu, un neviens ietvars neizturēs šo pārtveršanu nemainīts. Tas pats salīdzinājums pasaka, vai bloķēšana mērķē uz jūsu servera vārdu vai uz katru TLS sesiju šajā adresē.

Pierakstiet novēroto uzvedību: cik ilgi sesija ilga, vai ligzda atvērās, vai ietvars reģistrēja rokasspiedienu. Katrs no tiem sašaurina nākamo testu.

Pārbaudiet vienu mainīgo vienlaikus

Vispirms pārbaudiet UDP, jo daži tīkli to pilnībā izmet, un UDP kļūme neko nepasaka par 443. Pēc tam izmēģiniet TCP 443 bez ietvara, tad ietvaru 443. portā. Lasiet klienta žurnālu katrā solī un apstājieties, tiklīdz uzvedība mainās.

Mainiet vienu elementu katrā mēģinājumā. Jauns ports, jauns ietvars un jauns šifrs vienā palaidienā liedz pateikt, kurš no trim bija svarīgs.

Saistītie raksti