TUN/TAP: μη έγκυρο όρισμα — αναντιστοιχία πλαισίωσης OpenVPN
Τα σφάλματα εγγραφής με κωδικό 22 συνήθως σημαίνουν ότι οι δύο πλευρές διαφωνούν για την πλαισίωση των πακέτων δεδομένων, όχι για βλάβη οδηγού. Συγκρίνετε τη συμπίεση στα δύο άκρα και μετά τον τύπο της συσκευής.
Ο πελάτης αυθεντικοποιείται, το αρχείο καταγραφής λέει συνδεδεμένος, και κανένα πακέτο δεν διασχίζει τη σήραγγα. Ο διακομιστής τερματίζει την προσπάθεια με write to TUN/TAP: Invalid argument (code=22), που μοιάζει με βλάβη οδηγού και συνήθως δεν είναι. Σε δρομολογητές και μικρούς διακομιστές Linux, αυτή η γραμμή συνήθως σημαίνει ότι οι δύο πλευρές διαφωνούν για το πώς πλαισιώνονται τα πακέτα δεδομένων, οπότε ο πυρήνας απορρίπτει το αποκρυπτογραφημένο buffer που του δόθηκε. Η δρομολόγηση δεν έχει δοκιμαστεί σε εκείνο το σημείο.
Ένας σωστός πίνακας δρομολόγησης και μια χαλασμένη συμφωνία πλαισίωσης φαίνονται ίδια από την πλευρά του πελάτη: συνδεδεμένος, και τίποτα δεν λειτουργεί.
Η σήραγγα ανεβαίνει και τίποτα δεν τη διασχίζει
Τα σφάλματα εγγραφής στη συσκευή σήραγγας συμβαίνουν μετά την αποκρυπτογράφηση και πριν από τη δρομολόγηση. Ο δαίμονας αποκρυπτογραφεί ένα πακέτο, το παραδίδει στη διεπαφή, και η διεπαφή το απορρίπτει επειδή το buffer δεν ταιριάζει με αυτό που περιμένει αυτή η συσκευή. Ο κωδικός 22 είναι η γενική απάντηση για μη έγκυρο όρισμα, άρα η χρήσιμη πληροφορία είναι το επίπεδο: αυτό είναι η διαδρομή δεδομένων και όχι η χειραψία. Αν η κίνηση λειτουργούσε χθες και σταμάτησε σήμερα χωρίς αλλαγή διαμόρφωσης, υποψιαστείτε μια αναβάθμιση πακέτου ή firmware που μετακίνησε μια προεπιλογή πριν υποψιαστείτε το δίκτυο.
Διαβάστε το αρχείο καταγραφής γύρω από τη ρύθμιση του καναλιού δεδομένων αντί για το πρώτο σφάλμα. Η διαπραγματευμένη λειτουργία συμπίεσης, ο τύπος dev και οι επιλογές που ωθήθηκαν εμφανίζονται όλα σε υψηλότερη λεπτομέρεια, και σας λένε ποια από τις τρεις αναντιστοιχίες έχετε.
Η συμπίεση είναι πλαισίωση, όχι εύρος ζώνης
Με τη συμπίεση ενεργοποιημένη, κάθε πακέτο δεδομένων φέρει μια κεφαλίδα που περιγράφει πώς κωδικοποιήθηκε, και τα δύο άκρα πρέπει να συμφωνήσουν σε αυτή την κεφαλίδα. Ένας διακομιστής που φέρει ακόμη comp-lzo από ένα παλιό δείγμα διαμόρφωσης, σε συνδυασμό με πελάτη χωρίς γραμμή συμπίεσης, παράγει ακριβώς αυτό το σφάλμα: ο διακομιστής περιμένει μια κεφαλίδα που ο πελάτης δεν έγραψε ποτέ. Η ανάμειξη comp-lzo με compress lz4-v2 αποτυγχάνει με τον ίδιο τρόπο, αφού οι αλγόριθμοι διαφέρουν παρόλο που και τα δύο ονομάζονται συμπίεση. Η επιλογή είναι σύμβαση πλαισίωσης και όχι χαρακτηριστικό εύρους ζώνης στις σύγχρονες ζεύξεις.
Η συμπεριφορά των εκδόσεων προσθέτει μια παγίδα. Η σειρά 2.5 άρχισε να εκδίδει προειδοποιήσεις παρωχημένης χρήσης για τις επιλογές συμπίεσης, και η 2.6 χαράσσει μια γραμμή ανάμεσα στην απόρριψη συμπιεσμένων πακέτων και στην απλή αφή των δεδομένων ασυμπίεστων. Επομένως, μια ενημέρωση firmware του δρομολογητή μπορεί να αλλάξει την ισχύουσα συμφωνία χωρίς κανείς να επεξεργαστεί τη σήραγγα.
Ευθυγραμμίστε τα δύο άκρα ή αφαιρέστε το από τα δύο
Απαριθμήστε κάθε οδηγία συμπίεσης: το αρχείο του διακομιστή, τυχόν επιλογές που ωθήθηκαν, αρχεία ειδικά για τον πελάτη και το προφίλ του πελάτη. Το comp-lzo στον διακομιστή χρειάζεται την ίδια λέξη στον πελάτη, και το adaptive είναι η παλιά προεπιλογή που συνήθως σημαίνει η γυμνή επιλογή σε παλαιότερες εκδόσεις. Ο διακόπτης GUI του δρομολογητή με ετικέτα LZO ή συμπίεση γράφει την ίδια επιλογή, οπότε ρυθμίστε τον να ταιριάζει αντί να αναμειγνύετε αλγορίθμους. Μην υποθέτετε ότι ένα παρόμοιο όνομα είναι συμβατό.
Αν η συμπίεση δεν είναι επιθυμητή, αφαιρέστε την σκόπιμα από τα δύο άκρα. Το allow-compression no στον διακομιστή απορρίπτει συμπιεσμένα πακέτα, αλλά μόνο αφού οι πελάτες σταματήσουν να τα προσφέρουν· η εφαρμογή του ενώ ένας πελάτης εξακολουθεί να ωθεί συμπίεση δημιουργεί ξανά την αναντιστοιχία προς την άλλη κατεύθυνση.
Ελέγξτε την ώθηση και τον τύπο της συσκευής
Ένας διακομιστής μπορεί να ωθήσει μια οδηγία συμπίεσης από το κύριο αρχείο του ή από ένα αρχείο ειδικό για τον πελάτη, και ένας πελάτης μπορεί να απορρίψει τις ωθημένες επιλογές με pull-filter. Συνδέστε έναν πελάτη σε λεπτομέρεια 4, διαβάστε τι ανακοίνωσε ο διακομιστής έναντι αυτού που δέχτηκε ο πελάτης, και μετά επιβεβαιώστε ότι κανένα φίλτρο δεν το αφαίρεσε. Αν οι δύο πλευρές τώρα συμφωνούν και το σφάλμα παραμένει, κοιτάξτε τον τύπο της συσκευής: dev tap στο ένα άκρο και dev tun στο άλλο δεν μπορούν να ανταλλάξουν πλαίσια, και ο πυρήνας απορρίπτει την εγγραφή με τον ίδιο τρόπο.
Μια ανάπτυξη TAP με γέφυρα απαιτεί πραγματική γέφυρα στον διακομιστή, όχι απλώς διαφορετικό όνομα συσκευής. Η μετονομασία μιας διεπαφής σε tap0 χωρίς προσθήκη σε γέφυρα παράγει μια συσκευή που δέχεται την εγγραφή και δεν πηγαίνει πουθενά.
Στη συνέχεια επαληθεύστε με έναν πελάτη και έναν προορισμό: κάντε ping στη διεύθυνση της σήραγγας του διακομιστή, μετά σε έναν κεντρικό υπολογιστή στο LAN του. Το πρώτο αποδεικνύει το κανάλι δεδομένων και το δεύτερο την προώθηση.