Μία διεύθυνση υπηρεσίας σε κάθε κόμβο OpenVPN: τι δεν κάνει
Κράτησε μια ιδιωτική /32 σε κάθε κόμβο, ώστε ο πελάτης να φτάνει στον διακομιστή που διάλεξε. Η διεύθυνση δεν κάνει μετάπτωση, δεν μετακινεί συνεδρίες και δεν διαλέγει υγιή κόμβο.
Ένας πελάτης συνδέεται σε έναν από πολλούς διακομιστές OpenVPN και μετά χρειάζεται μια μικρή υπηρεσία που τρέχει σε αυτόν τον κόμβο: μια σελίδα κατάστασης, ένα σημείο μέτρησης, έναν πράκτορα αντιγράφων. Το να δώσεις σε κάθε κόμβο την ίδια ιδιωτική διεύθυνση υπηρεσίας κάνει τη διαμόρφωση του πελάτη ίδια ανεξάρτητα από τον διακομιστή όπου προσγειώθηκε. Αυτή η ευκολία είναι πραγματική, και είναι επίσης εύκολο να υπερερμηνευτεί: η κοινή διεύθυνση λέει σε ποιον κόμβο έφτασες, όχι ότι κάτι είναι πλεονάζον.
Γιατί η ίδια διεύθυνση σε κάθε κόμβο δουλεύει
Κάθε κόμβος κατέχει τη διεύθυνση τοπικά και απαντά γι’ αυτήν, ώστε ένας πελάτης που τη φτάνει μέσα από τη σημερινή του σήραγγα παίρνει την υπηρεσία στο άλλο άκρο αυτής της σήραγγας. Τίποτα δεν συντονίζεται ανάμεσα στους κόμβους, και καμία κίνηση δεν περνά από τον έναν κόμβο στον άλλον.
Η διεύθυνση είναι μια τοπική ετικέτα, επαναλαμβανόμενη και όχι αντιγραμμένη. Κάθε κόμβος απαντά μόνο για τον εαυτό του, και κανένας τους δεν προωθεί κίνηση για τη διεύθυνση εκ μέρους άλλου κόμβου. Αυτό κρατά μία διαμόρφωση πελάτη έγκυρη όσο οι διακομιστές μένουν ανεξάρτητοι. Είναι επίσης ο λόγος που ο σχεδιασμός δεν χρειάζεται συντονισμό ανάμεσα στους κόμβους.
Γι’ αυτό η ίδια διαμόρφωση δουλεύει σε κάθε διακομιστή χωρίς πρωτόκολλο δρομολόγησης ανάμεσά τους. Είναι επίσης ο λόγος που ο σχεδιασμός δεν λέει τίποτα για την υγεία: η διεύθυνση υπάρχει σε έναν ανθυγιεινό κόμβο ακριβώς όπως και σε έναν υγιή, γιατί είναι δεσμευμένη στον ξενιστή και όχι στο ότι η υπηρεσία είναι χρήσιμη.
Ανάθεσέ την στο loopback, όχι στη σήραγγα
Το να βάλεις τη διεύθυνση σε μια διεπαφή loopback την αποσυνδέει από τη διάρκεια ζωής κάθε συσκευής σήραγγας, ώστε μια επανασύνδεση ή μια επαναφόρτωση διαμόρφωσης να μην την αφαιρεί. Η διεύθυνση υπάρχει όσο υπάρχει ο ξενιστής.
Μια διεύθυνση στο lo δεν είναι φίλτρο. Η υπηρεσία πρέπει ακόμα να ακούει σε αυτήν, και το τείχος προστασίας του ξενιστή εξακολουθεί να αξιολογεί την πραγματική εισερχόμενη διαδρομή, η οποία φτάνει στη διεπαφή της σήραγγας. Όποιος υποθέτει ότι loopback σημαίνει μόνο τοπικά καταλήγει είτε να μπλοκάρει νόμιμους πελάτες είτε να εκθέτει κάτι που δεν είχε σκοπό.
Κάνε την ανάθεση μόνιμη μέσα από τη δικτυακή διαμόρφωση του ξενιστή αντί να την ξαναπροσθέτεις από ένα hook. Ένα hook εγκατάστασης δεν θα εκτελεστεί σε κόμβο όπου δεν σηκώθηκε σήραγγα, και η διεύθυνση υπηρεσίας δεν πρέπει να εξαρτάται από τη δραστηριότητα της σήραγγας. Βάλε τη διεύθυνση στη διαμόρφωση διεπαφής που διαχειρίζεται η διανομή σου, μετά κάνε μία επανεκκίνηση και έλεγξέ την. Η επανεκκίνηση είναι το μόνο τεστ που επιβιώνει από μια μεταγενέστερη αλλαγή διαμόρφωσης.
ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev loΣπρώξε μία διαδρομή και εννοείς έναν προορισμό
Ο πελάτης χρειάζεται μια διαδρομή ξενιστή για τη διεύθυνση, που την προσφέρει ο διακομιστής με τον οποίο συνδέεται. Επειδή κάθε διακομιστής προσφέρει τον ίδιο προορισμό, το προφίλ δεν αλλάζει όταν ο πελάτης μετακινείται.
Έλεγξε τι εγκατέστησε ο πελάτης πριν κατηγορήσεις την υπηρεσία.
ip route get 10.250.0.1Για μια υπηρεσία HTTP, δώσε στη διεύθυνση ένα όνομα και ένα πιστοποιητικό για αυτό το όνομα. Η κοινή IP δεν είναι ταυτότητα, και δεν αφαιρεί την επαλήθευση TLS, ούτε δικαιολογεί να αντιγράψεις ένα ιδιωτικό κλειδί σε κάθε κόμβο. Ένα όνομα που επιλύεται στην κοινή διεύθυνση κρατά την ιστορία του πιστοποιητικού συνηθισμένη και σου επιτρέπει να κρατήσεις ταυτότητα ανά κόμβο αν τη χρειάζεσαι.
Τι δεν μπορεί να κάνει η κοινή διεύθυνση
Δεν παρέχει μετάπτωση. Αν ο επιλεγμένος κόμβος πεθάνει, η διεύθυνση πεθαίνει μαζί του, και ο πελάτης πρέπει να επανασυνδεθεί αλλού.
Δεν μεταφέρει μια ζωντανή συνεδρία TCP, γιατί μια νέα σύνδεση τερματίζεται σε άλλον ξενιστή που δεν γνωρίζει τον παλιό.
Δεν διαλέγει υγιή κόμβο, δεν μοιράζει φόρτο και δεν συγχρονίζει δεδομένα ανάμεσα σε κόμβους. Κάθε ένα από αυτά είναι ξεχωριστός μηχανισμός με δικές του αστοχίες, και το να προσποιείσαι ότι το κόλπο της διευθυνσιοδότησης τα καλύπτει είναι ο τρόπος που ένας απλός σχεδιασμός αποκτά ανεπάξια φήμη ανθεκτικότητας. Αν δύο σήραγγες είναι ενεργές ταυτόχρονα, η σημασία του προορισμού γίνεται αμφίσημη, οπότε κράτα ρητή την παραδοχή της μίας ενεργής σήραγγας.
Κράτα την ταυτότητα της υπηρεσίας με το όνομα
Γράψε τι σημαίνει η διεύθυνση: φτάνει την υπηρεσία στον κόμβο με τον οποίο ο πελάτης είναι συνδεδεμένος τώρα. Αυτή η μία πρόταση αποτρέπει το μεγαλύτερο μέρος της παρεξήγησης που προσελκύει αυτό το μοτίβο.
Μετά τεκμηρίωσε τα κομμάτια μαζί: τη διεύθυνση, τη διεπαφή όπου ζει, τη διαδρομή που σπρώχνει ο διακομιστής, και το όνομα και το πιστοποιητικό που παρουσιάζει η υπηρεσία. Τέσσερα μικρά γεγονότα που ένας μελλοντικός αναγνώστης μπορεί να επαληθεύσει, με τη σειρά που θα τα ελέγξει.
Αν η απαίτηση είναι σταθερός προορισμός για μια τοπική υπηρεσία κόμβου, το μοτίβο ταιριάζει και κοστίζει σχεδόν τίποτα.
Αν η απαίτηση είναι διαθεσιμότητα, ανέβα ένα επίπεδο: έναν εξισορροπητή φόρτου, ένα όνομα υπηρεσίας με ελέγχους υγείας ή ένα σύστημα ενορχήστρωσης που ξέρει ήδη πώς να αντικαταστήσει έναν κόμβο.
Το να το αποφασίσεις νωρίς κρατά την κοινή διεύθυνση αυτό που είναι, μια βολική ετικέτα, αντί για ένα εξάρτημα από το οποίο περιμένει κανείς σιωπηλά να κάνει δουλειά για την οποία δεν σχεδιάστηκε ποτέ.