ServerAliveInterval του SSH μέσω VPN: ποια πλευρά στέλνει τον έλεγχο;
Το ServerAliveInterval είναι χρονόμετρο της πλευράς πελάτη που μετρά αναπάντητους ελέγχους, όχι δευτερόλεπτα. Δείτε ποια πλευρά το στέλνει, γιατί κερδίζει η σειρά των μπλοκ Host και πώς να το επαληθεύσετε.
Οι περισσότερες συμβουλές για τη διατήρηση μιας συνεδρίας SSH σταματούν στο «προσθέστε ServerAliveInterval 30» και αφήνουν έξω τα χρήσιμα μέρη. Η λέξη-κλειδί είναι ένα χρονόμετρο στην πλευρά του πελάτη που ενεργοποιείται μόνο όταν το κανάλι είναι ήσυχο, μετρά αναπάντητους ελέγχους αντί για δευτερόλεπτα, και ζει σε ένα αρχείο όπου κερδίζει η πρώτη τιμή που ταιριάζει. Αν κάνετε λάθος σε αυτές τις τρεις ιδιότητες, μια υγιής συνεδρία VPN θα πέσει παρόλα αυτά, ενώ μια νεκρή θα μείνει κρεμασμένη.
Οι δύο κατευθύνσεις ανήκουν σε διαφορετικούς δαίμονες
Το ServerAliveInterval το διαβάζει ο πελάτης ssh σας. Το ClientAliveInterval το διαβάζει ο sshd στην απέναντι πλευρά και ελέγχει προς την αντίθετη κατεύθυνση, από τον διακομιστή προς τον πελάτη. Δεν είναι ψευδώνυμα και δεν συνεργάζονται, οπότε η ρύθμιση του ενός δεν επηρεάζει τη συμπεριφορά της άλλης πλευράς. Η σύγχυσή τους είναι ο συνηθισμένος λόγος που μια διόρθωση φαίνεται να δουλεύει σε έναν κεντρικό υπολογιστή και όχι στον επόμενο.
Και τα δύο δέχονται μηδέν. Στο μηδέν ο πελάτης δεν στέλνει απολύτως τίποτα, και στην πλευρά του διακομιστή ένα ClientAliveCountMax μηδέν απενεργοποιεί την αποσύνδεση που θα ακολουθούσε διαφορετικά τους αναπάντητους ελέγχους.
Τι αποδεικνύει ένας έλεγχος και τι όχι
Αφού περάσει το ρυθμισμένο διάστημα χωρίς να φτάσουν δεδομένα από τον διακομιστή, ο πελάτης στέλνει ένα μικρό αίτημα μέσα από το υπάρχον κρυπτογραφημένο κανάλι και περιμένει απάντηση. Το ServerAliveCountMax καθορίζει πόσα από αυτά επιτρέπεται να μείνουν αναπάντητα πριν τερματιστεί η συνεδρία. Με διάστημα 60 και πλήθος 3 ο πελάτης τα παρατάει περίπου μετά από τρία λεπτά σιωπής, και αυτό το νούμερο είναι ιδιότητα της δικής σας ρύθμισης, όχι πρότυπο δικτύου. Αφήστε το διάστημα στην προεπιλεγμένη τιμή 0 και δεν στέλνεται ποτέ έλεγχος, γι' αυτό ένας τυπικός πελάτης μπορεί να κάθεται σε μια νεκρή σύνδεση επ' αόριστον.
Επειδή η ανταλλαγή τρέχει μέσα στη μεταφορά SSH, μια απάντηση αποδεικνύει ότι η διεργασία SSH της άλλης πλευράς ακόμη διαβάζει και γράφει. Δεν λέει τίποτα για το πρόγραμμα που ξεκινήσατε μέσα σε εκείνη τη συνεδρία: ένας πελάτης βάσης δεδομένων, μια προωθημένη θύρα ή ένα σενάριο μεγάλης διάρκειας μπορεί να έχουν κολλήσει ενώ η μεταφορά απαντά πρόθυμα στους ελέγχους.
Το TCPKeepAlive είναι ξεχωριστός μηχανισμός ένα επίπεδο πιο κάτω. Τον χειρίζεται ο πυρήνας, δεν είναι κρυπτογραφημένος, και μια πλευρά της οποίας ο δαίμονας SSH έχει κολλήσει μπορεί ακόμη να τον ικανοποιήσει. Γι' αυτό ο έλεγχος σε επίπεδο SSH είναι το πιο ουσιαστικό σήμα όταν σας ενδιαφέρει η συνεδρία και όχι η υποδοχή.
Η σειρά καθορίζει ποια τιμή επιβιώνει
Το OpenSSH εφαρμόζει την πρώτη τιμή που λαμβάνει για κάθε παράμετρο, οπότε ένα συγκεκριμένο μπλοκ Host πρέπει να εμφανίζεται πριν από οποιοδήποτε ευρύτερο μπλοκ που θα ταίριαζε επίσης. Βάλτε τις προεπιλογές με χαρακτήρες μπαλαντέρ στο κάτω μέρος του αρχείου, όχι στην κορυφή, και θυμηθείτε ότι ένα μπλοκ Match πιο κάτω δεν μπορεί να υπερισχύσει μιας τιμής που έχει ήδη οριστεί. Η αναφορά ρύθμισης πελάτη του OpenSSH διατυπώνει ευθέως τον κανόνα της πρώτης τιμής, και αξίζει να τη διαβάσετε μία φορά πριν αναδιοργανώσετε μια κοινόχρηστη ρύθμιση.
Οι επιλογές γραμμής εντολών νικούν το αρχείο, κάτι που κάνει φθηνό ένα προσωρινό πείραμα:
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=4 office-shellΓια να δείτε τι επέλυσε πραγματικά ο πελάτης και όχι τι νομίζετε ότι γράψατε, ζητήστε του να εκτυπώσει την ενεργή ρύθμιση. Η έξοδος περιέχει τις συγχωνευμένες τιμές για αυτό το όνομα κεντρικού υπολογιστή και είναι ο ταχύτερος τρόπος να πιάσετε ένα παρείσακτο προηγούμενο μπλοκ:
ssh -G office-shell | grep -i aliveΤι κάνουν τα keepalives μέσα από μια σήραγγα
Η περιοδική κίνηση εμποδίζει τη λήξη μιας αντιστοίχισης NAT ή τείχους προστασίας με κατάσταση, κάτι που είναι πραγματικό πλεονέκτημα σε VPN της οποίας η πύλη απορρίπτει τις αδρανείς ροές μετά από λίγα λεπτά. Οι έλεγχοι που φτάνουν κάθε 60 δευτερόλεπτα ανανεώνουν αυτή την αντιστοίχιση χωρίς να μεταφέρουν δεδομένα εφαρμογής.
Δεν μπορούν να ξαναχτίσουν μια διαδρομή που έχει χαθεί. Όταν η διεπαφή της σήραγγας εξαφανιστεί, οι έλεγχοι αποτυγχάνουν όπως όλα τα άλλα, και η συνεδρία τελειώνει μόλις εξαντληθεί το πλήθος. Η ανίχνευση ζωτικότητας και η ανάκτηση της διαδρομής είναι διαφορετικά προβλήματα, και μόνο το πρώτο ρυθμίζεται στο ssh_config. Αυτό που πραγματικά σας αγοράζουν το διάστημα και το πλήθος είναι το πόσο γρήγορα το αντιλαμβάνεται ο πελάτης, και αυτό είναι το μέρος που ο χρήστης βιώνει ως κόλλημα.
Οι πολυπλεγμένες συνδέσεις προσθέτουν μια πτυχή. Με το ControlMaster σε δράση οι έλεγχοι ανήκουν στην κύρια σύνδεση, και μια νέα συνεδρία πάνω από μια υπάρχουσα κύρια κληρονομεί ό,τι διαπραγματεύτηκε εκείνη. Αν η κύρια του mux έχει κολλήσει, το άνοιγμα άλλου παραθύρου δεν θα δοκιμάσει ξανά τη διαδρομή.
Επιβεβαίωση της ρύθμισης από άκρη σε άκρη
Στον διακομιστή, εκτυπώστε την ενεργή ρύθμιση του δαίμονα αντί να διαβάζετε το αρχείο και να μαντεύετε ποιο include κέρδισε:
sshd -T | grep -i clientaliveΣτη συνέχεια παρακολουθήστε μια πραγματική συνεδρία με ενεργοποιημένη την έξοδο αποσφαλμάτωσης. Ο πελάτης τυπώνει μια γραμμή λήξης χρόνου όταν εξαντληθεί το πλήθος, και οι χρονοσημάνσεις γύρω της δείχνουν αν η σιωπή ήταν συνεχής ή αν οι έλεγχοι δεν στάλθηκαν ποτέ. Μια συνεδρία που πεθαίνει χωρίς κίνηση ελέγχων έχει συνήθως τη λέξη-κλειδί σε ένα μπλοκ που δεν ταίριαξε ποτέ.
Δύο έλεγχοι αξίζει να προστεθούν για κάθε κεντρικό υπολογιστή που τον φτάνετε μόνο μέσω σήραγγας: επιβεβαιώστε ότι το διάστημα που επιλύθηκε είναι αυτό που σκοπεύατε, και ότι αυτό το διάστημα πολλαπλασιασμένο με το πλήθος είναι μικρότερο από το όριο αδράνειας στην πύλη VPN. Όταν ο δεύτερος αριθμός είναι μεγαλύτερος, η πύλη απορρίπτει πρώτα τη ροή σιωπηλά και ο έλεγχος SSH δεν παίρνει ποτέ την ευκαιρία να αναφέρει τίποτα.