Επιβάρυνση IPsec: λειτουργία, NAT-T και αλγόριθμοι την αλλάζουν όλα
Ένας μόνο δημοσιευμένος αριθμός επιβάρυνσης περιγράφει μία ενθυλάκωση σε μία διαδρομή. Αθροίστε τις κεφαλίδες που διαπραγματεύεται πραγματικά η σήραγγά σας και μετά μετρήστε τη διαδρομή.
Κάπου σε έναν οδηγό υπάρχει ένας αριθμός, συνήθως μεταξύ εξήντα και ογδόντα byte, που κάποιος αφαίρεσε από το 1500 για να βρει το MTU της διεπαφής. Αυτός ο αριθμός περιγράφει μία συγκεκριμένη ενθυλάκωση σε μία συγκεκριμένη διαδρομή. Αλλάξτε τη λειτουργία, την εξωτερική οικογένεια διευθύνσεων, τον αλγόριθμο κρυπτογράφησης ή την παρουσία NAT και η αριθμητική δεν ισχύει πλέον για τη σήραγγά σας.
Ο αριθμός προήλθε από άλλη σήραγγα
Η επιβάρυνση δεν είναι ιδιότητα του IPsec εν γένει. Είναι ιδιότητα του πακέτου που πράγματι χτίζεται: μια διαπραγματευμένη λειτουργία, μια εξωτερική κεφαλίδα, μια κεφαλίδα προστασίας, γέμισμα, ένα πεδίο ακεραιότητας και πιθανώς ένα επιπλέον περίβλημα UDP.
Ένας αριθμός που αναφέρεται για λειτουργία μεταφοράς με IPv4 και χωρίς NAT περιγράφει μικρότερο πακέτο από τη λειτουργία σήραγγας με IPv6 κάτω από διέλευση NAT. Και οι δύο είναι σωστοί για τη δική τους περίπτωση. Το να αντιγράψει κανείς τον έναν σε διαφορετική εγκατάσταση είναι ο τρόπος που οι άνθρωποι καταλήγουν με MTU που σπάει μεγάλες μεταφορές. Η αποτυχία είναι αθόρυβη, γιατί τα μικρά αιτήματα συνεχίζουν να δουλεύουν.
Αθροίστε τα στρώματα που υπάρχουν πραγματικά
Ξεκινήστε από την εξωτερική κεφαλίδα IP και προχωρήστε προς τα μέσα. Στη λειτουργία σήραγγας το αρχικό πακέτο βρίσκεται μέσα, άρα η εξωτερική κεφαλίδα είναι προσθήκη και όχι αντικατάσταση. RFC 4303 περιγράφει την κεφαλίδα ESP, το γέμισμα και τα δεδομένα ακεραιότητας που την ακολουθούν.
| Layer | What it adds | When it applies |
|---|---|---|
| Outer IP header | 20 bytes for IPv4, 40 for IPv6 | Always, and 40 rather than 20 if the outer path is v6 |
| ESP header | 8 bytes of SPI and sequence number | Always |
| Block cipher IV | 8 to 16 bytes depending on the transform | When the negotiated cipher uses one |
| Padding and trailer | Padding to the block size, plus two trailer bytes | Always, and the amount varies with payload length |
| Integrity data | 12 to 16 bytes for common authenticated ciphers | When integrity protection is negotiated |
| UDP encapsulation | 8 bytes | NAT traversal on port 4500, which is common for clients behind NAT |
Καμία από αυτές τις γραμμές δεν είναι σταθερή μεταξύ εγκαταστάσεων, και η γραμμή του γεμίσματος δεν είναι σταθερή ούτε μέσα σε μία εγκατάσταση. Αυτός είναι όλος ο λόγος που ένας μόνο δημοσιευμένος αριθμός επιβάρυνσης απογοητεύει.
Δύο τοποθεσίες μπορούν να διαφωνήσουν για την ίδια σήραγγα
Το προστατευμένο πακέτο πρέπει ακόμη να διασχίσει την εξωτερική διαδρομή, και η εξωτερική διαδρομή δεν είναι ίδια παντού. Ένας σύνδεσμος πρόσβασης PPPoE μεταφέρει λιγότερο από ένα καθαρό τμήμα Ethernet. Ένα δίκτυο κινητής μπορεί να συρρικνωθεί κι άλλο, και ένας πάροχος που δημιουργεί σήραγγα για τη δική του κίνηση προσθέτει άλλη μια ενθυλάκωση που δεν ανέφερε κανείς. Μια σήραγγα που λειτουργεί σε έναν σύνδεσμο και αποτυγχάνει σε άλλον περιγράφει τον δεύτερο σύνδεσμο, όχι το πρωτόκολλο.
Και οι δύο κατευθύνσεις μπορούν επίσης να διαφέρουν. Μια ασύμμετρη διαδρομή μπορεί να σας δώσει ανέβασμα που δουλεύει και κατέβασμα που κολλάει, κάτι που διαβάζεται ως πρόβλημα εφαρμογής ώσπου να κοιτάξετε τα μεγέθη πακέτων αντί για τη δυνατότητα πρόσβασης. Ένα επιτυχημένο μικρό ping αποδεικνύει ελάχιστα για μια απάντηση πλήρους μεγέθους.
Μετρήστε αντί να αφαιρείτε
Βρείτε το μεγαλύτερο datagram που επιβιώνει στη διαδρομή. Μετά συγκρίνετέ το με την τιμή που αναφέρει η διεπαφή:
ip link show eth0 | grep -o 'mtu [0-9]*' ip xfrm state list ping -M do -s 1400 198.51.100.7 ping -M do -s 1372 198.51.100.7 tcpdump -ni any -c 20 'esp or udp port 4500'
Κατεβάστε το μέγεθος του ping ώσπου να φτάσουν απαντήσεις, και θεωρήστε τη μεγαλύτερη τιμή που λειτουργεί ως τον προϋπολογισμό για εκείνη τη διαδρομή. Η έξοδος του xfrm σας λέει ποια λειτουργία και ποιοι αλγόριθμοι διαπραγματεύτηκαν, και αυτό είναι η είσοδος για κάθε έντιμο υπολογισμό. Η σύλληψη επιβεβαιώνει αν στο καλώδιο υπάρχει ESP ή ESP ενθυλακωμένο σε UDP, και αυτό λύνει το ζήτημα του NAT χωρίς μαντεψιές.
Κρατήστε μια τιμή και για το επίπεδο ελέγχου. Τα πακέτα χειραψίας IKE έχουν διαφορετική δομή από τα πακέτα δεδομένων, άρα ένα μέγεθος που βγαίνει από σύλληψη χειραψίας δεν είναι MTU του επιπέδου δεδομένων.
Βάλτε τον αριθμό εκεί που ανήκει
Για TCP μέσα από σήραγγα, ο περιορισμός MSS είναι συχνά ο λιγότερο επεμβατικός έλεγχος, γιατί μειώνει αυτό που στέλνουν τα άκρα χωρίς να αλλάζει την ίδια τη σήραγγα. Για σήραγγα βασισμένη σε διαδρομές, ορίστε σκόπιμα το MTU της διεπαφής σήραγγας και τεκμηριώστε το γιατί. Το να κάνετε και τα δύο μαζί και μετά να μετρήσετε δεν σας δίνει καμία πληροφορία για το ποιο βοήθησε.
Κρατήστε μαζί στο δελτίο τη διαπραγματευμένη λειτουργία, την εξωτερική οικογένεια, την κατάσταση NAT και το αναπαραγώγιμο σύμπτωμα. Ένα καταγεγραμμένο σύνολο από τέσσερα γεγονότα νικά μια σταθερά που θυμάστε, και είναι η μόνη εκδοχή αυτού που επιβιώνει από την επόμενη αναβάθμιση πελάτη.