macOS-i VPN-i olek terminalist: scutil, marsruudid või ping
Teenuse olek, kerneli marsruut ja tegelik päring vastavad kolmele erinevale küsimusele. Kirjutage skript teenuse identifikaatori vastu ja kontrollige ka marsruuti.
Kusagil juurutusskriptis on kontroll, kas tunnel on enne kopeerimise algust üleval. Saadaval on kolm vastust ja need ei tähenda sama: teenuse olek, mida scutil teatab, marsruut, mille kernel valis, ja see, kas vastaspool tõesti vastab. Nende võrdlemine on vahe kontrolli vahel, mis ennustab kopeerimist, ja sellise vahel, mis ainult logi kaunistab.
Kolm vastust küsimusele, kas VPN töötab
Teenuse olek on juhtimistasandi fakt. macOS teab, et konfiguratsioon on ühendatud, sest selle kliendiprotsess ütles nii. Marsruut on andmetasandi fakt: kernel saadab selle sihtkoha läbi selle liidese. Kättesaadavus on otsast-otsani fakt ja see võib ebaõnnestuda põhjustel, mida kumbki teine ei näe.
| Signal | Answers | Blind spot |
|---|---|---|
scutil --nc status | Is the service connected? | Third-party clients, wrong routes |
route -n get | Where would this go? | The peer may be down |
| A request to the far side | Does it work now? | Slow, and it changes state |
Kasulik kontroll ühendab kaks esimest ja kasutab kolmandat kinnitusena, et teised kaks ei valetanud. Igaüks üksi on ajatempliga oletus.
Lugege identifikaatorit, mitte kuvatavat nime
scutil --nc list
scutil --nc status "Office"
Loend trükib ühe rea teenuse kohta ja iga rida kannab sulgudes olekut, millele järgnevad teenuse identifikaator, tüüp ja kuvatav nimi. Kirjutage skript identifikaatori vastu, sest kuvatav nimi on see, mille keegi süsteemiseadetesse sisestas, ja see võib hoiatamata muutuda. Olekukäsk trükib ühe sõna ja mõne teenusetüübi puhul seejärel statistika; sobitage seda esimest sõna, selle asemel et otsida nime kogu väljundist, mis esineb ka mujal.
Teenuse käivitamine võib esile kutsuda autoriseerimisküsimuse või jääda täiesti keelatuks, kui profiili hallatakse. See keeldumine ei ole tunneli viga; see on poliitikaavaldus selle kohta, kes tohib selle üles tõsta.
Kolmanda osapoole klient peidab end loendi eest
Tühi loend ei tähenda, et VPN-i pole. Siin ilmuvad konfiguratsioonid, mis on loodud süsteemi enda võrguseadetes; tarnija klient, haldusprofiil või kolmanda osapoole rakendus võib hoida aktiivset tunnelit, mida see käsk kunagi ei näe. Selle oma tööriist on autoriteet selle oma teenuse jaoks. Küsida scutil-lt kliendi kohta, mis pole kunagi sinna registreerunud, ei tagasta midagi, ja mitte miski ei ole sama vastus kui lahti ühendatud.
Kui loend on tühi, aga liiklus on selgelt krüpteeritud, otsige selle asemel liidest: seade utun või ppp, mille aadress on oodatavas vahemikus, on tõend, et miski püstitas tunneli. See on nõrgem signaal kui teenuse olek, seega siduge see marsruudikontrolliga, selle asemel et pidada liidest identiteedi tõendiks. Mitmed kliendid võivad luua mitmeid selliseid liideseid ja ainult üks neist kuulub tunnelile, mida te mõtlesite.
Olek ei ole marsruutimine
Ühendatud teenus ütleb, et tunnel on olemas. See ei ütle, et teie sihtkoht seda kasutab. Lugege aadressid ja seejärel küsige kernelilt otse:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
Täistunneli klient paigaldab tunnelisse vaikimisi marsruudi; jaotatud tunneli klient paigaldab kindlad privaatsed eesliited. Mõlemad teatavad Connected ja skript, mis kontrollib ainult olekut, sõidab rõõmsalt vale teed. Tunneli peatamine ei eemalda tingimata marsruute, mille paigaldas teine klient, ja see on üks viis, kuidas masin jääb korraga nii ühendatud teenuse kui ka vananenud marsruudiga. Vaadake sihtkohta, mis teile tähtis on, mitte kogu marsruuditabelit.
Nimetamine on eraldi probleem
Teised masinad ei saa Maci nime järgi kätte, samal ajal kui selle aadress töötab, ja sellest teatatakse VPN-i rikkena. Kohalik hostinimi, hostinimi ja DNS-kirje on kolm erinevat asja. scutil --get LocalHostName näitab Bonjouri nime; sudo scutil --set HostName mac-office määrab nime, mida süsteem teatab.
Kumbki säte ei loo kontori tsoonis kirjet. Kui teised hostid peavad nime DNS-i kaudu lahendama, peab tsooni omanik selle lisama, või peaks skript selle asemel aadressi kasutama. Püsiva nime seadmine muudab teadaanded järjepidevaks; see ei pane resolverit vastama.
Kirjutage teenuse identifikaator ja oodatav marsruudi kuju koos skripti ja kontrollige enne kopeerimist mõlemat. Tunnel, mis on üleval ja valesti marsruuditud, ebaõnnestub täpselt nagu tunnel puuduks, ja Connected-iga logirida saadab järgmise inimese valesse kohta otsima.