Το SSH συνδέεται, εμφανίζεται η προτροπή και η συνεδρία πεθαίνει μόλις μια εντολή επιστρέψει κάτι ογκώδες. Το echo δουλεύει για λίγο ακόμη, μετά η σύνδεση λήγει ενώ ο πελάτης εξακολουθεί να δείχνει τη σήραγγα ενεργή. Μια συνεδρία που είναι υγιής μέχρι να φτάσουν δεδομένα συνήθως χτυπά ένα όριο μεγέθους και όχι ένα σφάλμα του SSH. Οι έλεγχοι παρακάτω είναι διατεταγμένοι ώστε η φθηνότερη εξήγηση να αποκλειστεί πρώτη.

Διαβάστε το σχήμα της αποτυχίας πριν αγγίξετε το προφίλ

Τα μικρά πακέτα περνούν και τα γεμάτα όχι. Μια προτροπή, ένα πανό ή ένα πάτημα πλήκτρου χωρούν εύκολα· μια λίστα καταλόγου, μια λήψη ή ένα επικολλημένο μπλοκ όχι. Το μέγεθος στο οποίο αλλάζει η συμπεριφορά είναι το στοιχείο, όχι το ότι το SSH είναι το πρόγραμμα.

Ο μηχανισμός είναι η ανακάλυψη MTU της διαδρομής, που εξαρτάται από ανατροφοδότηση. Το TCP διαλέγει μέγεθος τμήματος και όταν ένας δρομολογητής στη διαδρομή δεν μπορεί να προωθήσει το πακέτο που προκύπτει, υποτίθεται ότι το λέει με μήνυμα ICMP. Η ενθυλάκωση κάνει το εξωτερικό πακέτο μεγαλύτερο από το εσωτερικό, άρα το χρησιμοποιήσιμο μέγεθος μέσα στη σήραγγα είναι πάντα κάτω από τον φυσικό σύνδεσμο. Φιλτράρετε αυτά τα μηνύματα ICMP οπουδήποτε και ο αποστολέας δεν παίρνει ποτέ τη διόρθωση, συνεχίζει να στέλνει γεμάτα τμήματα και το εξωτερικό πακέτο απορρίπτεται χωρίς ειδοποίηση.

Μετρήστε το όριο και από τις δύο πλευρές

Συγκρίνετε το MTU της σήραγγας με τον φυσικό σύνδεσμο πριν αλλάξετε οποιοδήποτε από τα δύο. Μια σήραγγα που αντέγραψε τη φυσική τιμή σάς έχει ήδη πει πού βρίσκεται η ασυμφωνία.

Ελέγξτε από μέσα στη σήραγγα με αίτημα που απαγορεύει τον κατακερματισμό, μειώνοντας το ωφέλιμο φορτίο ώσπου να επιστρέψουν απαντήσεις. Το όρισμα μεγέθους μετρά μόνο το ωφέλιμο φορτίο, άρα ο αριθμός που δουλεύει είναι πάντα κάτω από το MTU της διεπαφής. Προσθέστε ξανά τα μεγέθη των κεφαλίδων αν χρειάζεστε τον αριθμό της διεπαφής.

ip link show tun0
ping -M do -s 1380 10.9.0.1

Επαναλάβετε τον έλεγχο στη δημόσια διεύθυνση του διακομιστή από έξω από τη σήραγγα. Αν οι μεγάλοι έλεγχοι αποτύχουν και εκεί, το όριο βρίσκεται στη διαδρομή προς τον διακομιστή και καμία επιλογή σήραγγας δεν θα το μετακινήσει. Αυτή η σύγκριση σας γλιτώνει από το ρύθμισμα ενός πελάτη που ποτέ δεν ήταν το πρόβλημα. Γράψτε και τα δύο αποτελέσματα πριν ανοίξετε αρχείο ρυθμίσεων.

Τα mssfix και fragment κάνουν διαφορετικές δουλειές

Το mssfix περιορίζει το μέγεθος τμήματος που διαφημίζουν οι συνδέσεις TCP μέσα στη σήραγγα κατά τη χειραψία τους. Είναι ο σωστός μοχλός για SSH, HTTPS και αντιγραφή αρχείων, γι' αυτό το κόλλημα συχνά εξαφανίζεται μόλις οριστεί. Δεν αγγίζει καθόλου τα ωφέλιμα φορτία UDP.

Μια σήραγγα που μεταφέρει και υπηρεσία UDP μπορεί να συνεχίσει να αποτυγχάνει αφού διορθωθεί το SSH, και αυτό το αποτέλεσμα μπερδεύει όποιον υποθέτει ότι μία επιλογή καλύπτει τα πάντα.

Το fragment είναι ο άλλος μηχανισμός και διαφορετικό εργαλείο. Χωρίζει τα υπερμεγέθη πακέτα πριν από την ενθυλάκωση, ισχύει μόνο για μεταφορά UDP, προσθέτει επιβάρυνση ανά αυτοδύναμο πακέτο και τεκμηριώνεται ως έσχατη λύση για χαλασμένη ανακάλυψη. Και οι δύο ρυθμίσεις πρέπει να συμφωνούν στους ομότιμους που τερματίζουν τη σήραγγα. Όταν το ένα άκρο περιορίζει και το άλλο κατακερματίζει, προκύπτουν προειδοποιήσεις στο αρχείο καταγραφής και συμπεριφορά που κανείς δεν μπορεί να προβλέψει από τα αρχεία.

Το να χαμηλώσετε το MTU της διεπαφής είναι η χοντροκομμένη επιλογή

Το να μειώσετε το MTU της διεπαφής και στα δύο άκρα είναι το χοντροκομμένο εργαλείο. Λέει σε κάθε εσωτερικό αποστολέα μικρότερο αριθμό, κάτι που δουλεύει, και χρεώνει αυτό το κόστος σε όλη την κίνηση αντί στις ροές TCP που το χρειάζονται.

Διαλέξτε το όταν η σήραγγα μεταφέρει κίνηση που δεν μπορείτε να περιορίσετε ή όταν ο πελάτης είναι συσκευή της οποίας το προφίλ δεν ελέγχετε. Εφαρμόστε το συμμετρικά και καταγράψτε την τιμή δίπλα στο προφίλ. Μια μισοεφαρμοσμένη αλλαγή είναι χειρότερη από καμία, γιατί μοιάζει με διόρθωση.

Δοκιμάστε ξανά με τη μεταφορά που κόλλησε

Επανασυνδεθείτε ώστε να φορτωθούν οι ρυθμίσεις, ανοίξτε νέα σύνδεση και επαναλάβετε την εντολή που πάγωσε. Το μέγεθος τμήματος διαπραγματεύεται στη χειραψία, άρα μια συνεδρία που επέζησε της επανασύνδεσης κουβαλά ακόμη την παλιά τιμή. Το ping είναι κακή δοκιμή εδώ, γιατί ολόκληρη η αποτυχία είναι ότι περνούν μικρά πακέτα. Χρησιμοποιήστε τη λίστα, τη λήψη ή την επικόλληση που χάλασε.

Αν το κόλλημα επιμένει σε μικρότερο μέγεθος, κοιτάξτε αλλού: ένα τείχος προστασίας με κατάσταση που λήγει τη ροή, μια διπλή διεύθυνση ή μια διαδρομή που μετατοπίζεται στην επανασύνδεση. Καταγράψτε το μέγεθος ελέγχου που απέτυχε και τη ρύθμιση που αλλάξατε, γιατί αυτό το ζεύγος κάνει την επόμενη αναφορά χρήσιμη.

Σχετικά άρθρα