„Je li VPN aktivan?“ su zapravo tri pitanja u jednoj rečenici. Koje od njih vaš kod treba jest prva odluka, i upravo nju većina implementacija preskoči. Postoji li tunel na ovom uređaju, izlazi li saobraćaj ka ovom odredištu kroz njega ili udaljena strana odgovara identitetom koji očekujete. Odaberite svojstvo, zatim odaberite signal koji ga mjeri, a zatim u zapisu navedite koje ste zaista izmjerili.

Tri svojstva, tri signala

Sažeta u jedan red svako, tri pitanja imaju tri različita odgovora. Tabela ispod jeste sama odluka, a ne njen sažetak.

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

Pročitajte posljednji red polako. Privatni host koji odgovara dokazuje da je nešto odgovorilo, a ne da je odgovor došao kroz tunel, i ne govori ništa o tome ko je na drugoj strani. Ako je svojstvo koje vam treba putanja, mjerite putanju.

Postojanje: vlastito stanje platforme

Windows na to odgovara za izvorne profile kroz Remote Access Service API. RasEnumConnections navodi šta je povezano, RasGetConnectStatus prijavljuje stanje jednog unosa, a RasGetLinkStatistics dodaje brzinu, brojače bajtova i starost veze. Ograničenja su poenta: OpenVPN, WireGuard i klijenti proizvođača nikada ne registruju RAS vezu, pa zdrav tunel te vrste pokazuje praznu listu i naivan kod ga prijavljuje kao isključen.

Linux radne površine izlažu isto svojstvo kroz NetworkManager na D-Bus, gdje PropertiesChanged na objektu VPN veze pretvara provjeru u događaj, a svojstvo State prijavljuje kada veza dostigne stanje povezano. Iz ljuske nmcli connection show --active čita iste informacije, što je ono što želite tokom otklanjanja grešaka. macOS drži tu listu u okviru System Configuration, sa scutil kao svojim prikazom iz komandne linije. Sve tri opisuju vezu kojom platforma upravlja, i sve tri utihnu za tunel kojim ne upravlja.

Putanja: kuda paket zaista ide

Podudaranje imena je prečica koju svi prvo posegnu: nabrojite interfejse, testirajte string prema tun, tap, ppp ili ipsec i uzmite pogodak kao dokaz. To je heuristika, a skup interfejsa može izgledati isto bez obzira na to kreće li se išta kroz njega. Starije iOS verzije odgovarale su tako, a kasnije su prestale, jer vidljivi interfejsi više nisu razlikovali dva stanja.

Ono što je tamo zamijenilo jest sistemski rječnik proxyja. Dok je VPN povezan, poziv postavki proxyja vraća ključeve vezane za interfejse povezane s tunelom, a kada ništa nije povezano, rječnik se vraća prazan. To je slabija tvrdnja nego što zvuči, jer bilježi sistemsko uvjerenje da tunel postoji, a ne koje odredište ga koristi.

Android ima svoju verziju zamke: vpn.connectivity emitovanje stiže do prijemnika deklarisanih u manifestu u nekim verzijama, a do prijemnika registrovanih u toku rada u drugim. Tretirajte ga kao najbolji napor i držite direktnu provjeru iza njega.

Kada je odredište ono što je važno, pitajte tabelu rutiranja umjesto liste adaptera. Heuristike podrazumijevanog pristupnika lome se na mašinama s više mreža i na tunelima koji instaliraju vlastiti pristupnik.

Identitet: provjerite udaljenu stranu

Petlja koja svakih nekoliko sekundi šalje ICMP odjek udaljenoj strani najjeftinija je provjera te vrste, i pada u korisnom smjeru. Usmjerite je na adresu koja postoji samo unutar privatne mreže, jer javna odgovara preko bilo koje radne veze prema gore i ne dokazuje ništa. Gdje je ICMP filtriran, kratka TCP veza na port usluge radi isti posao.

Provjera na strani servera ima tačno jedan signal: adresu izvora na vezi. Održavanje inventara opsega je posao održavanja i ne može odvojiti tunel od bilo koje druge mreže koja slučajno koristi isti blok.

Gruba politika može živjeti s tim. Identitet ne može, zato provjerite identitet klijenta umjesto da vjerujete odakle njegovi paketi izgleda da dolaze.

Zapisujte kategoriju, ne presudu

Držite kategorije neuspjeha odvojeno u zapisu: nema interfejsa uopšte, interfejs postoji ali odredište nije dostupno, odredište je dostupno ali autentifikacija je odbijena. To su tri različita vlasnika, i svaki otvara drugu istragu.

Svođenje ih na jedno „VPN je pao“ šalje izvještaj timu koji to ne može popraviti. Kategorija je koristan izlaz; presuda je ono što ga čini pogrešnim.

Povezani članci