„Kas VPN on sees?“ on tegelikult kolm küsimust ühes lauses. Millist neist teie kood vajab, on esimene otsus, ja just selle jätavad enamik rakendusi vahele. Kas selles seadmes on tunnel, kas liiklus selle sihtkoha poole väljub sellest läbi või vastab kaugem ots identiteediga, mida te ootate. Valige omadus, seejärel valige signaal, mis seda mõõdab, ja öelge lõpuks logis, millist te tegelikult mõõtsite.

Kolm omadust, kolm signaali

Üheks reaks kokku surutud, on kolmel küsimusel kolm erinevat vastust. Allolev tabel on otsus ise, mitte selle kokkuvõte.

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

Lugege viimast rida aeglaselt. Privaatne host, mis vastab, tõestab, et miski vastas, mitte et vastus tuli tunnelist läbi, ja see ei ütle midagi selle kohta, kes on teises otsas. Kui omadus, mida vajate, on tee, mõõtke teed.

Olemasolu: platvormi enda olek

Windows vastab sellele natiivsete profiilide puhul Remote Access Service API kaudu. RasEnumConnections loetleb, mis on ühendatud, RasGetConnectStatus teatab ühe kirje oleku ja RasGetLinkStatistics lisab kiiruse, baidi loendurid ja ühenduse vanuse. Piirid ongi point: OpenVPN, WireGuard ja tarnijate kliendid ei registreeri kunagi RAS-ühendust, seega terve seda tüüpi tunnel näitab tühja loendit ja naiivne kood teatab selle väljalülitatuks.

Linuxi töölauad pakuvad sama omadust NetworkManageri kaudu D-Busil, kus PropertiesChanged VPN-ühenduse objektil muudab kontrolli sündmuseks ja omadus State teatab, millal link jõuab ühendatud olekusse. Kestast loeb nmcli connection show --active sama teavet, ja just seda te silumise ajal tahate. macOS hoiab seda loendit System Configuration raamistikus, kusjuures scutil on selle käsureavaade. Kõik kolm kirjeldavad ühendust, mida platvorm haldab, ja kõik kolm vaikivad tunneli puhul, mida see ei halda.

Tee: kuhu pakett tegelikult läheb

Nimede sobitamine on otsetee, milleni kõik kõigepealt ulatuvad: loetlege liidesed, testige stringi tun, tap, ppp või ipsec vastu ja pidage tabamust tõestuseks. See on heuristika, ja liideste hulk võib paista sama, olenemata sellest, kas midagi sealt läbi liigub. Vanemad iOS-i buildid vastasid nii ja hilisemad lõpetasid, sest nähtavad liidesed ei eristanud enam neid kahte olekut.

Selle asendas seal süsteemi puhverserveri sõnastik. Kui VPN on ühendatud, tagastab puhverserveri seadete kutse võtmed, mis on piiratud tunneliga seotud liidestega, ja kui midagi pole ühendatud, tuleb sõnastik tühjalt tagasi. See on nõrgem väide, kui kõlab, sest see registreerib süsteemi uskumuse, et tunnel on olemas, mitte selle, milline sihtkoht seda kasutab.

Androidil on oma versioon sellest lõksust: vpn.connectivity edastus jõuab mõnedes buildides manifestis deklareeritud vastuvõtjateni ja teistes käitusajal registreeritud vastuvõtjateni. Käsitlege seda parima pingutusena ja hoidke selle taga otsest sondi.

Kui sihtkoht on see, mis loeb, küsige marsruutimistabelilt, mitte adapterite loendilt. Vaikimisi lüüsi heuristikad purunevad mitme võrguga masinatel ja tunnelitel, mis paigaldavad oma lüüsi.

Identiteet: kontrollige kaugemat otsa

Tsükkel, mis saadab iga paari sekundi tagant kaugemale poolele ICMP kaja, on seda tüüpi odavaim kontroll, ja see ebaõnnestub kasulikus suunas. Suunake see aadressile, mis eksisteerib ainult privaatvõrgu sees, sest avalik aadress vastab iga toimiva üleslingi kaudu ega tõesta midagi. Kus ICMP on filtreeritud, teeb lühike TCP-ühendus teenuse pordiga sama töö.

Serveripoolsel kontrollil on täpselt üks signaal saadaval: ühenduse lähteaadress. Vahemike inventuuri haldamine on hooldustöö, ja see ei suuda eraldada tunnelit ühestki teisest võrgust, mis juhtumisi kasutab sama plokki.

Jäme poliitika saab sellega elada. Identiteet ei saa, seega autentige klienti, selle asemel et usaldada seda, kust selle paketid näivad tulevat.

Logige kategooria, mitte otsus

Hoidke veakategooriad logis eraldi: liidest pole üldse, liides on olemas, aga sihtkoht kättesaamatu, sihtkoht on kättesaadav, aga autentimine tagasi lükatud. Need on kolm erinevat omanikku, ja igaüks avab erineva uurimise.

Nende kokkusurumine üheks „VPN maas“ saadab aruande meeskonnale, kes ei suuda seda parandada. Kategooria on kasulik väljund; otsus on see, mis teeb selle valeks.

Seotud artiklid