Et sted i et distribusjonsskript er det en sjekk på om tunnelen er oppe før en kopi starter. Tre svar er tilgjengelige, og de betyr ikke det samme: tjenestetilstanden som scutil rapporterer, ruten kjernen valgte, og om den andre enden faktisk svarer. Å sammenligne dem er forskjellen mellom en sjekk som forutsier kopien og en som bare pynter på loggen.

Tre svar på spørsmålet om VPN er oppe

Tjenestetilstanden er et faktum på kontrollplanet. macOS vet at en konfigurasjon er tilkoblet fordi klientprosessen sa det. Ruten er et faktum på dataplanet: kjernen vil sende denne destinasjonen gjennom det grensesnittet. Rekkevidde er et faktum fra ende til ende, og det kan svikte av grunner som ingen av de to andre ser.

SignalAnswersBlind spot
scutil --nc statusIs the service connected?Third-party clients, wrong routes
route -n getWhere would this go?The peer may be down
A request to the far sideDoes it work now?Slow, and it changes state

En nyttig sjekk kombinerer de to første og bruker den tredje som bekreftelse på at de to andre ikke løy. Enhver av dem alene er en gjetning med tidsstempel.

Les identifikatoren, ikke visningsnavnet

scutil --nc list
scutil --nc status "Office"

Oppføringen skriver ut én linje per tjeneste, og hver linje har en status i parentes, deretter tjenesteidentifikatoren, typen og visningsnavnet. Skriv skriptet mot identifikatoren, fordi visningsnavnet er det noen skrev inn i Systeminnstillinger og kan endres uten varsel. Statuskommandoen skriver ut ett ord, og for noen tjenestetyper statistikk etter det; sammenlign det første ordet i stedet for å lete etter navnet i hele utskriften, som også dukker opp andre steder.

Å starte en tjeneste kan gi en autorisasjonsforespørsel eller bli blankt avvist når profilen er administrert. Den avvisningen er ikke en feil i tunnelen; det er en policyerklæring om hvem som får hente den opp.

En tredjepartsklient skjuler seg fra listen

En tom liste betyr ikke at det ikke finnes VPN. Konfigurasjoner laget i systemets egne nettverksinnstillinger vises her; en leverandørklient, en administrasjonsprofil eller en tredjepartsapp kan holde en aktiv tunnel som denne kommandoen aldri ser. Verktøyet deres er autoriteten for deres egen tjeneste. Å spørre scutil om en klient som aldri registrerte seg hos den gir ingenting, og ingenting er ikke samme svar som frakoblet.

Når listen er tom, men trafikken tydelig er kryptert, se etter grensesnittet: en utun- eller ppp-enhet med adresse i det forventede området er bevis på at noe har etablert en tunnel. Det er et svakere signal enn tjenestetilstanden, så kombiner det med en rutesjekk i stedet for å behandle grensesnittet som bevis på identitet. Flere klienter kan lage flere slike grensesnitt, og bare ett av dem tilhører tunnelen du mente.

Status er ikke ruting

En tilkoblet tjeneste sier at tunnelen finnes. Den sier ikke at destinasjonen din bruker den. Les adressene, og spør deretter kjernen direkte:

ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20

En klient med full tunnel installerer en standardrute gjennom tunnelen; en klient med delt tunnel installerer bestemte private prefikser. Begge rapporterer Connected, og et skript som bare sjekker status vil trygt kjøre over feil vei. Å stoppe en tunnel fjerner ikke nødvendigvis ruter som en annen klient installerte, og det er en måte en maskin ender med en tilkoblet tjeneste og en foreldet rute samtidig. Se på destinasjonen du bryr deg om, ikke på hele rutetabellen.

Navngiving er et eget problem

Andre maskiner når ikke Macen ved navn mens adressen virker, og det rapporteres som en VPN-feil. Det lokale vertsnavnet, vertsnavnet og DNS-oppføringen er tre forskjellige ting. scutil --get LocalHostName viser Bonjour-navnet; sudo scutil --set HostName mac-office setter navnet systemet rapporterer.

Ingen av innstillingene lager en oppføring i kontorsonen. Hvis andre verter må slå opp navnet via DNS, må soneeieren legge det til, eller skriptet bør bruke adressen i stedet. Et stabilt navn gjør kunngjøringene konsistente; det får ikke oppløseren til å svare.

Noter tjenesteidentifikatoren og den forventede ruteformen sammen i skriptet, og sjekk begge før kopien. En tunnel som er oppe men rutet feil vei feiler nøyaktig som ingen tunnel, og logglinjen som sier Connected sender neste person til å lete på feil sted.

Relaterte artikler