L2TP: θανατηφόρο σήμα 15, NO_PROPOSAL_CHOSEN και modp1024 που λείπει
Το θανατηφόρο σήμα 15 μαζί με NO_PROPOSAL_CHOSEN είναι ασυμφωνία στη φάση 2: είτε ο δαίμονας δεν προσφέρει πια modp1024, είτε μια τιμή της φάσης 1 βρίσκεται στο πεδίο της φάσης 2.
Η σύνδεσή σας κολλάει, ο πελάτης εξέρχεται και η τελευταία γραμμή στην οθόνη είναι death_handler: Fatal signal 15 received. Αυτή η γραμμή αναφέρει διακοπή, όχι αιτία. Μία γραμμή πιο πάνω στο αρχείο καταγραφής του IPsec υπάρχει σχεδόν πάντα NO_PROPOSAL_CHOSEN, και το ζεύγος δείχνει στη φάση 2 της ανταλλαγής, όπου τα δύο μέρη συγκρίνουν επιλογές κρυπτογράφησης και κατακερματισμού και σταματούν όταν δεν έχουν καμία κοινή. Τα διαπιστευτήρια δεν έχουν σταλεί σε εκείνο το στάδιο, επομένως η εκ νέου πληκτρολόγηση του κωδικού δεν μπορεί να αλλάξει το αποτέλεσμα.
Δύο πράγματα συνήθως αδειάζουν αυτή την τομή σε έναν πελάτη Linux. Ο τοπικός δαίμονας μπορεί να μην υλοποιεί πια την ομάδα Diffie-Hellman που ζητά το προφίλ, ή το προφίλ μπορεί να φέρει πρόταση φάσης 1 σε πεδίο φάσης 2. Και τα δύο αφήνουν ίχνη στο αρχείο καταγραφής, και κανένα δεν είναι πρόβλημα λογαριασμού.
Τι λένε πραγματικά τα δύο μηνύματα
Το IKE διαπραγματεύεται σε περάσματα. Η φάση 1 χτίζει ένα προστατευμένο κανάλι και επιλέγει τους δικούς της αλγορίθμους· η φάση 2, το θυγατρικό SA, μεταφέρει κίνηση με ξεχωριστό σύνολο. Το NO_PROPOSAL_CHOSEN είναι η ειδοποίηση που επιστρέφει ο απαντών όταν κανένας από τους προσφερόμενους συνδυασμούς δεν είναι αποδεκτός, και εμφανίζεται ως [ HASH N(NO_PROP) ] μέσα σε ανταλλαγή INFORMATIONAL.
Το σήμα 15 είναι διαφορετικό γεγονός: κάτι είπε στην τοπική διεργασία να σταματήσει και ο χειριστής το κατέγραψε. Όταν οι δύο γραμμές εμφανίζονται μαζί, η σειρά είναι αιτιακή, πρώτα η απόρριψη και μετά το κλείσιμο.
Διαβάστε τη διαπραγμάτευση πριν αγγίξετε τα διαπιστευτήρια
Ανεβάστε το επίπεδο καταγραφής εκεί όπου γράφει ο δαίμονας και συνδεθείτε ξανά παρακολουθώντας την έξοδο. Σε κεντρικό υπολογιστή με NetworkManager το πρόσθετο L2TP περνά αυτό το επίπεδο στο backend, και τα μηνύματα καταλήγουν στο journal ή στο κλασικό αρχείο syslog ανάλογα με τη διανομή. Οποιοδήποτε από τα δύο θα δείξει την ανταλλαγή: journalctl -f -u NetworkManager | grep -Ei 'pluto|charon|no_prop|proposal' ή tail -f /var/log/syslog | grep -Ei 'pluto|charon|ike'.
Μια γραμμή που ονομάζει το pluto προέρχεται από το libreswan, το charon από το strongSwan, και τα δύο περιγράφουν την ίδια κατάσταση με διαφορετικές λέξεις. Η μορφή που αξίζει να αναζητήσετε είναι αυτή που ονομάζει την ομάδα που λείπει, όπως algorithm 'modp1024' is not supported, γιατί μετατρέπει μια αόριστη αποτυχία σε συγκεκριμένη.
Πού πήγε το modp1024
Η ομάδα 2 του Diffie-Hellman είναι αρκετά αδύναμη ώστε αρκετές διανομές σταμάτησαν να τη μεταγλωττίζουν στο libreswan από την 3.30 και μετά. Τότε ένα προφίλ γραμμένο χρόνια πριν, ή αντιγραμμένο από οδηγό πύλης που απαριθμεί μόνο aes128-sha1-modp1024, ζητά από τον τοπικό δαίμονα κάτι που δεν μπορεί καθόλου να εκτελέσει. Νεότερες εκδόσεις του NetworkManager-l2tp κάνουν αυτό το αποτέλεσμα πιθανότερο: από την 1.2.16 αντικαθιστούν το σύνολο με προτάσεις σε στυλ Windows 10 και iOS και αφαιρούν το modp1024 μόλις εντοπιστεί το libreswan. Η απέναντι πλευρά είναι συχνά αθώα και εξακολουθεί να προσφέρει ακριβώς την ομάδα που ρυθμίσατε.
Αυτή η ασυμμετρία κάνει την αποτυχία να μοιάζει τυχαία. Ένας παλαιότερος πελάτης συνδέεται, το ίδιο προφίλ σε ενημερωμένο φορητό δεν συνδέεται, και η διαμόρφωση του διακομιστή δεν μετακινήθηκε ποτέ. Τη ζημιά την κάνει η απόκλιση εκδόσεων.
Δύο επισκευές με διαφορετικό εύρος
Η φθηνή επισκευή είναι να σταματήσετε να καρφιτσώνετε αλγορίθμους. Καθαρίστε και τα δύο πεδία προτάσεων στον επεξεργαστή και αφήστε το πρόσθετο να διαλέξει σύνολο που δέχεται η άλλη πλευρά· αν η πύλη υποστηρίζει σύγχρονες ομάδες, η διαπραγμάτευση ολοκληρώνεται χωρίς άλλη δουλειά.
Η δεύτερη επισκευή κρατά μια παλιά πύλη προσβάσιμη εγκαθιστώντας το strongSwan, του οποίου τα πακέτα υλοποιούν ακόμη την ομάδα 2 στις περισσότερες διανομές. Αυτό είναι αλλαγή δαίμονα, άρα έχει κόστος: επιβεβαιώστε αν άλλα τούνελ στον κεντρικό υπολογιστή εξαρτώνται από τη διαμόρφωση του libreswan πριν το αφαιρέσετε, και περιμένετε αρνήσεις SELinux ανάμεσα στο NetworkManager και το πρόσθετο strongSwan στο Fedora. Αυτές οι αρνήσεις εμφανίζονται στο αρχείο ελέγχου και όχι στο ίχνος IKE, γι' αυτό ένα τούνελ μπορεί να φαίνεται χαλασμένο αμέσως μετά από επιτυχή εγκατάσταση. Η σειρά που δουλεύει είναι πρώτα dnf install strongswan, μετά rpm -e libreswan.
Συμβολοσειρές προτάσεων που ταιριάζουν, και οι παγίδες γύρω τους
Όταν τα πεδία πρέπει να συμπληρωθούν με το χέρι, η φάση 1 και η φάση 2 παίρνουν διαφορετικές τιμές. Ένα ζεύγος γνωστό ότι δουλεύει απέναντι σε πλευρά τύπου Meraki προσφέρει aes128-sha1-modp1024 στη φάση 1 με 3des-sha1-modp1024 πίσω του, και τα δύο κλεισμένα με θαυμαστικό που κάνει το σύνολο αυστηρό, ώστε να στέλνονται μόνο αυτές οι προτάσεις.
Μετά η φάση 2 στενεύει σε aes128-sha1 και 3des-sha1 με τον ίδιο αυστηρό δείκτη και χωρίς καθόλου κατάληξη Diffie-Hellman. Μια γραμμή φάσης 2 που φέρει -modp1024 είναι τιμή φάσης 1 στο λάθος πεδίο, και ο απαντών την απορρίπτει σε κάθε επανάληψη. Αντιγράψτε αυτή τη γραμμή σε δεύτερο προφίλ και το δεύτερο προφίλ αποτυγχάνει με τον ίδιο τρόπο, κι έτσι ένα τυπογραφικό λάθος γίνεται περιστατικό για ολόκληρο τον στόλο.
Άλλα σφάλματα φορούν το ίδιο αναδυόμενο παράθυρο χωρίς να είναι ασυμφωνίες προτάσεων. Στο KDE ο τύπος L2TP μπορεί να εμφανίζεται με το πρόσθετο εγκατεστημένο ενώ κάθε σύνδεση πεθαίνει αμέσως, γιατί ο επεξεργαστής συνδέσεων και οι βοηθοί χρόνου εκτέλεσης διανέμονται ως ξεχωριστά πακέτα. Κεντρικοί υπολογιστές χωρίς οθόνη μπορούν να επαναχρησιμοποιήσουν προφίλ από επιφάνεια εργασίας που δουλεύει: αντιγράψτε το από το /etc/NetworkManager/system-connections/, θέστε τη λειτουργία σε 600 και μετά εκτελέστε το nmcli con reload. Ανεβάστε το με το nmcli con up id work-l2tp, αφού η γυμνή μορφή θέλει UUID, και αφαιρέστε κάθε παρωχημένη καταχώριση ifname, αλλιώς ο διαχειριστής απαντά Could not find source connection ενώ όλα τα άλλα είναι σωστά.
Ένα προκοινόχρηστο κλειδί μπορεί να αποθηκευτεί ως απλό κείμενο ή ως 0s ακολουθούμενο από base64· και οι δύο μορφές δουλεύουν, αλλά η τιμή πρέπει να ταιριάζει με την πύλη byte προς byte, μαζί με τα κενά στο τέλος που αντιγράψατε μαζί της.