Ρύθμιση MSS του TCP σε πύλη Linux IPsec: τι διορθώνει
Τα μικρά αιτήματα λειτουργούν και οι μεγάλες απαντήσεις κολλάνε. Ελέγξτε αν ένας κανόνας MSS στην εσωτερική διαδρομή TCP είναι η σωστή διόρθωση και πού πρέπει να βρίσκεται.
Το ping λειτουργεί, το SSH λειτουργεί, μια μικρή σελίδα φορτώνει, και μετά κάθε μεγάλη απάντηση κολλάει μέχρι να λήξει ο χρόνος. Το κλασικό μοτίβο δείχνει προς το μέγεθος του πακέτου και όχι προς τη δυνατότητα πρόσβασης: η διαδρομή μεταφέρει τη χειραψία και τα πρώτα λίγα kilobyte, μετά ένα τμήμα πλήρους μεγέθους εξαφανίζεται. Σε μια πύλη Linux IPsec, ένας κανόνας TCP MSS είναι συχνά η λύση, αλλά μόνο αν καταλάβετε τι αλλάζει και πού βρίσκεται στην πραγματικότητα το πακέτο που αγγίζει. Η σειρά παρακάτω ακολουθεί το πακέτο από το σύμπτωμα έως την τοποθέτηση του κανόνα, ώστε να σταματήσετε μόλις η εξήγηση πάψει να ταιριάζει.
Το σύμπτωμα που υποδεικνύει MSS
Το TCP διαπραγματεύεται ένα μέγιστο μέγεθος τμήματος στη χειραψία. Αν αυτή η τιμή είναι μεγαλύτερη από ό,τι μπορεί να μεταφέρει η διαδρομή μετά την ενθυλάκωση, ο αποστολέας συνεχίζει να παράγει τμήματα που δεν φτάνουν ποτέ, και η σύνδεση κολλάει μετά την πρώτη ανταλλαγή. Οι μικρές απαντήσεις χωρούν, οι μεγάλες όχι.
Η ανατροφοδότηση ICMP μπορεί να σώσει τη σύνδεση μέσω της ανακάλυψης MTU της διαδρομής, και ένα τείχος προστασίας που απορρίπτει αυτά τα μηνύματα μετατρέπει το κόλλημα σε μια σιωπηλή μαύρη τρύπα. Γι' αυτό το ίδιο τούνελ λειτουργεί για μια εφαρμογή και αποτυγχάνει για μια άλλη χωρίς καμία εμφανή διαφορά στη διαμόρφωση.
Τι κάνει ένας κανόνας TCPMSS και τι δεν κάνει
Ο κανόνας ξαναγράφει την επιλογή MSS στα πακέτα χειραψίας TCP καθώς περνούν. Δεν ορίζει το MTU της διεπαφής του τούνελ, δεν αλλάζει την πολιτική IPsec, και στους σημερινούς πυρήνες μειώνει μόνο μια διαφημιζόμενη τιμή αντί να αυξάνει μια που είναι ήδη μικρότερη. Αγγίζει επίσης μόνο το TCP· τα ωφέλιμα φορτία UDP, η συμπεριφορά του DNS και οι διαπραγματευμένοι επιλογείς κίνησης βρίσκονται εκτός της εμβέλειάς του.
Επειδή η αλλαγή συμβαίνει κατά τη χειραψία, μια υπάρχουσα σύνδεση που είχε καθιερωθεί πριν από τον κανόνα διατηρεί την παλιά της τιμή. Δοκιμάστε με νέα σύνδεση και περιμένετε ότι η πρώτη προσπάθεια μετά την αλλαγή θα είναι αυτή που θα σας πει κάτι. Τίποτα στον κανόνα δεν φτάνει σε σύνδεση που είναι ήδη ανοιχτή. Γι' αυτό μια διόρθωση που εφαρμόζεται στη μέση ενός περιστατικού μπορεί να μοιάζει σαν να μην έκανε απολύτως τίποτα.
Βάλτε τον κανόνα στην εσωτερική διαδρομή TCP
Σε μια πύλη Linux βασισμένη σε πολιτική, το προωθούμενο πακέτο εξακολουθεί να μοιάζει με συνηθισμένο TCP όταν το βλέπει το τείχος προστασίας. Η πολιτική IPsec αποφασίζει ότι το πακέτο θα προστατευτεί· το τείχος προστασίας δεν βλέπει κεφαλίδα ESP για την εσωτερική ροή, οπότε η αντιστοίχιση με ESP εδώ περιγράφει ένα εντελώς διαφορετικό πακέτο. Αυτή η αναντιστοιχία είναι ο λόγος που ορισμένοι κανόνες φαίνονται σωστοί και δεν ταιριάζουν ποτέ.
Με όρους iptables, ο κανόνας ανήκει στον πίνακα mangle στη διαδρομή προώθησης, περιορισμένος στα πακέτα χειραψίας: iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1270. Ο αριθμός είναι ένα παράδειγμα, όχι μια παγκόσμια σταθερά· υπολογίστε τον από το κόστος ενθυλάκωσης και το πραγματικό MTU της διαδρομής. Ένα ισοδύναμο nftables ορίζει το μέγιστο μέγεθος τμήματος σε μια αλυσίδα forward ή postrouting.
Κρατήστε τους εξωτερικούς κανόνες ακρόασης για IKE και ESP χωριστούς από τους εσωτερικούς κανόνες προώθησης. Ένας μόνος κανόνας που προσπαθεί να εξουσιοδοτήσει και τη ροή της εφαρμογής και το εξωτερικό πρωτόκολλο καταλήγει να μην ταιριάζει αξιόπιστα με κανένα από τα δύο.
Σεβαστείτε τον ιδιοκτήτη του τείχους προστασίας και τη σειρά NAT
Αν το UFW κατέχει το τείχος προστασίας του κεντρικού υπολογιστή, προσθέστε τις αλλαγές mangle και προώθησης μέσω της υποστηριζόμενης μόνιμης διαμόρφωσής του αντί να πληκτρολογήσετε μια εντολή που εξαφανίζεται στην επόμενη επαναφόρτωση. Ένας κανόνας που εισάγεται στον λάθος πίνακα ή μετά από έναν τελικό κανόνα δεν έχει κανένα αποτέλεσμα, και ο ζωντανός πίνακας το κρύβει από εσάς.
Η μετάφραση προέλευσης είναι μια ξεχωριστή απόφαση που συχνά αλληλεπιδρά με αυτήν. Μια εξαίρεση που τοποθετείται πριν από έναν γενικό κανόνα masquerade εμποδίζει την προστατευμένη κίνηση να χάσει την προέλευση που απαιτεί η πολιτική της· δεν επιδιορθώνει πρόβλημα μεγέθους, και ένας κανόνας μεγέθους δεν επιδιορθώνει πρόβλημα μετάφρασης.
Επαληθεύστε στενά και μετά σταματήστε
Ανοίξτε μια νέα σύνδεση στην υπηρεσία που αποτυγχάνει και παρακολουθήστε τόσο την εφαρμογή όσο και τους μετρητές του κανόνα. Αν το κόλλημα εξαφανιστεί, έχετε στοιχεία για εκείνη τη διαδρομή TCP με εκείνη την ενθυλάκωση. Δεν έχετε στοιχεία ότι ταιριάζει κάθε πρωτόκολλο VPN, ότι έχει διορθωθεί κάθε εφαρμογή UDP ή ότι μια συγκεκριμένη ανάντη υπηρεσία ήταν η αρχική αιτία.
Αφήστε την ανατροφοδότηση μεγέθους ICMP να λειτουργεί όπου το επιτρέπει η πολιτική, και αντιμετωπίστε με προσοχή την αυτόματη προσαρμογή βάσει του MTU της διαδρομής όταν η εξωτερική διαδρομή IPsec δεν αντιπροσωπεύεται από την εσωτερική διαδρομή. Όσο στενότερο είναι το συμπέρασμα, τόσο ευκολότερο είναι να διαγνωστεί το επόμενο περιστατικό.