Τρία πράγματα πρέπει να συμφωνήσουν προτού μια σήραγγα Kerio μεταφέρει κίνηση: η διεύθυνση στη διεπαφή kvnet, η τιμή που κατέγραψε ο πελάτης και αυτό που περιμένει η πολιτική του διακομιστή ή το DHCP. Όταν διαφωνούν, η σήραγγα εξακολουθεί να ταυτοποιείται και εξακολουθεί να ανεβαίνει, και αυτό ακριβώς κάνει την αποτυχία μπερδεμένη. Η διεπαφή δημιουργείται ανά σύνδεση, άρα μια διεύθυνση που ορίστηκε με το χέρι ανήκει σε εκείνη τη συνεδρία και σε τίποτε άλλο. Αυτό είναι το σχήμα του προβλήματος, και η λύση είναι ένα hook και όχι ένα αρχείο ρυθμίσεων. Το υπόλοιπο είναι πού να διαβάσετε την τιμή και πού να την εφαρμόσετε.

Γιατί η διεύθυνση επανέρχεται συνεχώς

Το kvnet είναι ένας εικονικός προσαρμογέας που ο πελάτης δημιουργεί όταν ξεκινά μια σύνδεση και αφαιρεί όταν τελειώνει. Ένα χειροκίνητο ip link set επιβιώνει επομένως ακριβώς όσο η συνεδρία στην οποία εφαρμόστηκε, και η επόμενη σύνδεση ξεκινά με ό,τι εκχωρήσει ο πελάτης. Σε μηχάνημα όπου ο πελάτης αποτυγχάνει να εφαρμόσει την αναμενόμενη διεύθυνση, κάθε επανασύνδεση επαναφέρει την ίδια αναντιστοιχία, και ο κανόνας μίσθωσης ή πρόσβασης απορρίπτει ξανά τη συσκευή.

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

Διαβάστε την τιμή από τον πελάτη, όχι από τη διεπαφή

Ο πελάτης Linux γράφει λεπτομέρειες διαπραγμάτευσης στο αρχείο καταγραφής αποσφαλμάτωσης, και η διεύθυνση που σκοπεύει να χρησιμοποιήσει εμφανίζεται εκεί ως το τελευταίο διακριτικό σε μορφή διεύθυνσης της ακολουθίας σύνδεσης. Συγκρίνετε το με αυτό που κρατά στην πραγματικότητα ο πυρήνας, το οποίο απέχει ένα readlink: cat /sys/class/net/kvnet/address.

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

Εφαρμόστε την αφού υπάρξει η διεπαφή

Οι χρήστες του NetworkManager μπορούν να τοποθετήσουν ένα script στον κατάλογο αποστολέα του και να ενεργούν μόνο όταν ανεβαίνει η διεπαφή VPN. Ένας πελάτης που διαχειρίζεται το systemd χρειάζεται περισσότερη προσοχή: ένα drop-in που εκτελείται στην εκκίνηση της υπηρεσίας συνήθως ενεργοποιείται πριν υπάρξει ο προσαρμογέας, οπότε το hook πρέπει να περιμένει τη διεπαφή αντί να την υποθέτει. Ορίστε τότε τη διεύθυνση, και αν ο πυρήνας αρνηθεί ενώ ο σύνδεσμος είναι ανενεργός, κατεβάστε τον, ορίστε τη διεύθυνση και ανεβάστε τον ξανά. Διαβάστε το εξαγόμενο διακριτικό πίσω μέσω ενός μοτίβου MAC πριν το περάσετε στο ip link, ώστε μια απρόσμενη γραμμή καταγραφής να μην μπορεί να γίνει όρισμα.

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

Επαληθεύστε τη μίσθωση και όχι τον σύνδεσμο

Το ip -4 -o addr show dev kvnet θα πρέπει να δείχνει διεύθυνση στο αναμενόμενο εύρος, το ip neigh show dev kvnet θα πρέπει να δείχνει την πύλη, και μία υπηρεσία πίσω από το VPN θα πρέπει να απαντά. Έπειτα αποσυνδεθείτε και επανασυνδεθείτε μία φορά· αν η διεύθυνση επανέλθει, το hook ενεργοποιείται στο λάθος συμβάν ή δεν ενεργοποιείται καθόλου.

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

Επανεξετάστε την παράκαμψη μετά από αναβάθμιση

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

Κρατήστε το script αρκετά σύντομο για ανάγνωση σε μία καθισιά. Οι παρακάμψεις που αναλύουν καταγραφές είναι προσωρινές από τη φύση τους. Εκείνες που επιβιώνουν είναι όσες μπορεί να κατανοήσει ένας μελλοντικός αναγνώστης χωρίς το αρχικό νήμα.

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