Γιατί πολλές συνδέσεις εφαρμογών μοιράζονται μία συνεδρία OpenVPN
Μία εξωτερική συνομιλία UDP μεταφέρει κάθε εσωτερική ροή που της στέλνουν οι διαδρομές. Οι εσωτερικές θύρες και τα πρωτόκολλα επιβιώνουν· μόνο η εξωτερική πεντάδα μένει σταθερή.
Φανταστείτε έναν περιηγητή να φορτώνει μια σελίδα HTTPS ενώ ένας πελάτης SSH φτάνει σε άλλον διακομιστή και ένας επιλυτής απαντά σε ένα ερώτημα, όλα μέσα από μία συνεδρία OpenVPN. Στη φυσική διεπαφή βλέπετε μία συνομιλία· μέσα στο τούνελ βλέπετε τρεις. Και οι δύο εικόνες είναι σωστές, και το να ξέρετε γιατί είναι η διαφορά ανάμεσα σε μια χρήσιμη καταγραφή και σε μια μπερδεμένη. Ακολουθήστε μία εσωτερική ροή από το socket ως το καλώδιο και η στρωμάτωση παύει να είναι αφηρημένη.
Μία εξωτερική συνομιλία, πολλές εσωτερικές ροές
Κάθε εφαρμογή ανοίγει το δικό της socket, και ο πυρήνας της δίνει μια πεντάδα από διεύθυνση πηγής, θύρα πηγής, διεύθυνση προορισμού, θύρα προορισμού και πρωτόκολλο. Αυτές οι πεντάδες υπάρχουν πριν μπει στη μέση οποιοδήποτε τούνελ. Έπειτα η δρομολόγηση αποφασίζει ότι όλες βγαίνουν από τη συσκευή τούνελ, οπότε το πακέτο που παραδίδεται στο OpenVPN εξακολουθεί να κουβαλά από μέσα τις αρχικές κεφαλίδες. Το OpenVPN κρυπτογραφεί αυτό το εσωτερικό πακέτο και τυλίγει το αποτέλεσμα σε μία εξωτερική συνομιλία UDP ή TCP με τον ομότιμο. Η εξωτερική συνομιλία είναι επομένως μία, ενώ οι ροές μέσα της είναι όσες άνοιξαν οι εφαρμογές.
Τίποτα δεν καταρρέει. Οι εσωτερικές πεντάδες επιβιώνουν από άκρη σε άκρη, και γι’ αυτό η μακρινή πλευρά ξεχωρίζει ακόμη τις τρεις ροές.
Η θύρα που μένει σταθερή
Αυτό που μένει σταθερό είναι η εξωτερική πεντάδα: η διεύθυνσή σας, η τοπική θύρα που έδεσε ο πελάτης, η διεύθυνση του ομοτίμου και η ρυθμισμένη θύρα υπηρεσίας. Αυτή την πεντάδα πρέπει να επιτρέπει ένα τείχος προστασίας ή ένα NAT στη διαδρομή, και αυτή είναι που θα δείξει μια καταγραφή στο uplink. Είναι επίσης αυτή που αλλάζει μετά από επανασύνδεση ή αλλαγή δικτύου, γιατί ο πελάτης μπορεί να δέσει διαφορετική τοπική θύρα. Ένα τούνελ δεν σημαίνει μία σταθερή θύρα πηγής για πάντα.
Οι εσωτερικές θύρες είναι αυτό που νοιάζει τα άκρα. Μια ροή HTTPS κρατά τη θύρα προορισμού 443 μέσα στο τούνελ, παρόλο που η εξωτερική μεταφορά κάθεται στη θύρα που ρύθμισε ο χειριστής. Τα άκρα των εφαρμογών δεν μαθαίνουν ποτέ για την εξωτερική.
Τι αλλάζει η αποκωδικοποίηση στο μακρινό άκρο
Στον ομότιμο αφαιρείται το εξωτερικό στρώμα και μένει το εσωτερικό πακέτο. Από εκεί και πέρα, η προώθηση και η πολιτική πρόσβασης εφαρμόζονται στον εσωτερικό προορισμό και το πρωτόκολλο. Ο διακομιστής ιστού εξακολουθεί να δέχεται σύνδεση HTTPS, ο δαίμονας SSH εξακολουθεί να δέχεται SSH, και ο επιλυτής εξακολουθεί να δέχεται ερώτημα.
Γι’ αυτό ένας κανόνας που επιτρέπει την εξωτερική μεταφορά δεν είναι ο ίδιος κανόνας με το να επιτρέπεται μια εσωτερική υπηρεσία. Ο πρώτος περιγράφει μια διαδρομή· ο δεύτερος περιγράφει μια εξουσιοδότηση.
Εξωτερικό TCP σημαίνει μία ροή, όχι μία σύνδεση
Όταν η εξωτερική μεταφορά είναι UDP, η μοίρα κάθε εσωτερικής ροής είναι ανεξάρτητη: ένα χαμένο αυτοδύναμο πακέτο επηρεάζει μία μεταφορά μέχρι τη δική του επαναποστολή. Όταν η εξωτερική μεταφορά είναι TCP, όλες οι εσωτερικές ροές μοιράζονται μία αξιόπιστη ροή byte.
Αυτή η κοινή ροή είναι το κομμάτι που χάνουν οι άνθρωποι. Η ανάκαμψη γίνεται μία φορά, για τα πάντα, οπότε ένα χαμένο τμήμα καθυστερεί την κίνηση κάθε εφαρμογής που πολυπλέκεται μέσα. Εξακολουθούν να είναι πολλές συνδέσεις στα άκρα και μία σύνδεση στο καλώδιο, και στο καλώδιο ζει το φαινόμενο της κεφαλής της ουράς. Ο αριθμός των θυρών που ακούν δεν σας λέει τίποτα γι’ αυτό, γι’ αυτό το μέτρημα θυρών είναι κακός τρόπος να σκεφτείτε την απόδοση του τούνελ.
Περιγράψτε τη δική σας ρύθμιση με ακρίβεια
Ονομάστε την επιλεγμένη εσωτερική κίνηση και τη συγκεκριμένη εξωτερική μεταφορά που τη μεταφέρει, αντί να λέτε ότι το μηχάνημα στέλνει τα πάντα από μία θύρα. Οι τοπικές υπηρεσίες, ένα δεύτερο τούνελ και η άλλη οικογένεια διευθύνσεων δημιουργούν ροές που δεν μπαίνουν ποτέ σε αυτή τη συνομιλία. Μια καταγραφή στο uplink δείχνει την εξωτερική πεντάδα· μια καταγραφή μέσα στο τούνελ δείχνει τις εσωτερικές.
Πάρτε και τις δύο και βάλτε τις χρονικές σημάνσεις δίπλα δίπλα. Αν πρέπει να αποδείξετε ποια εφαρμογή δημιούργησε ποια εσωτερική ροή, ο πίνακας sockets στον κεντρικό υπολογιστή είναι το καλύτερο εργαλείο, γιατί αντιστοιχίζει θύρες σε διεργασίες απευθείας. Έπειτα γράψτε την εξωτερική πεντάδα που παρατηρήσατε και τη στιγμή που την παρατηρήσατε, γιατί η επόμενη καταγραφή μετά από επανασύνδεση μπορεί εύλογα να δείξει άλλους αριθμούς.