Kako otkriti aktivan VPN tunel iz koda na bilo kojoj platformi
Postoji li tunel, ide li ovo odredište kroz njega ili odgovara udaljena strana? To su tri različite provjere i tri različita signala.
„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.
| Property | Signal that answers it | What it still leaves open |
|---|---|---|
| Existence | The platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOS | Tunnels of a type the platform does not manage, which includes most third-party clients |
| Path | A route lookup for the one destination, or a scoped proxy or interface key that names the tunnel | Whether the far end is the peer you trust |
| Identity | An authenticated response from the far end, or a source-address policy applied on the server | Which 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.