Tuneli lidhet nga një linjë shtëpie dhe ngec në një rrjet hoteli ose zyre, dhe kalimi i serverit në portën 443 nuk ndryshoi asgjë. Ky rezultat është mjaft i zakonshëm sa të ketë një formë: porta ishte pjesa e lehtë, dhe pjesa tjetër e vendimit i takon gjithçkaje që rri midis klientit dhe serverit. Dy pyetje zgjidhin shumicën e rasteve, dhe asnjëra prej tyre nuk është për shifrat. A e pranon rrjeti një shtrëngim duarsh TLS drejt atij adresi, dhe a mban klienti një rrugë drejt mbështjellësit të vet ndërsa tuneli është lart?

Shtrëngimi i duarve zbulon më shumë se numri

Një dëgjues VPN vendas në TCP 443 flet me protokollin e vet që nga paketa e parë. Një ClientHello ka një fushë versioni, një vlerë të rastësishme dhe një listë zgjerimesh, dhe një pajisje që lexon disa qindra bajt mund ta dallojë diferencën pa deshifruar asgjë. Numrat e portave janë të lirë për t’u plotësuar, dhe forma e protokollit është ajo që filtri kontrollon vërtet. Rregullat zakonisht shkruhen edhe sipas protokollit, prandaj një politikë që inspekton TLS nuk thotë asgjë për UDP.

Një përfaqësues transparent që kërkon një sesion të vlefshëm TLS e ndërpret lidhjen gjatë konfigurimit, shpesh pasi shtrëngimi i duarve TCP ka përfunduar. Ai detaj ka rëndësi më vonë, sepse do të thotë që regjistri i klientit ndalon pasi soketi është vendosur.

Mbështjellja e rrjedhës krijon dy pika dështimi

Një mbështjellës TLS si stunnel rikthen formën e pritur: klienti lidhet me një dëgjues lokal, mbështjellësi hap një sesion të vërtetë TLS drejt serverit në 443, dhe një mbështjellës i dytë në server i pason bajtët e deshifruar demonit VPN. Sesioni i jashtëm tani duket si çdo lidhje tjetër HTTPS. Demon i VPN në server duhet të dëgjojë vetëm në loopback, sepse asgjë jashtë mbështjellësit nuk ka nevojë ta arrijë.

Tre gjëra të ndara duhet të përputhen për atë konstruksion. Profili i klientit tregon dëgjuesin lokal, certifikata e serverit përputhet me emrin që klienti verifikon, dhe përcjellja në anën e serverit synon portën që demoni përdor vërtet. Gaboni në cilëndo prej tyre dhe lidhja vdes para se të arrihet shtresa VPN. Atëherë një mospërputhje certifikate shfaqet si gabim i mbështjellësit dhe jo si gabim VPN, dhe për këtë arsye ia vlen të lexohen të dy regjistrat krah për krah.

Rruga drejt mbështjellësit është kurthi

Sapo tuneli ngrihet, rruga e parazgjedhur tregon brenda tij, dhe sesioni i jashtëm TLS ka nevojë për një rrugë që nuk hyn në tunelin që transporton. Një klient VPN i zakonshëm mbron adresën që thërret; një klient i mbështjellë thërret loopback-un e vet, prandaj adresa e destinacionit e mbështjellësit është e padukshme për atë mbrojtje.

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

Adresat e sakta i plotësoni vetë, dhe rruga duhet të ekzistojë gjatë gjithë jetës së lidhjes, jo vetëm në nisje. Një skript i vogël mbështjellësi që shton rrugën para klientit dhe e heq pas tij është më i besueshëm se një komandë e mbajtur mend.

Në Android, ekuivalenti i asaj përjashtimi është një rregullim për çdo aplikacion: përjashtoni aplikacionin mbështjellës nga tuneli që trafiku i vet të dalë përmes lidhjes celulare. Pa përjashtimin mbështjellësi rrugëzohet në tunelin që po përpiqet të ndërtojë, dhe cikli i rilidhjes duket si problem i serverit.

Lexoni kohët përpara se të ndryshoni diçka

Një sesion që vdes pas të njëjtit interval çdo herë është firmë politike dhe jo dështim kriptografik, dhe kufijtë e rrjedhës afatgjatë prodhojnë pikërisht atë model. Një lidhje që rivendoset menjëherë pas shtrëngimit të duarve sugjeron një përfaqësues që nuk i pëlqeu zinxhiri i certifikatave.

Krahasoni lëshuesin e certifikatës së një faqe HTTPS të zakonshme nga të dy rrjetet. Nëse lëshuesi është i ndryshëm në rrjetin e kufizuar, diçka po e përfundon TLS në mes, dhe asnjë mbështjellës nuk i mbijeton atij përgjimi pa ndryshime. I njëjti krahasim ju thotë nëse bllokimi synon emrin e serverit tuaj apo çdo sesion TLS në atë adresë.

Shkruani sjelljen e vëzhguar: sa zgjati sesioni, a u hap soketi, a regjistroi mbështjellësi një shtrëngim duarsh. Secila prej tyre e ngushton testin e radhës.

Provoni një variabël në një herë

Kontrolloni së pari UDP, sepse disa rrjete e hedhin plotësisht dhe një dështim UDP nuk thotë asgjë për 443. Më pas provoni TCP 443 pa mbështjellësin, dhe pastaj mbështjellësin në 443. Lexoni regjistrin e klientit në çdo hap dhe ndaloni sapo sjellja të ndryshojë.

Ndryshoni një element për provë. Një portë e re, një mbështjellës i re dhe një shifër e re në të njëjtin vrapim ju lënë pa mundësi të thoni cila nga të tre kishte rëndësi.

Artikuj të ngjashëm