Γιατί ένας διαγραμμένος peer του WireGuard επιστρέφει μετά από επανεκκίνηση
Δύο καταστάσεις κρατούν τη λίστα peer: η διεπαφή που εκτελείται και ό,τι τη γράφει κατά την εκκίνηση. Αφαιρέστε τον και από τις δύο και ελέγξτε το SaveConfig πριν αλλάξετε οτιδήποτε.
Η ταυτότητα εξαφανίζεται από τη διεπαφή που εκτελείται και η αλλαγή φαίνεται ολοκληρωμένη. Μετά την επανεκκίνηση της υπηρεσίας, επιστρέφει, κάτι που μοιάζει σαν το WireGuard να αγνοεί την εντολή. Αυτό που συνέβη στην πραγματικότητα είναι απλούστερο: η διαμόρφωση εκκίνησης περιέχει ακόμη τον peer.
Δύο καταστάσεις κρατούν αυτή τη λίστα. Η ανάκληση είναι αληθινή μόνο όταν τη χάσουν και οι δύο.
Τι αλλάζει στην πραγματικότητα το wg set
Η εντολή wg set wg0 peer <public-key> remove επεξεργάζεται τη διεπαφή που εκτελείται μέσα στον πυρήνα. Δεν γράφει τίποτα στον δίσκο. Το αρχείο διαμόρφωσης, το προφίλ του NetworkManager ή η αποθηκευμένη κατάσταση του δρομολογητή μένουν ανέπαφα. Αυτός είναι ο σχεδιασμός, όχι σφάλμα.
Ο διαχωρισμός είναι σκόπιμος, επειδή το εργαλείο δεν έχει ιδέα ποιος κατέχει τη διεπαφή. Μια εντολή χρόνου εκτέλεσης πρέπει να είναι ασφαλής απέναντι σε διεπαφή που διαχειρίζεται κάτι άλλο. Δεν μπορεί να μαντέψει πού ζει το διαρκές αντίγραφο. Η συνέπεια λέγεται εύκολα: μια αφαίρεση κατά τον χρόνο εκτέλεσης είναι προσωρινή εκ κατασκευής.
Έτσι ο peer επιστρέφει στην επόμενη επανεκκίνηση, και επιστρέφει με τα αρχικά επιτρεπόμενα προθέματά του. Ό,τι δρομολογείται μέσα από αυτόν δημιουργείται επίσης ξανά. Μια υποτιθέμενα ανακλημένη ταυτότητα μπορεί επομένως να φτάσει στους πρώην προορισμούς της μετά από επαναφόρτωση. Τίποτα στην έξοδο χρόνου εκτέλεσης δεν είχε προειδοποιήσει κανέναν.
Βρείτε τον συγγραφέα πριν επεξεργαστείτε αρχείο
Η διεπαφή έχει ιδιοκτήτη. Μπορεί να είναι το wg-quick που διαβάζει αρχείο, το NetworkManager που εφαρμόζει προφίλ, η δική του διαμόρφωση διεπαφής του δρομολογητή ή ένα σημείο εισόδου container που ξαναδημιουργεί τη διεπαφή κατά την εκκίνηση. Η επεξεργασία αρχείου που ο ιδιοκτήτης δεν διαβάζει ποτέ δεν παράγει καμία μόνιμη αλλαγή.
Ξεκινήστε από τη διεπαφή που εκτελείται και προσδιορίστε τα δημόσια κλειδιά, αφού τα ονόματα και οι διευθύνσεις είναι ασθενέστερα αναγνωριστικά από το ίδιο το κλειδί. Έπειτα συγκρίνετε αυτή τη λίστα με την αποθηκευμένη διαμόρφωση που διαβάζει πραγματικά ο ιδιοκτήτης.
wg show wg0 peers
wg show wg0 allowed-ips
systemctl status wg-quick@wg0 --no-pager
ls -l /etc/wireguard
Μια ζωντανή διεπαφή της οποίας η λίστα peer και το περιεχόμενο του αρχείου διαφωνούν είναι ολόκληρη η διάγνωση. Η αποθηκευμένη διαμόρφωση κερδίζει κατά την εκκίνηση και η κατάσταση χρόνου εκτέλεσης χάνει. Συγκρίνετε τις δύο πριν αλλάξετε οποιαδήποτε.
Η παγίδα του SaveConfig
Το wg-quick προσθέτει μια πτυχή που πιάνει όσους επεξεργάζονται αρχεία με το χέρι. Με ενεργό το SaveConfig, η τεκμηριωμένη συμπεριφορά του κατά τον τερματισμό γράφει την τρέχουσα κατάσταση χρόνου εκτέλεσης πάνω από το αρχείο διαμόρφωσης.
Αυτό αντιστρέφει τη συνήθη κατεύθυνση της μονιμότητας. Αφαιρείτε έναν peer από το αρχείο και μετά η υπηρεσία σταματά. Η κατάσταση που εκτελείται γράφεται πάνω από την επεξεργασία σας και επαναφέρει τον peer που μόλις διαγράψατε.
Γι' αυτό η σειρά μετράει: επεξεργαστείτε το αρχείο με τη διεπαφή κάτω, ή απενεργοποιήστε το SaveConfig πριν την επεξεργασία, έπειτα ανεβάστε ξανά τη διεπαφή και επιβεβαιώστε τι φορτώθηκε. Μια χειροκίνητη επεξεργασία με τη διεπαφή πάνω είναι κούρσα με την εγγραφή τερματισμού.
Αλλάξτε και τις δύο καταστάσεις και επαναφορτώστε
Στον χρόνο εκτέλεσης, αφαιρέστε τον peer με το κλειδί του. Στην αποθηκευμένη διαμόρφωση, αφαιρέστε το ίδιο μπλοκ μέσα από την υποστηριζόμενη λειτουργία του ιδιοκτήτη, αντί να επεξεργάζεστε γύρω του.
Έπειτα εξετάστε τι μετέφερε ο peer. Ένα δρομολογημένο δίκτυο που ανήκε στην ανακλημένη ταυτότητα πρέπει να ανατεθεί σκόπιμα αλλού ή να αφαιρεθεί, όχι να κληρονομηθεί σιωπηρά από όποιον peer επεξεργαστεί στη συνέχεια.
Κρατήστε ανοιχτή μια διαδρομή ανάκτησης αν η πύλη μεταφέρει και τη διαχειριστική σας πρόσβαση. Μια επανεκκίνηση που αφαιρεί τον λάθος peer είναι διακοπή που προκαλέσατε μόνοι σας. Το ίδιο ισχύει για επανεκκίνηση που αφαιρεί τη λάθος διαδρομή.
Πώς μοιάζει ένα επιτυχημένο τεστ
Επαναφορτώστε ή επανεκκινήστε την υπηρεσία και μετά διαβάστε ξανά τη λίστα peer. Το παλιό κλειδί πρέπει να λείπει και οι peer που θέλατε να κρατήσετε πρέπει να είναι ακόμη παρόντες και λειτουργικοί.
wg show wg0 peers
wg show wg0 allowed-ips
sudo wg-quick down wg0 && sudo wg-quick up wg0
wg show wg0 peers
Όπου το επιτρέπει η κατάσταση, επιβεβαιώστε ότι η παλιά ταυτότητα δεν φτάνει πια στους πρώην πόρους της. Μια τακτοποιημένη λίστα διεπαφής πριν από επανεκκίνηση είναι το μισό τεστ. Το άλλο μισό είναι τι μπορεί να κάνει η ταυτότητα μετά.
Αν κάποιος διαχειριστής συνεχίζει να επαναφέρει τον peer, σταματήστε να επαναλαμβάνετε την αφαίρεση χαμηλού επιπέδου. Διορθώστε το απόθεμα που διαβάζει αυτός ο συγγραφέας, γιατί μέχρι τότε κάθε επανεκκίνηση είναι άλλη μια πρόσκληση να εμφανιστεί ξανά η ταυτότητα.