Πώς να μετράτε τον χρόνο λειτουργίας του πελάτη OpenVPN με τα άγκιστρα up και down
Το OpenVPN δεν έχει μετρητή χρόνου λειτουργίας. Αποθηκεύστε μια σφραγίδα epoch από το άγκιστρο up, σβήστε την στο down, αφαιρέστε την και κρατήστε την έντιμη σε επανεκκινήσεις και στιγμιότυπα.
Ένας πίνακας ελέγχου ζητά έναν αριθμό για το πόση ώρα είναι ενεργή η σύνδεση, και OpenVPN δεν τον παρέχει. Ο πελάτης ξέρει πότε ανέβηκε η σήραγγά του, αλλά μόνο αν κάτι καταγράψει εκείνη τη στιγμή πριν χαθεί η κατάσταση της συνεδρίας. Το υποστηριζόμενο σημείο είναι το άγκιστρο up, και η τιμή που αξίζει να αποθηκευτεί είναι ένα ακατέργαστο δευτερόλεπτο epoch και όχι μια μορφοποιημένη συμβολοσειρά. Ό,τι ακολουθεί είναι αριθμητική, συν μερικοί κανόνες σειράς που αποφασίζουν αν ο αριθμός μένει έντιμος.
Επιβεβαιώστε ότι τα άγκιστρα εκτελούνται πραγματικά
Αποδείξτε ότι το άγκιστρο ενεργοποιείται πριν σχεδιάσετε οτιδήποτε γύρω του. Μια ελάχιστη διαμόρφωση πελάτη χρειάζεται script-security 2 συν ρητές διαδρομές up και down· χωρίς τη γραμμή ασφαλείας το OpenVPN αρνείται να εκτελέσει το σενάριο και το λέει καθαρά. Προσθέστε up-restart και down-pre ταυτόχρονα ώστε οι διαδρομές επανεκκίνησης και τερματισμού να συμπεριφέρονται προβλέψιμα.
Κάντε την πρώτη έκδοση του άγκιστρου να προσαρτά το περιβάλλον του σε ένα αρχείο και να μην κάνει τίποτε άλλο. Έτσι βλέπετε τα ονόματα μεταβλητών που εξάγει πραγματικά η κατασκευή σας, όπως dev και script_type, αντί για εκείνα που θυμάστε από άλλη έκδοση. Εκτελέστε μία σύνδεση και μία αποσύνδεση και μετά διαβάστε το αρχείο. Αν δεν εμφανιστεί τίποτε, σταματήστε εδώ, γιατί ένας σχεδιασμός χρονικής σφραγίδας πάνω σε άγκιστρο που δεν εκτελείται ποτέ θα μοιάζει με αποτυχία παρακολούθησης για εβδομάδες.
Ελέγξτε ως ποιος χρήστης εκτελείται το άγκιστρο. Με user και group ορισμένα, το OpenVPN αφήνει προνόμια πριν εκτελέσει σενάρια, οπότε ένας κατάλογος στον οποίο μπορεί να γράψει το root μπορεί να είναι κλειστός για το άγκιστρο. Διαλέξτε τη διαδρομή από την οπτική της υπηρεσίας και όχι του κελύφους σας.
Καταγράψτε μία τιμή epoch και σβήστε την σκόπιμα
Το άγκιστρο up χρειάζεται μία γραμμή, date +%s > /run/openvpn-client.started, με τη διαδρομή προσαρμοσμένη ανά στιγμιότυπο. Μια τιμή epoch αποφεύγει αργότερα ερωτήματα γλώσσας, ζώνης ώρας και μορφής, και είναι ο ίδιος αριθμός που ένας πράκτορας παρακολούθησης μπορεί να συγκρίνει με το δικό του ρολόι.
Το σβήσιμο έχει την ίδια σημασία με την εγγραφή. Το άγκιστρο down πρέπει να αδειάσει ή να αφαιρέσει το αρχείο, και το down-pre το κάνει πριν κλείσει η διεπαφή, κάτι που αφαιρεί το παράθυρο όπου το αρχείο περιγράφει μια σήραγγα που έχει ήδη φύγει. up-restart έπειτα ανανεώνει τη σφραγίδα σε εσωτερική επανεκκίνηση αντί να αφήνει την αρχική τιμή στη θέση της. Χωρίς αυτό το ζεύγος, επανεκκίνηση μετά από χρονικό όριο ping παράγει έναν αριθμό που συνεχίζει να ανεβαίνει όσο η σήραγγα επανιδρύεται.
Διαλέξτε μια θέση με τη σωστή διάρκεια ζωής. Ένα αρχείο κάτω από /run εξαφανίζεται στην επανεκκίνηση, κάτι που ταιριάζει με την πραγματικότητα, ενώ ένα αρχείο κάτω από /tmp μπορεί να καθαριστεί απρόβλεπτα και ένα στον κατάλογο διαμόρφωσης επιβιώνει με τρόπο που παραπλανά. Ορίστε δικαιώματα ώστε μόνο ο χρήστης της υπηρεσίας και ο αναγνώστης παρακολούθησης να μπορούν να το διαβάσουν.
Υπολογίστε τον χρόνο λειτουργίας χωρίς να εμπιστεύεστε γραμμές καταγραφής
Διαβάστε το αποθηκευμένο δευτερόλεπτο, διαβάστε το τρέχον δευτερόλεπτο, αφαιρέστε. Όταν το αρχείο λείπει ή είναι κενό, η έντιμη απάντηση είναι ότι καμία σήραγγα δεν είναι ενεργή, όχι ότι ο χρόνος λειτουργίας είναι μηδέν, γιατί αυτές οι δύο καταστάσεις πρέπει να σηκώνουν διαφορετικούς συναγερμούς. Κρατήστε ακατέργαστα δευτερόλεπτα στο φορτίο παρακολούθησης και μορφοποιήστε ημέρες και ώρες στο επίπεδο εμφάνισης. Ένας μορφοποιητής που στρογγυλοποιεί μέσα στον εξαγωγέα πετά ακρίβεια που κάποιος θα θέλει κατά τη διάρκεια ενός περιστατικού.
Η ανάλυση χρονικών σφραγίδων καταγραφής είναι η δελεαστική συντόμευση, και αποτυγχάνει με τρεις τρόπους: η μορφή ακολουθεί όποια επιλογή έχει οριστεί, η περιστροφή αφαιρεί το ιστορικό, και οι επανασυνδέσεις εμφανίζονται ως ξεχωριστές συνεδρίες αντί για μία συνεχή σήραγγα. Το άγκιστρο καταγράφει το συμβάν μία φορά, τη στιγμή που συμβαίνει.
Όταν ο έλεγχος εκτελείται σε άλλον υπολογιστή, στείλτε τη χρονική σφραγίδα και όχι τη διάρκεια ώστε ο αναγνώστης να εφαρμόσει το δικό του ρολόι. Ένα μικρό αρνητικό αποτέλεσμα τότε διαβάζεται ως απόκλιση ρολογιού και όχι ως χαλασμένο άγκιστρο.
Καλύψτε επανασυνδέσεις, επανεκκινήσεις και πολλά στιγμιότυπα
Δύο σήραγγες σε έναν υπολογιστή χρειάζονται δύο αρχεία, κλειδωμένα με το όνομα στιγμιότυπου που η υπηρεσία χρησιμοποιεί ήδη. Μια κοινή διαδρομή σημαίνει ότι η πιο πρόσφατη σύνδεση αντικαθιστά την ώρα έναρξης κάθε προφίλ, και το σύμπτωμα είναι ένας αριθμός που πηδά προς τα πίσω όταν ξεκινά μια δεύτερη σήραγγα.
Η συμπεριφορά επανασύνδεσης αξίζει δικό της τεστ, γιατί εκεί ένα εύλογο σχέδιο αναφέρει ήσυχα το λάθος. Επιβάλετε επανεκκίνηση ρίχνοντας τον ομότιμο ή στέλνοντας σήμα στη διεργασία, και μετά συγκρίνετε την κατάσταση της διεπαφής με το αρχείο. Η χρονική σφραγίδα πρέπει να προχωρήσει μπροστά τη στιγμή που επιστρέφει η σήραγγα.
Στην πλευρά του διακομιστή, το αρχείο κατάστασης φέρει μια τιμή connected-since ανά πελάτη, που απαντά σε άλλο ερώτημα: πότε ο διακομιστής είδε τελευταία φορά εκείνον τον ομότιμο. Χρησιμοποιήστε την για διασταύρωση και όχι ως αντικατάσταση, αφού εξαφανίζεται μαζί με τη συνεδρία που περιγράφει. Καμία από τις δύο μετρήσεις δεν λέει τίποτε για την υγεία της εφαρμογής πίσω από τη σήραγγα.
Εκτελέστε τους τρεις ελέγχους που πιάνουν σφάλματα σειράς
Δοκιμάστε μια κανονική σύνδεση, μια εξαναγκασμένη επανασύνδεση και ένα καθαρό σταμάτημα, διαβάζοντας τη λίστα διεπαφών και το αρχείο μαζί μετά από καθένα. Μια σφραγίδα που παραμένει μετά από καθαρό σταμάτημα, ή ένα αρχείο που βεβαιώνει σήραγγα την οποία η λίστα διεπαφών δεν περιέχει, δείχνει ευθέως τη σειρά των αγκίστρων. Εκτελέστε τους ελέγχους ως χρήστης της υπηρεσίας και με τις διαδρομές της υπηρεσίας, γιατί ένα κέλυφος root μπορεί να δει άλλο αρχείο και να δώσει μια σίγουρη λάθος απάντηση. Μετά αφήστε έναν αργό ερωτητή να διαβάζει το αρχείο και επιβεβαιώστε ότι δεν γράφει ποτέ σε αυτό.
Μια δημοσκόπηση κάθε εξήντα δευτερόλεπτα καλύπτει την ειδοποίηση, και κανένα άγκιστρο δεν πρέπει να βασίζεται στο ότι αυτός ο ερωτητής είναι ζωντανός. Κρατήστε τις δύο ευθύνες χωριστά και ο αριθμός μένει αξιόπιστος όταν οποιαδήποτε πλευρά αναπτυχθεί ξανά.