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

Στο macOS, αυτό το κάτι είναι συνήθως ο δαίμονας IKE.

Το μοτίβο: μία σύνδεση, μετά λήξη

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

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

Δύο δαίμονες, μία θύρα

Το σύστημα εκτελεί racoon όταν μια σύνδεση μιλά IKE έκδοση 1. Οι τρέχουσες εκδόσεις φέρνουν επίσης iked για IKEv2 και τη νεότερη στοίβα IPsec. Και τα δύο μπορούν να δεσμεύσουν το UDP 500 και το UDP 4500, και τα δύο μπορούν να κρατήσουν μια μισάνοιχτη συσχέτιση ασφαλείας αφού μια προσπάθεια σύνδεσης ακυρωθεί στο πεδίο κωδικού ή διακοπεί από αλλαγή δικτύου.

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

Βρείτε τον ιδιοκτήτη πριν σκοτώσετε οτιδήποτε, γιατί η απάντηση καθορίζει ποια υπηρεσία θα επανεκκινήσετε και ποιο αρχείο καταγραφής θα διαβάσετε μετά.

sudo lsof -i :500 -i :4500
ps -ef | grep -E "racoon|iked"

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

Επανεκκινήστε την εργασία και όχι τη διεργασία

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

sudo launchctl stop com.apple.racoon
sudo launchctl start com.apple.racoon

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

Στη συνέχεια συνδεθείτε μία φορά και διαβάστε το αρχείο καταγραφής του πελάτη από την αρχή. Μια διαπραγμάτευση που προχωρά πέρα από τη φάση 1 και μετά αναφέρει αποτυχία μετάδοσης επαναλαμβάνει το τοπικό πρόβλημα υποδοχής; μια διαπραγμάτευση που απορρίπτεται από το ομόλογο είναι εντελώς άλλο εισιτήριο.

Όταν ο διακομιστής είναι αυτός που αρνείται

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

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

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

Παλαιότεροι πελάτες και ο πυρήνας 64 bit

Ο παλιός πελάτης Cisco IPSec φορτώνει μια επέκταση πυρήνα φτιαγμένη για συστήματα 32 bit και PowerPC. Σε Mac που εκκινεί στον πυρήνα 64 bit, αυτή η επέκταση δεν μπορεί να φορτωθεί, και ο πελάτης αποτυγχάνει νωρίς με σφάλμα 51 επειδή δεν φτάνει καθόλου στο υποσύστημα VPN. Καμία ποσότητα επανεκκίνησης του δαίμονα δεν διορθώνει μια επέκταση πυρήνα με λάθος αρχιτεκτονική.

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

  • Αναπαράγετε μία φορά και μετά ελέγξτε ποιος δαίμονας κατέχει το UDP 500 πριν αγγίξετε το προφίλ.
  • Διαβάστε την πρώτη αποτυχία μετά τη φάση 1: ένα σφάλμα μετάδοσης δείχνει την τοπική υποδοχή.
  • Επανεκκινήστε την εργασία του launchd, όχι μόνο τη διεργασία, και επιβεβαιώστε ότι η θύρα είναι ελεύθερη.
  • Δοκιμάστε έναν δεύτερο λογαριασμό για να ξεχωρίσετε ένα παράθυρο επανεπαλήθευσης στην πλευρά του διακομιστή από βλάβη του πελάτη.
  • Καταγράψτε την αρχιτεκτονική του πυρήνα πριν κατηγορήσετε τον πελάτη.

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

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