“Vai VPN ir ieslēgts?” patiesībā ir trīs jautājumi vienā teikumā. Kurš no tiem nepieciešams jūsu kodam, ir pirmais lēmums, un tieši to vairums implementāciju izlaiž. Vai šajā ierīcē ir tunelis, vai trafiks uz šo galamērķi iziet caur to, vai tālais gals atbild ar identitāti, kuru gaidāt. Izvēlieties īpašību, pēc tam izvēlieties signālu, kas to mēra, un beigās žurnālā ierakstiet, kuru jūs faktiski izmērījāt.

Trīs īpašības, trīs signāli

Saspiesti vienā rindā katrs, trim jautājumiem ir trīs dažādas atbildes. Zemāk esošā tabula ir pats lēmums, nevis tā kopsavilkums.

PropertySignal that answers itWhat it still leaves open
ExistenceThe platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOSTunnels of a type the platform does not manage, which includes most third-party clients
PathA route lookup for the one destination, or a scoped proxy or interface key that names the tunnelWhether the far end is the peer you trust
IdentityAn authenticated response from the far end, or a source-address policy applied on the serverWhich local interface carried the packets

Lasiet pēdējo rindu lēnām. Privāts resursdators, kas atbild, pierāda, ka kaut kas atbildēja, nevis to, ka atbilde nāca caur tuneli, un tas neko nepasaka par to, kas ir otrā galā. Ja nepieciešamā īpašība ir ceļš, mēriet ceļu.

Eksistence: pašas platformas stāvoklis

Windows to atbild uz vietējiem profiliem, izmantojot Remote Access Service API. RasEnumConnections uzskaita, kas ir savienots, RasGetConnectStatus ziņo par viena ieraksta stāvokli, un RasGetLinkStatistics pievieno ātrumu, baitu skaitītājus un savienojuma vecumu. Ierobežojumi ir būtība: OpenVPN, WireGuard un ražotāju klienti nekad nereģistrē RAS savienojumu, tāpēc veselīgs šāda veida tunelis rāda tukšu sarakstu, un naivs kods ziņo par to kā izslēgtu.

Linux darbvirsmas atklāj to pašu īpašību, izmantojot NetworkManager uz D-Bus, kur PropertiesChanged VPN savienojuma objektā pārvērš pārbaudi notikumā, un īpašība State ziņo, kad saite sasniedz savienotu stāvokli. No čaulas nmcli connection show --active nolasa to pašu informāciju, un tas ir tas, ko vēlaties atkļūdošanas laikā. macOS glabā šo sarakstu System Configuration ietvarā, un scutil ir tā komandrindas skats. Visi trīs apraksta platformas pārvaldītu savienojumu, un visi trīs klusē par tuneli, kuru tā nepārvalda.

Ceļš: kur pakete faktiski aiziet

Nosaukumu saskaņošana ir tas īsceļš, pie kura visi ķeras vispirms: uzskaitiet saskarnes, pārbaudiet virkni pret tun, tap, ppp vai ipsec un uzskatiet sakritību par pierādījumu. Tā ir heiristika, un saskaņu kopums var izskatīties vienādi neatkarīgi no tā, vai caur to kaut kas kustas. Vecākas iOS versijas atbildēja šādi, bet vēlākās pārstāja, jo redzamās saskarnes vairs neatšķīra abus stāvokļus.

To tur aizstāja sistēmas starpniekservera vārdnīca. Kamēr VPN ir savienots, starpniekservera iestatījumu izsaukums atgriež atslēgas, kas ierobežotas uz ar tuneli saistītajām saskarnēm, un, kad nekas nav savienots, vārdnīca atgriežas tukša. Tas ir vājāks apgalvojums, nekā izklausās, jo tas fiksē sistēmas pārliecību, ka tunelis pastāv, nevis to, kurš galamērķis to izmanto.

Android ir sava šo slazdu versija: vpn.connectivity pārraide sasniedz manifests deklarētos uztvērējus dažos būvējumos un izpildlaikā reģistrētus uztvērējus citos. Uztveriet to kā labāko pūliņu un turiet aiz tā tiešu pārbaudi.

Kad svarīgs ir galamērķis, jautājiet maršrutēšanas tabulai, nevis adapteru sarakstam. Noklusējuma vārtejas heiristikas lūzt datoros ar vairākiem tīkliem un tuneļos, kas instalē savu vārteju.

Identitāte: pārbaudiet tālo galu

Cikls, kas ik pēc dažām sekundēm sūta ICMP atbalsi tālajam galam, ir lētākā šāda veida pārbaude, un tā neizdodas lietderīgā virzienā. Vērsiet to uz adresi, kas pastāv tikai privātajā tīklā, jo publiska adrese atbild pa jebkuru strādājošu augšupējo saiti un neko nepierāda. Kur ICMP tiek filtrēts, īss TCP savienojums ar pakalpojuma portu veic to pašu darbu.

Servera puses pārbaudei ir tieši viens signāls: savienojuma avota adrese. Diapazonu uzskaites uzturēšana ir uzturēšanas darbs, un tas nevar atdalīt tuneli no jebkura cita tīkla, kas nejauši izmanto to pašu bloku.

Rupja politika ar to var sadzīvot. Identitāte nevar, tāpēc autentificējiet klientu, nevis paļaujieties uz to, no kurienes šķietami nāk tā paketes.

Reģistrējiet kategoriju, nevis spriedumu

Turiet kļūmju kategorijas žurnālā atsevišķi: nav nekādas saskarnes, saskarne ir, bet galamērķis nav sasniedzams, galamērķis ir sasniedzams, bet autentifikācija noraidīta. Tie ir trīs dažādi īpašnieki, un katrs atver citu izmeklēšanu.

To sapludināšana vienā „VPN ir izslēgts“ nosūta ziņojumu komandai, kas to nevar salabot. Kategorija ir lietderīgā izvade; spriedums ir tas, kas padara to nepareizu.

Saistītie raksti