Ergens in een deploymentscript staat een controle of de tunnel actief is voordat een kopie begint. Er zijn drie antwoorden beschikbaar, en ze betekenen niet hetzelfde: de servicestatus die scutil meldt, de route die de kernel koos, en of de andere kant echt antwoordt. Ze vergelijken is het verschil tussen een controle die de kopie voorspelt en een die alleen het logboek versiert.

Drie antwoorden op de vraag of de VPN actief is

De servicestatus is een feit uit het controlevlak. macOS weet dat een configuratie verbonden is omdat het clientproces dat zei. De route is een feit uit het datavlak: de kernel stuurt deze bestemming via die interface. Bereikbaarheid is een feit van begin tot eind, en het kan mislukken om redenen die geen van de andere twee ziet.

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

Een nuttige controle combineert de eerste twee en gebruikt de derde als bevestiging dat de andere twee niet logen. Elk afzonderlijk is een gok met een tijdstempel.

Lees de identificatie, niet de weergavenaam

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

De lijst drukt één regel per service af, en elke regel bevat een status tussen haakjes, gevolgd door de service-identificatie, het type en de weergavenaam. Script op de identificatie, want de weergavenaam is wat iemand in Systeeminstellingen typte en kan zonder waarschuwing veranderen. De statusopdracht drukt één woord af, en voor sommige servicetypen daarna statistieken; vergelijk dat eerste woord in plaats van de naam in de hele uitvoer te zoeken, die ook elders voorkomt.

Een service starten kan een autorisatieverzoek geven of botweg geweigerd worden wanneer het profiel beheerd is. Die weigering is geen storing in de tunnel; het is een beleidsuitspraak over wie hem mag opzetten.

Een client van derden verbergt zich voor de lijst

Een lege lijst betekent niet dat er geen VPN is. Configuraties die in de eigen netwerkinstellingen van het systeem zijn gemaakt, verschijnen hier; een leveranciersclient, een beheerprofiel of een app van derden kan een actieve tunnel hebben die dit commando nooit ziet. De eigen tool is de autoriteit voor de eigen service. scutil vragen naar een client die zich er nooit registreerde levert niets op, en niets is niet hetzelfde antwoord als losgekoppeld.

Wanneer de lijst leeg is maar het verkeer duidelijk versleuteld is, zoek dan de interface: een utun- of ppp-apparaat met een adres in het verwachte bereik is bewijs dat iets een tunnel heeft opgezet. Dat is een zwakker signaal dan de servicestatus, dus combineer het met een routecontrole in plaats van de interface als bewijs van identiteit te zien. Meerdere clients kunnen meerdere zulke interfaces maken, en slechts één ervan hoort bij de tunnel die u bedoelde.

Status is geen routering

Een verbonden service zegt dat de tunnel bestaat. Het zegt niet dat uw bestemming hem gebruikt. Lees de adressen en vraag het de kernel daarna rechtstreeks:

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

Een full-tunnelclient installeert een standaardroute via de tunnel; een split-tunnelclient installeert specifieke privéprefixen. Beide melden Connected, en een script dat alleen de status controleert, rijdt vrolijk over het verkeerde pad. Een tunnel stoppen verwijdert niet noodzakelijk routes die een andere client installeerde, en dat is een van de manieren waarop een machine tegelijk een verbonden service en een verouderde route krijgt. Kijk naar de bestemming die u belangrijk vindt, niet naar de hele routetabel.

Naamgeving is een apart probleem

Andere machines bereiken de Mac niet op naam terwijl het adres werkt, en dat wordt als een VPN-storing gemeld. De lokale hostnaam, de hostnaam en het DNS-record zijn drie verschillende dingen. scutil --get LocalHostName toont de Bonjour-naam; sudo scutil --set HostName mac-office stelt de naam in die het systeem meldt.

Geen van beide instellingen maakt een record in de kantoorzone. Als andere hosts de naam via DNS moeten oplossen, moet de zone-eigenaar die toevoegen, of het script moet in plaats daarvan het adres gebruiken. Een stabiele naam instellen maakt aankondigingen consistent; het laat de resolver niet antwoorden.

Leg de service-identificatie en de verwachte vorm van de route samen in het script vast, en controleer beide vóór de kopie. Een tunnel die actief is maar de verkeerde kant op is gerouteerd, faalt precies zoals geen tunnel, en de logregel met Connected stuurt de volgende persoon naar de verkeerde plek.

Gerelateerde artikelen