Η εκ νέου ανάθεση μιας διεύθυνσης παίρνει ένα λεπτό. Η εβδομάδα που ακολουθεί είναι το σημείο όπου σπάει η μετακίνηση, και σπάνια εκεί που υποδεικνύει η κονσόλα του παρόχου. Μια νέα δημόσια IP αναφέρεται σε τέσσερα σημεία: το socket όπου ακούει ο δαίμονας, το άγκιστρο εμπιστοσύνης που επαληθεύουν οι πελάτες, κάθε κανόνας που ονομάζει την παλιά διεύθυνση, και η εγγραφή DNS που τα συνδέει. Δύο μετακινήσεις φαίνονται ίδιες από έναν πίνακα ελέγχου αλλά συμπεριφέρονται τελείως διαφορετικά: η εκ νέου ανάθεση της διεύθυνσης στο μηχάνημα που τρέχετε, ή η ανάπτυξη δεύτερου endpoint και η μεταφορά πελατών σε αυτό. Οι έλεγχοι παρακάτω βάζουν πρώτα τις φθηνές αποτυχίες, και κάθε ενότητα δηλώνει σε ποια μετακίνηση ισχύει.

Η αντικατάσταση επί τόπου και η παράλληλη μετάβαση είναι διαφορετικές δουλειές

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

Ένα παράλληλο endpoint είναι δεύτερος κεντρικός υπολογιστής που κάνει την ίδια δουλειά. Χτίστε το, δοκιμάστε το με ένα προφίλ, και αφήστε το παλιό να απαντά μέχρι το νέο να αποδειχθεί σε πραγματική διαδρομή. Το τίμημα είναι κατάσταση. Χωρίς κοινές εγγραφές peer, ανακλήσεις και καταγραφή, έχετε δύο δίκτυα που τυχαίνει να μοιράζονται ένα όνομα.

QuestionIn-place swapParallel endpoint
Rollback in one step?Only if you can get the old address backPoint DNS back; old host still up
Blast radiusEvery client at onceOnly the clients you moved
Best whenThe address is yours to reassignThe old address is gone for good

Βρείτε κάθε σημείο όπου είναι γραμμένη η παλιά διεύθυνση

Ξεκινήστε με ένα πέρασμα κειμένου, γιατί τα αρχεία ρυθμίσεων είναι το εύκολο μισό. Ερευνήστε τη ρύθμιση του δαίμονα, θραύσματα τείχους προστασίας, στόχους παρακολούθησης και κάθε παραγόμενο πακέτο πελάτη στον δίσκο. Συμπεριλάβετε τη διεύθυνση IPv6 αν δημοσιεύετε μία· μια μετακίνηση που ακολουθεί μόνο την εγγραφή A αφήνει πελάτες διπλής στοίβας στην παλιά διαδρομή.

OLD=203.0.113.10
grep -RIn -- "$OLD" /etc /root
ss -lunpt | grep -F "$OLD"
nft list ruleset | grep -F "$OLD"
iptables-save | grep -F "$OLD"
wg show all endpoints

Μετά περάστε τον πυρήνα, γιατί ένα σύστημα σε λειτουργία κρατά τη διεύθυνση σε σημεία που κανένα αρχείο δεν αναφέρει. Ένας στατικός κανόνας NAT πηγής, μια εγγραφή ipset, μια διεύθυνση bind και μια εγγραφή conntrack επιβιώνουν της αλλαγής ρύθμισης που τις αφαίρεσε, και μερικές επιβιώνουν και μιας επανεκκίνησης γιατί επέστρεψαν από αποθηκευμένο σύνολο κανόνων. Ένα επίπεδο ψηλότερα, οι ομάδες ασφαλείας του παρόχου, οι στόχοι του balancer φόρτου και οι έλεγχοι παρακολούθησης δεν βρίσκονται καθόλου στο σύστημα αρχείων σας.

Γράψτε την απογραφή πριν αλλάξετε οτιδήποτε· λειτουργεί και ως σενάριο επαναφοράς.

Οι πελάτες με όνομα κεντρικού υπολογιστή ανακάμπτουν· οι πελάτες με κυριολεκτική IP σωπαίνουν

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

Αν το endpoint είναι κυριολεκτική διεύθυνση, τίποτα δεν επιλύεται ξανά και τίποτα δεν καταγράφει παράπονο. Το WireGuard αποθηκεύει μια επιλυμένη διεύθυνση socket: το Endpoint = vpn.example.net:51820 γίνεται IP τη στιγμή που τρέχει το wg-quick up και μένει αυτή η IP μέχρι να την αλλάξετε. Το OpenVPN είναι πιο ανεκτικό: επιλύει το όνομα κεντρικού υπολογιστή remote κατά τη σύνδεση και, με το resolv-retry infinite, δοκιμάζει ξανά DNS στην επανασύνδεση. Με κυριολεκτική IP, και τα δύο συνεχίζουν να καλούν μηχάνημα που δεν υπάρχει πια.

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

