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

Πρόκειται για αλλαγή σε υπηρεσία που λειτουργεί, γι’ αυτό αντιμετωπίστε την ως επιχειρησιακή εργασία: πρώτα απογραφή, εφαρμογή μέσω του κανονικού κύκλου ζωής, επαλήθευση με νέο πελάτη και έτοιμη επαναφορά.

Ξεκινήστε από το υποδίκτυο που έχετε ήδη

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

grep -nE '^(topology|server|ifconfig-pool|max-clients|client-config-dir)' /etc/openvpn/server/lab.conf
ip -4 addr show tun0

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

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

Προσθέστε nopool και δηλώστε το εύρος

Η βοηθητική λέξη-κλειδί δέχεται nopool, που διατηρεί τη διαμόρφωση του υποδικτύου και καταστέλλει την αυτόματη δυναμική δεξαμενή, όπως περιγράφει το εγχειρίδιο του OpenVPN 2.6. Η ρητή γραμμή ifconfig-pool παρέχει έπειτα το συμπεριληπτικό εύρος που σκοπεύετε, και η μάσκα δικτύου της ταιριάζει με το υποδίκτυο. Και οι δύο γραμμές ανήκουν στο ίδιο μπλοκ διακομιστή, γιατί μια δεξαμενή χωρίς το υποδίκτυό της δεν έχει νόημα. Η σειρά μεταξύ τους μετράει μόνο για αναγνωσιμότητα, αφού ο βοηθός αναπτύσσει το ζεύγος όταν ξεκινά η υπηρεσία.

topology subnet
server 10.70.0.0 255.255.255.0 nopool
ifconfig-pool 10.70.0.50 10.70.0.120 255.255.255.0

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

Το μέγεθος του εύρους και η ταυτοχρονία είναι χωριστά όρια. Εκατό διευθύνσεις δεν σημαίνουν εκατό ταυτόχρονους πελάτες αν το max-clients λέει κάτι άλλο, και μια δεξαμενή μεγαλύτερη από το όριο ταυτοχρονίας είναι φυσιολογική και όχι σπατάλη. Το σημαντικό είναι τα δύο όρια να επιλέγονται συνειδητά και να μην κληρονομούνται από μια προεπιλογή.

Κρατήστε τις σταθερές αναθέσεις έξω από το δυναμικό εύρος

Ένα ifconfig-push ειδικά για πελάτη είναι διαφορετικός μηχανισμός από την κατανομή δεξαμενής και πρέπει να χρησιμοποιεί παραμέτρους κατάλληλες για την ενεργή τοπολογία. Στη λειτουργία υποδικτύου πρόκειται για μία διεύθυνση και μάσκα δικτύου· η μεταφορά ενός ζεύγους net30 επειδή εμφανίστηκε σε παλιό παράδειγμα είναι συχνό λάθος.

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

Έπειτα ελέγξτε τις διαδρομές που εξαρτώνται από διευθύνσεις. Μια διαδρομή που ωθείται στους πελάτες, ένας κανόνας τείχους προστασίας που επιτρέπει ένα υποδίκτυο ή ένας έλεγχος παρακολούθησης που περιμένει συγκεκριμένο κεντρικό υπολογιστή μπορούν όλα να προϋποθέτουν το παλιό εύρος. Η αλλαγή της δεξαμενής χωρίς ανάγνωσή τους μεταφέρει την αποτυχία σε σημείο που φαίνεται άσχετο.

Εφαρμόστε μέσω του κύκλου ζωής και μετά επαληθεύστε

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

systemctl restart openvpn-server@lab
journalctl -u openvpn-server@lab -n 30 --no-pager
# on a fresh client
ip -4 addr show tun0

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

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

Επαναφορά αλλαγής εύρους

Κρατήστε τις προηγούμενες τρεις γραμμές στο αρχείο αλλαγών σας, όχι μόνο το προηγούμενο αρχείο. Η επαναφορά τους και η επανεκκίνηση επιστρέφουν την κατανομή στην παλιά συμπεριφορά, και οι πελάτες που επανασυνδέονται μετά θα λαμβάνουν διευθύνσεις από αυτήν.

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

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

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