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

Ένα socket, ένας κάτοχος

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

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

What you needMechanism that fitsWhat it cannot do
Periodic list of connected clientsStatus file written on an intervalDeliver events as they happen
Interactive prompts and session controlThe single management connectionServe two controllers at once
Multiple consumers of eitherOne owner process that fans outExist without you writing it

Αποφασίστε ποιο στοιχείο κατέχει τον έλεγχο

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

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

Χρησιμοποιήστε στιγμιότυπα κατάστασης για τους συλλέκτες

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

status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix

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

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

Η διανομή είναι σχεδιασμός, όχι λειτουργία

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

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

Αντιμετωπίστε το socket ως προνόμιο, όχι ως μετρικές

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

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

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