Η εμπιστοσύνη δεν μετακινείται με τη διεύθυνση

Το WireGuard χωρίζει την ταυτότητα από τη δυνατότητα πρόσβασης, που κάνει τη μετακίνηση διεύθυνσης σχεδόν δωρεάν. Οι peers αναγνωρίζονται με δημόσιο κλειδί, και το endpoint είναι μόνο το σημείο όπου πηγαίνουν τώρα τα πακέτα· ένας κόμβος ενημερώνει το endpoint ενός peer από τη διεύθυνση προέλευσης του πιο πρόσφατου πιστοποιημένου πακέτου. Ένας αδρανής peer χρειάζεται πάντως λόγο για να μιλήσει με το νέο σημείο, και μαθαίνει τη διεύθυνση μόνο όταν η συνεδρία του γεράσει και οι επαναλήψεις handshake αποτύχουν σε ορατό σημείο. Ο γρήγορος οδηγός του WireGuard καλύπτει το πεδίο endpoint.

Οι διακομιστές με TLS είναι η αντίθετη περίπτωση. Το πιστοποιητικό είναι δεσμευμένο σε ένα όνομα, και ένας πελάτης που καλεί διεύθυνση συγκρίνει αυτό που κάλεσε με τα εναλλακτικά ονόματα θέματος. Συνδεθείτε με IP σε πιστοποιητικό που φέρει μόνο DNS SAN και η επαλήθευση αποτυγχάνει: το όνομα που χρησιμοποίησε ο πελάτης δεν είναι στο πιστοποιητικό. Η επανέκδοση με IP SAN διορθώνει αυτή τη μία σύνδεση και κάνει την επόμενη μετακίνηση χειρότερη. Το να κρατήσετε όνομα κεντρικού υπολογιστή στο προφίλ και να αφήσετε το verify-x509-name στη θέση του κρατά τον έλεγχο αυστηρό όσο η διεύθυνση από κάτω αλλάζει.

Μετά ελέγξτε σε τι είναι δεσμευμένος ο δαίμονας· ένα socket καρφωμένο στην παλιά διεύθυνση αποτυγχάνει σιωπηλά. Ένας διακομιστής OpenVPN που ξεκίνησε με local 203.0.113.10 αρνείται να σηκωθεί μόλις χαθεί αυτή η διεύθυνση, ενώ ένας ακροατής στο 0.0.0.0 ακολουθεί την αλλαγή δωρεάν. Το NAT χωρίζεται με τον ίδιο τρόπο: το MASQUERADE ακολουθεί όποια διεύθυνση έχει τώρα το μηχάνημα, και ένα στατικό SNAT --to-source 203.0.113.10 συνεχίζει να ξαναγράφει σε διεύθυνση που δεν κατέχετε πια, οπότε η επιστρεφόμενη κίνηση εξαφανίζεται. Αν η νέα διεύθυνση έρχεται με διαφορετική πύλη upstream, ελέγξτε το rp_filter: το φιλτράρισμα αντίστροφης διαδρομής απορρίπτει επιστρεφόμενη κίνηση που φτάνει σε διεπαφή που ο πυρήνας δεν περίμενε.

Σειρά μετάβασης και τα στοιχεία ότι δούλεψε

Χαμηλώστε το TTL μια μέρα νωρίτερα, σηκώστε τον νέο ακροατή και αποδείξτε τον με προφίλ που έχετε μόνο εσείς. Μια δοκιμή από μέσα στο ίδιο δίκτυο δεν αποδεικνύει σχεδόν τίποτα, γι' αυτό χρησιμοποιήστε τηλέφωνο σε κινητό δίκτυο και δοκιμάστε κάτι που η σήραγγα πρέπει να μεταφέρει αντί για ping στο endpoint.

Παρακολουθήστε και τις δύο διευθύνσεις σε όλο το παράθυρο. Το wg show all latest-handshakes στον νέο κόμβο, ή το αρχείο κατάστασης του OpenVPN, σας λέει πόσοι peers μετακινήθηκαν πραγματικά. Όταν το νέο endpoint έχει τους peers που περιμένετε και το παλιό έχει μόνο καθυστερημένους, αποσύρετε τον παλιό ακροατή, αφαιρέστε τον παλιό κανόνα NAT και βγάλτε τη διεύθυνση από το τείχος προστασίας του παρόχου. Η αφαίρεση του παλιού ακροατή είναι το βήμα που παραλείπεται, και κλείνει το κενό όπου ένα παλιό προφίλ φτάνει ακόμη στο παλιό δίκτυο.

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

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