Μια διαδρομή που πληκτρολογείται μετά από κάθε σύνδεση λύνει τη στιγμή και όχι την εβδομάδα. Στο macOS, η διαρκής επιλογή είναι συνήθως ένα πρόθεμα που αποθηκεύεται με την υπηρεσία VPN, επειδή η υπηρεσία το επανεγκαθιστά σε κάθε σύνδεση και το αφαιρεί όταν η υπηρεσία είναι ανενεργή. Οι εναλλακτικές είναι ένα προσωρινό route add για δοκιμή και ένα hook σύνδεσης για διευθύνσεις που γίνονται γνωστές μόνο μετά τη διαπραγμάτευση.

Αποφασίστε αν η διαδρομή ανήκει στην υπηρεσία ή στη συνεδρία

Ρωτήστε από τι εξαρτάται το πρόθεμα. Αν είναι ένα σταθερό ιδιωτικό δίκτυο πίσω από εγγενή υπηρεσία VPN, η διαδρομή ανήκει σε εκείνη την υπηρεσία. Αν εξαρτάται από μια διεύθυνση ομότιμου που αλλάζει σε κάθε σύνδεση, ένα hook ή μια εργασία που καθοδηγείται από κατάσταση μπορεί να είναι ο καλύτερος ιδιοκτήτης. Αν απλώς ελέγχετε μια διαδρομή για τα επόμενα πέντε λεπτά, μια προσωρινή διαδρομή αρκεί.

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

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

Διαβάστε την τρέχουσα κατάσταση διαδρομών και υπηρεσίας

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

scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5

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

Σημειώστε τη διεύθυνση ομότιμου όσο είστε συνδεδεμένοι. Γίνεται η τιμή πύλης στη διαδρομή που είναι δεσμευμένη στην υπηρεσία, και είναι συνήθως ο προορισμός που εμφανίζεται για την προεπιλεγμένη διαδρομή του τούνελ στο netstat -rn.

Αποθηκεύστε το πρόθεμα με το networksetup

Το εργαλείο networksetup προσαρτά πρόσθετες διαδρομές σε μια υπηρεσία δικτύου. Για μια υπηρεσία με όνομα OfficeVPN και ένα ιδιωτικό πρόθεμα που φτάνει μέσω του ομότιμου του τούνελ, η μορφή είναι:

sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN

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

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

Χρησιμοποιήστε το route add μόνο για δοκιμή

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

sudo route -n add -net 10.20.0.0/16 -interface utun4

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

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

Επιλέξτε hook μόνο όταν η διεύθυνση διαπραγματεύεται

Για συνδέσεις βασισμένες σε PPP, όπως L2TP, το macOS εκτελεί /etc/ppp/ip-up μόλις εδραιωθεί η σύνδεση. Το σενάριο λαμβάνει το όνομα της διεπαφής και τις διαπραγματευμένες τοπικές και απομακρυσμένες διευθύνσεις, ώστε να μπορεί να προσθέσει μια διαδρομή που εξαρτάται από τον ομότιμο που εκχώρησε ο διακομιστής. Αυτή είναι ακριβώς η περίπτωση που μια σταθερή διαδρομή υπηρεσίας δεν μπορεί να εκφράσει.

Το IKEv2 και οι πελάτες κατασκευαστών μπορεί να μην χρησιμοποιούν καθόλου αυτή τη διαδρομή PPP, που σημαίνει ότι το σενάριο μπορεί να μείνει σιωπηλό για όλη τη συνεδρία. Όταν συμβαίνει αυτό, μια εργασία launchd που ερωτά το scutil --nc status και δρα σε αλλαγή κατάστασης είναι ο ισοδύναμος μηχανισμός, με μικρή καθυστέρηση.

Όποιο hook κι αν χρησιμοποιείτε, κάντε το αδρανές ως προς επαναλήψεις και κάντε το να αφαιρεί μόνο τις διαδρομές που δημιούργησε. Ένα σενάριο που διαγράφει κάθε διαδρομή που αναφέρει το τούνελ θα διαγράψει τελικά τη διαδρομή που κρατά τον διακομιστή VPN προσβάσιμο, και η σύνδεση θα πέσει μόλις πετύχει.

Τελειώστε ελέγχοντας τον ιδιωτικό προορισμό, τη συνηθισμένη περιήγηση και έναν κύκλο επανασύνδεσης ή ύπνου. Έπειτα επιθεωρήστε το scutil --dns, επειδή η επίλυση ονομάτων είναι ξεχωριστή πολιτική και μια λειτουργική διαδρομή δεν αποδεικνύει ότι τα ιδιωτικά ονόματα επιλύονται.

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