Κάπου σε ένα σενάριο ανάπτυξης υπάρχει ένας έλεγχος για το αν η σήραγγα είναι ενεργή πριν ξεκινήσει μια αντιγραφή. Υπάρχουν τρεις διαθέσιμες απαντήσεις, και δεν σημαίνουν το ίδιο: η κατάσταση υπηρεσίας που αναφέρει το scutil, η διαδρομή που επέλεξε ο πυρήνας και το αν το απομακρυσμένο άκρο απαντά πραγματικά. Η σύγκρισή τους είναι η διαφορά ανάμεσα σε έναν έλεγχο που προβλέπει την αντιγραφή και σε έναν που απλώς στολίζει ένα αρχείο καταγραφής.

Τρεις απαντήσεις στο αν το VPN είναι ενεργό

Η κατάσταση υπηρεσίας είναι γεγονός του επιπέδου ελέγχου. Το macOS γνωρίζει ότι μια διαμόρφωση είναι συνδεδεμένη επειδή το είπε η διεργασία-πελάτης της. Η διαδρομή είναι γεγονός του επιπέδου δεδομένων: ο πυρήνας θα στείλει αυτόν τον προορισμό μέσω εκείνης της διεπαφής. Η προσβασιμότητα είναι γεγονός από άκρο σε άκρο, και μπορεί να αποτύχει για λόγους που δεν βλέπει κανένα από τα άλλα δύο.

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

Ένας χρήσιμος έλεγχος συνδυάζει τα δύο πρώτα και χρησιμοποιεί το τρίτο ως επιβεβαίωση ότι τα άλλα δύο δεν έλεγαν ψέματα. Οποιοδήποτε μόνο του είναι μια εικασία με χρονική σήμανση.

Διαβάστε το αναγνωριστικό, όχι το εμφανιζόμενο όνομα

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

Η λίστα τυπώνει μία γραμμή ανά υπηρεσία, και κάθε γραμμή φέρει μια κατάσταση σε παρένθεση ακολουθούμενη από το αναγνωριστικό της υπηρεσίας, τον τύπο και το εμφανιζόμενο όνομα. Γράψτε το σενάριο με βάση το αναγνωριστικό, γιατί το εμφανιζόμενο όνομα είναι ό,τι πληκτρολόγησε κάποιος στις Ρυθμίσεις Συστήματος και μπορεί να αλλάξει χωρίς προειδοποίηση. Η εντολή κατάστασης τυπώνει μία λέξη, ακολουθούμενη από στατιστικά για ορισμένους τύπους υπηρεσίας· αντιστοιχίστε αυτή την πρώτη λέξη αντί να ψάχνετε το όνομα σε όλη την έξοδο, το οποίο εμφανίζεται και αλλού.

Η εκκίνηση μιας υπηρεσίας μπορεί να προκαλέσει αίτημα εξουσιοδότησης ή να απορριφθεί εντελώς όταν το προφίλ διαχειρίζεται. Αυτή η απόρριψη δεν είναι βλάβη της σήραγγας· είναι δήλωση πολιτικής για το ποιος επιτρέπεται να την ανεβάσει.

Ένας πελάτης τρίτου μέρους κρύβεται από τη λίστα

Μια κενή λίστα δεν σημαίνει ότι δεν υπάρχει VPN. Εδώ εμφανίζονται οι διαμορφώσεις που δημιουργήθηκαν μέσα στις ρυθμίσεις δικτύου του ίδιου του συστήματος· ένας πελάτης κατασκευαστή, ένα προφίλ διαχείρισης ή μια εφαρμογή τρίτου μέρους μπορεί να κρατά μια ενεργή σήραγγα που αυτή η εντολή δεν βλέπει ποτέ. Το δικό της εργαλείο είναι η αρχή για τη δική της υπηρεσία. Το να ρωτήσετε το scutil για έναν πελάτη που δεν εγγράφηκε ποτέ σε αυτό δεν επιστρέφει τίποτα, και το τίποτα δεν είναι η ίδια απάντηση με το αποσυνδεδεμένο.

