Το hook σύνδεσης είναι πολιτική συνεδρίας, όχι φίλτρο πακέτων
Το hook σύνδεσης πελάτη εκτελείται μία φορά ανά συνεδρία και δεν βλέπει ποτέ ωφέλιμο φορτίο. Βάλτε την αποδοχή εκεί όπου υπάρχουν συνεδρίες και την αλλαγή περιεχομένου εκεί όπου υπάρχουν αιτήματα.
Κάποιος θέλει να εξετάσει τι στέλνουν οι πελάτες μέσα από το τούνελ, βρίσκει το hook σύνδεσης στην τεκμηρίωση και αρχίζει να γράφει ένα σενάριο που δεν θα λάβει ποτέ ούτε ένα πακέτο. Το hook είναι πραγματικό και χρήσιμο, αλλά η μονάδα εργασίας του είναι μια συνεδρία, όχι ένα byte. Η επιλογή του σωστού εξαρτήματος είναι σύγκριση ανάμεσα σε τρία σημεία όπου μπορεί να συμβεί εργασία, και το καθοριστικό ερώτημα είναι ποια μονάδα μπορεί πραγματικά να δει το καθένα.
Τι λαμβάνει το hook και τι δεν λαμβάνει ποτέ
Ένα hook σύνδεσης πελάτη εκτελείται μία φορά όταν ένας πιστοποιημένος πελάτης εγκαθιδρύει συνεδρία, στο πλαίσιο της διεργασίας του διακομιστή, με τεκμηριωμένα ορίσματα και τιμές περιβάλλοντος όπως το κοινό όνομα και η εκχωρημένη διεύθυνση. Μπορεί να γράψει διαμόρφωση ανά πελάτη, να λάβει απόφαση αποδοχής, να δεσμεύσει εξωτερικό πόρο ή να καταγράψει ότι η σύνδεση συνέβη. Αυτό που δεν μπορεί είναι να παρατηρήσει κίνηση, γιατί όταν το πρώτο πακέτο διασχίσει το τούνελ το hook έχει ήδη επιστρέψει.
Αυτό δεν είναι περιορισμός προς παράκαμψη. Μια επιστροφή κλήσης συνεδρίας που θα επιχειρούσε να επεξεργαστεί ροή θα έπρεπε να τρέχει σε όλη τη διάρκεια ζωής της σύνδεσης, και το συμβόλαιο σεναρίων του δαίμονα δεν είναι φτιαγμένο για αυτή τη μορφή. Ρώτησε για τι είναι το hook πριν αποφασίσεις ότι σου στέκεται εμπόδιο.
Οι επανασυνδέσεις μετράνε επίσης. Ένας πελάτης που πέφτει και επανασυνδέεται είναι νέα συνεδρία, άρα ό,τι δεσμεύει το hook πρέπει να είναι αδρανές ως προς επανάληψη ή να συνοδεύεται από γεγονός αποσύνδεσης που καθαρίζει. Κατάσταση που διαρρέει σε κάθε επανασύνδεση είναι το συνηθισμένο πρώτο σφάλμα σε σχεδίαση βασισμένη σε hook.
Η πολιτική συνεδρίας ανήκει στο hook
Η αποδοχή είναι η φυσική δουλειά του hook. Ξέρεις ποιος συνδέθηκε, από πού και με ποιο πιστοποιητικό, και μπορείς να αποφασίσεις αν αυτή η συνεδρία θα προχωρήσει ή θα απορριφθεί. Αυτή η απόφαση είναι φθηνή, συμβαίνει μία φορά και δεν απαιτεί να κοιτάξεις ούτε ένα byte φορτίου.
Η εκχώρηση διαμόρφωσης ταιριάζει στην ίδια μορφή. Ένα hook μπορεί να επιλέξει τη διεύθυνση του πελάτη, να στείλει επιλογές κατάλληλες για αυτή την ταυτότητα ή να γράψει ένα τμήμα που ο διακομιστής διαβάζει για αυτόν τον πελάτη. Επειδή η απόφαση είναι ανά συνεδρία, παραμένει κατανοητή όταν κάτι πάει στραβά και κάποιος πρέπει να εξηγήσει γιατί ένας συγκεκριμένος πελάτης πήρε μια συγκεκριμένη διεύθυνση.
Η καταγραφή είναι η τρίτη εφαρμογή. Μια εγγραφή ελέγχου που λέει ότι μια συνεδρία έγινε δεκτή, με την ταυτότητα και τον χρόνο της, ανήκει ακριβώς εδώ. Δεν είναι ημερολόγιο κίνησης και δεν πρέπει να προσποιείται ότι είναι. Αν αργότερα κάποιος ρωτήσει τι έκανε ένας πελάτης μέσα στο τούνελ, η απάντηση πρέπει να έρθει από αλλού.
Η εργασία πακέτων ανήκει σε διαδρομή πακέτων
Αν η απαίτηση είναι να βλέπεις ή να αλλάζεις bytes εν κινήσει, το εξάρτημα πρέπει να βρίσκεται στη διαδρομή προώθησης: κανόνας τείχους προστασίας με ουρά, hook ελέγχου κίνησης ή προωθητής στον χώρο χρήστη. Αυτοί οι μηχανισμοί βλέπουν πακέτα και έχουν δική τους κατάσταση, δικούς τους τρόπους αστοχίας και δικό τους προφίλ απόδοσης.
Η επεξεργασία φορτίου σε αυτό το επίπεδο είναι δυσκολότερη από την ανάγνωσή του. Η αλλαγή ενός byte μπορεί να ακυρώσει πεδίο μήκους, άθροισμα ελέγχου ή μηχανή κατάστασης πρωτοκόλλου, και ένα τούνελ τρίτου επιπέδου δεν σε προστατεύει από τίποτα από αυτά. Σημαίνει μόνο ότι οι εξωτερικές κεφαλίδες δεν είναι αυτές που επεξεργάζεσαι. Υπολόγισε αυτή την εργασία επιδιόρθωσης πριν υποσχεθείς σε κάποιον επανεγγραφή περιεχομένου.
Η σύλληψη διεπαφής είναι το φθηνότερο εργαλείο αυτής της κατηγορίας, και είναι παρατήρηση, όχι επεξεργαστής. Οι άνθρωποι μπερδεύουν τα δύο γιατί και τα δύο περιγράφονται ως θέαση κίνησης, αλλά η σύλληψη παράγει αρχείο και η διαδρομή πακέτων παράγει απόφαση.
Οι αλλαγές εφαρμογής ανήκουν στην εφαρμογή
Όταν ο στόχος είναι να αλλάξει τι περιέχει ένα αίτημα ή πώς σχηματίζεται μια απάντηση, το σωστό μέρος είναι η ίδια η υπηρεσία ή ένας μεσολαβητής που τερματίζει σκόπιμα το πρωτόκολλο. Αυτά τα εξαρτήματα καταλαβαίνουν ήδη αιτήματα, απαντήσεις και την πιστοποίηση που περιμένει η εφαρμογή, και αυτό είναι ακριβώς το πλαίσιο που λείπει από ένα φίλτρο πακέτων.
Η μετάφραση διευθύνσεων βρίσκεται στο τέλος αυτής της λίστας για κάποιο λόγο. Ξαναγράφει διευθύνσεις και θύρες και αφήνει το φορτίο ήσυχο, άρα δεν είναι εργαλείο περιεχομένου, όσο συχνά κι αν εμφανίζεται σε συνταγή που αναφέρει και περιεχόμενο.
Το να κρατάς αυτά τα όρια χωριστά είναι αυτό που κάνει μια σχεδίαση εξηγήσιμη. Πολιτική συνεδρίας στο hook, χειρισμός πακέτων σε διαδρομή πακέτων και αλλαγή εφαρμογής εκεί όπου το πρωτόκολλο τερματίζεται σκόπιμα: τρεις προτάσεις που χρησιμεύουν και ως λίστα ελέγχου για ανασκόπηση.
Όπου το TLS εξακολουθεί να τελειώνει τη συζήτηση
Ένα πράγμα επιβιώνει από όλα τα παραπάνω: η κίνηση μέσα στο τούνελ που μεταφέρει HTTPS κρατά τη δική της κρυπτογράφηση μεταφοράς. Το να κρατάς τα κλειδιά του VPN σου δίνει το εσωτερικό πακέτο IP και δεν σου δίνει τα κλειδιά συνεδρίας για τον ιστότοπο στην άλλη άκρη.
Γι' αυτό ένα hook δεν μπορεί να εξετάσει περιεχόμενο ούτε κατ' αρχήν, και γι' αυτό μια διαδρομή πακέτων βλέπει κρυπτοκείμενο, εκτός αν η ανάπτυξη τερματίζει σκόπιμα το εσωτερικό TLS. συμβόλαιο σεναρίων περιγράφει τι δίνεται στο hook· δεν λέει τίποτα για φορτίο, γιατί δεν υπάρχει φορτίο να δοθεί.