Γιατί μια υπενθύμιση VPN 23 ωρών ενεργοποιείται για τη λάθος συνεδρία
Μια ειδοποίηση 23 ωρών πρέπει να ακολουθεί μία συνεδρία, όχι τον λογαριασμό. Δέστε το χρονόμετρο στη σύνδεση που ξεκίνησε και αντιμετωπίστε την αναστολή και την επανασύνδεση ως ξεχωριστές περιπτώσεις.
Η ειδοποίηση εμφανίστηκε είκοσι λεπτά μετά τη σύνδεση. Ο μετρητής από κάτω έτρεχε από το προηγούμενο πρωί, ή από την τελευταία αυθεντικοποίηση του λογαριασμού, και τίποτα στην προειδοποίηση δεν έλεγε ποιο από τα δύο. Αυτό είναι το σύμπτωμα: μια υπενθύμιση δεμένη με κάτι άλλο, όχι με τη σύνδεση μπροστά σας.
Η διόρθωση δεν είναι μια καλύτερη προειδοποίηση. Είναι να αποφασίσετε ποιο ρολόι εννοεί η απαίτηση και μετά να δέσετε το χρονόμετρο σε ένα αντικείμενο που υπάρχει σε αυτό το ρολόι.
Τι ενεργοποιήθηκε και τι μετρούσε
Τρεις πιθανές πηγές παράγουν το ίδιο μήνυμα. Ένας κανόνας ημερολογίου τρέχει σε σταθερή τοπική ώρα και δεν ξέρει τίποτα για σήραγγες. Ένας μετρητής στον πελάτη συσσωρεύεται όσο οποιαδήποτε σύνδεση είναι ενεργή και επιβιώνει από επανασυνδέσεις. Μια πολιτική πύλης λήγει τη συνεδρία στην πλευρά του διακομιστή και στέλνει πρώτα μια προειδοποίηση.
Μόνο οι δύο τελευταίες αφορούν μια συνεδρία, και ούτε αυτές συμφωνούν. Ο μετρητής του πελάτη μετρά τι παρατήρησε η τοπική διεργασία· η πύλη μετρά τι αυθεντικοποίησε και καταλόγισε. Μια αναστολή, μια αλλαγή δικτύου ή μια επανεκκίνηση του παρατηρητή μπορούν να τα χωρίσουν κατά ώρες, και γι' αυτό η προειδοποίηση και η επιβεβλημένη λήξη αποκλίνουν.
Τρία ρολόγια πίσω από μία απαίτηση
Ξεκινήστε γράφοντας την πρόταση που θέλετε πραγματικά. Το να προειδοποιήσετε πριν η πύλη τερματίσει αυτή τη σύνδεση δεν είναι η ίδια απαίτηση με το να υπενθυμίσετε μετά από μια μέρα συνδεδεμένου χρόνου. Ούτε είναι το ίδιο με το να αναφέρετε ότι αυτή η συνεδρία είναι ενεργή εδώ και 23 ώρες. Κάθε εκδοχή ονομάζει διαφορετικό γεγονός, και διαφορετικό στοιχείο πρέπει να απαντήσει.
Μετά ελέγξτε αν τα δεδομένα υπάρχουν. Μια τοπική χρονοσφραγίδα έναρξης σας δίνει την ηλικία της συνεδρίας χωρίς εξάρτηση από τον διακομιστή. Μια πολιτική πύλης σας δίνει τον υπολειπόμενο χρόνο ζωής, αλλά μόνο αν η πύλη τον εκθέτει. Μια αναφορά χρήσης σας δίνει τη διάρκεια εκ των υστέρων, και αυτό δεν μπορεί να οδηγήσει εκ των προτέρων ειδοποίηση.
Δέστε το χρονόμετρο στη συνεδρία, όχι στον λογαριασμό
Διαλέξτε πρώτα το αντικείμενο. Ένας λογαριασμός μπορεί να κρατά πολλές συσκευές και πολλές ταυτόχρονες συνεδρίες, οπότε μια υπενθύμιση με κλειδί το όνομα χρήστη δεν μπορεί να πει ποια σύνδεση έφτασε στην ηλικία. Δέστε την στο προφίλ μαζί με εκείνη την ενεργοποίηση, και ακυρώστε την εκκρεμή ειδοποίηση όταν τελειώσει η ενεργοποίηση.
| Evidence you can read | What it establishes | Where it misleads |
|---|---|---|
| Connection state changes to active | A session started now | Does not carry the gateway's own session identifier |
| Duration reported at disconnect | Total service time for that session | Arrives too late for any advance notice |
| Interim usage update | Time accounted up to that update | Staleness equals the update interval |
| Local timestamp taken at activation | Age of your observation | Resets whenever the observer restarts |
Αυτός ο πίνακας είναι συμβόλαιο για τον δικό σας ειδοποιητή, όχι περιγραφή του API επιστροφής κλήσης οποιουδήποτε πελάτη. Ό,τι τεκμηριώνει το εγκατεστημένο προϊόν για την κατάσταση σύνδεσης είναι η πηγή στην οποία πρέπει να δεθείτε· όπου εκθέτει μόνο γεγονότα αυθεντικοποίησης, πείτε το δυνατά και δεχτείτε την πιο χονδροειδή συμπεριφορά αντί να συμπεράνετε μια συνεδρία.
Δοκιμάστε το με σύντομο κατώφλι
Μην αποσφαλματώνετε ποτέ ένα χρονόμετρο μιας ημέρας με αναμονή μιας ημέρας. Προσθέστε ένα ρυθμιζόμενο κατώφλι, βάλτε το στα τριάντα δευτερόλεπτα και εκτελέστε τέσσερις μεταβάσεις με σειρά: σύνδεση, αναμονή, αποσύνδεση, επανασύνδεση. Κάθε μετάβαση πρέπει να παράγει ακριβώς μία αλλαγή κατάστασης, και η επανασύνδεση πρέπει να προγραμματίσει νέα προθεσμία αντί να κληρονομήσει την παλιά.
# current connection state and profile identity
nmcli -f GENERAL.STATE,GENERAL.CONNECTION connection show work
# the notifier unit you wrote: does it restart the deadline or resume it?
journalctl --user -u vpn-timer.service --since "-5 min" -o cat
Κοιτάξτε τις χρονοσφραγίδες, όχι τη διατύπωση. Μια ειδοποίηση που φτάνει με την ώρα έναρξης της προηγούμενης συνεδρίας έδεσε το λάθος αντικείμενο, και μια ειδοποίηση που φτάνει δύο φορές για μία προθεσμία σημαίνει ότι η σημαία αποστολής δεν αποθηκεύτηκε ποτέ.
Αναστολή, επανασύνδεση και χαμένη παράδοση
Η αναστολή σπάει και τα δύο αφελή σχέδια. Μια μονότονη αντίστροφη μέτρηση σταματά όσο ο υπολογιστής κοιμάται, μια προθεσμία με ρολόι τοίχου συνεχίζει να κινείται, και ένα χρονόμετρο που ενεργοποιείται κατά την αναστολή παραδίδεται αργά ή καθόλου. Αποφασίστε ποια συμπεριφορά χρειάζεται η απαίτησή σας, μετά βάλτε τον υπολογιστή σε αναστολή πέρα από το κατώφλι και επιβεβαιώστε το.
Η παράδοση αξίζει την ίδια φροντίδα. Αν η ειδοποίηση δεν μπορεί να εμφανιστεί, βάλτε την σε ουρά και ελέγξτε ξανά ότι η συνεδρία στόχος υπάρχει ακόμα πριν την εμφανίσετε τελικά· αλλιώς ο χρήστης ειδοποιείται για μια σύνδεση που έχει ήδη τελειώσει. Η αναγκαστική αποσύνδεση και η ανανέωση διαπιστευτηρίων μένουν έξω από αυτή τη διαδρομή, γιατί μια υπενθύμιση που αλλάζει σιωπηλά την τύχη της σύνδεσης είναι απόφαση πολιτικής ντυμένη ως ειδοποίηση.