Όταν η λίστα είναι κενή αλλά η κίνηση είναι σαφώς κρυπτογραφημένη, ψάξτε αντ' αυτού τη διεπαφή: μια συσκευή utun ή ppp με διεύθυνση στο αναμενόμενο εύρος είναι απόδειξη ότι κάτι έστησε σήραγγα. Είναι ασθενέστερο σήμα από μια κατάσταση υπηρεσίας, οπότε συνδυάστε το με έλεγχο διαδρομής αντί να θεωρείτε τη διεπαφή απόδειξη ταυτότητας. Αρκετοί πελάτες μπορούν να δημιουργήσουν αρκετές τέτοιες διεπαφές, και μόνο μία από αυτές ανήκει στη σήραγγα που εννοούσατε.

Η κατάσταση δεν είναι δρομολόγηση

Μια συνδεδεμένη υπηρεσία λέει ότι η σήραγγα υπάρχει. Δεν λέει ότι ο προορισμός σας τη χρησιμοποιεί. Διαβάστε τις διευθύνσεις και μετά ρωτήστε τον πυρήνα απευθείας:

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

Ένας πελάτης πλήρους σήραγγας εγκαθιστά μια προεπιλεγμένη διαδρομή μέσω της σήραγγας· ένας πελάτης διαχωρισμένης σήραγγας εγκαθιστά συγκεκριμένα ιδιωτικά προθέματα. Και οι δύο αναφέρουν Connected, και ένα σενάριο που ελέγχει μόνο την κατάσταση θα τρέξει ευτυχώς πάνω από τη λάθος διαδρομή. Η διακοπή μιας σήραγγας δεν αφαιρεί απαραίτητα διαδρομές που εγκατέστησε άλλος πελάτης, και αυτός είναι ένας τρόπος με τον οποίο ένα μηχάνημα καταλήγει ταυτόχρονα με συνδεδεμένη υπηρεσία και παρωχημένη διαδρομή. Κοιτάξτε τον προορισμό που σας ενδιαφέρει, όχι ολόκληρο τον πίνακα δρομολόγησης.

Η ονομασία είναι ξεχωριστό πρόβλημα

Άλλα μηχανήματα δεν μπορούν να φτάσουν το Mac με το όνομα ενώ η διεύθυνσή του δουλεύει, και αυτό αναφέρεται ως βλάβη VPN. Το τοπικό όνομα κεντρικού υπολογιστή, το όνομα κεντρικού υπολογιστή και η εγγραφή DNS είναι τρία διαφορετικά πράγματα. Το scutil --get LocalHostName δείχνει το όνομα Bonjour· το sudo scutil --set HostName mac-office ορίζει το όνομα που αναφέρει το σύστημα.

Καμία από τις δύο ρυθμίσεις δεν δημιουργεί εγγραφή στη ζώνη του γραφείου. Αν άλλοι κεντρικοί υπολογιστές πρέπει να επιλύουν το όνομα μέσω DNS, ο ιδιοκτήτης της ζώνης πρέπει να το προσθέσει, ή το σενάριο θα έπρεπε να χρησιμοποιεί τη διεύθυνση. Η ρύθμιση σταθερού ονόματος κάνει τις αναγγελίες συνεπείς· δεν κάνει τον επιλυτή να απαντήσει.

Καταγράψτε το αναγνωριστικό της υπηρεσίας και το αναμενόμενο σχήμα της διαδρομής μαζί στο σενάριο, και ελέγξτε και τα δύο πριν από την αντιγραφή. Μια σήραγγα που είναι ενεργή και δρομολογημένη λάθος αποτυγχάνει ακριβώς όπως η απουσία σήραγγας, και η γραμμή καταγραφής που λέει Connected θα στείλει τον επόμενο άνθρωπο να ψάξει στο λάθος μέρος.

Σχετικά άρθρα