Το Git κολλάει χωρίς το VPN; Το OpenSSH σημαίνει τα πακέτα με IPQoS
Το OpenSSH σημαίνει τα πακέτα του με μια τιμή QoS εξ ορισμού. Όπου μια διαδρομή πετάει αυτή τη σήμανση, το push κολλάει μέχρι ένα τούνελ να αλλάξει τη διαδρομή των πακέτων.
Ένα κλώνισμα από το γραφείο δουλεύει, το ίδιο κλώνισμα μέσα από hotspot κινητού δουλεύει, και το ίδιο κλώνισμα από δίκτυο ξενοδοχείου κολλάει μέχρι να ενεργοποιηθεί ένα VPN. Η χειραψία SSH ολοκληρώνεται και η συνεδρία σωπαίνει στην πρώτη πραγματική μεταφορά. Μία γραμμή που προστίθεται στη ρύθμιση του πελάτη θεραπεύει το git και το ssh μαζί. Όταν μία μόνο ρύθμιση πελάτη διορθώνει πολλά εργαλεία ταυτόχρονα, το σφάλμα βρίσκεται σε αυτό που στέλνει ο πελάτης, όχι στον σύνδεσμο από τον οποίο το στέλνει.
Διαβάστε το σύμπτωμα ως διαφορά δρομολόγησης
Ένα τούνελ που θεραπεύει ένα πρόβλημα σπάνια είναι επισκευή. Αλλάζει τη διαδρομή, τον πάροχο και τις ενδιάμεσες συσκευές, ενώ ο φορητός υπολογιστής συνεχίζει να παράγει ακριβώς τα ίδια πακέτα. Αν μία διαδρομή χειρίζεται λάθος μια κεφαλίδα και μια άλλη την περνά ανέπαφη, η διαφορά βρίσκεται στην πολιτική της ενδιάμεσης συσκευής, όχι στον πελάτη. Εδώ το τούνελ είναι μάρτυρας, όχι λύση.
Το σημείο όπου πεθαίνει η συνεδρία το περιορίζει περισσότερο. Τίποτα που αποτυγχάνει στην αναζήτηση ονόματος ή στην ανταλλαγή κλειδιών δεν μοιάζει έτσι. Μια συνεδρία που πιστοποιείται, τυπώνει ένα banner και μετά παγώνει στην πρώτη μεγάλη εγγραφή έχει ήδη αποδείξει ότι η δρομολόγηση, η ονοματοδοσία και τα διαπιστευτήρια δουλεύουν όλα.
Ο πελάτης σφραγίζει ένα byte QoS σε κάθε υποδοχή SSH
Κάθε σύνδεση OpenSSH από την 7.8 και μετά φέρει στην κεφαλίδα IP μια τιμή που οι δρομολογητές μπορούν να χρησιμοποιήσουν για να δώσουν προτεραιότητα στην κίνηση. Οι συνεδρίες τερματικού παίρνουν μία τιμή και οι μαζικές αντιγραφές άλλη, με τη θεωρία ότι ένας άνθρωπος που πληκτρολογεί αξίζει καλύτερη μεταχείριση από μια μεταφορά αρχείου. Τα περισσότερα δίκτυα αγνοούν εντελώς την υπόδειξη, γι' αυτό περνά απαρατήρητη για χρόνια. Μια μειοψηφία οδηγών Wi-Fi, παρόχων κινητής και συγκεντρωτών VPN ενεργεί με βάση αυτήν, και μερικοί από αυτούς ενεργούν άσχημα.
Όταν αυτή η τιμή ξαναγράφεται ή πετιέται στη μέση της ροής, η σύνδεση δεν αποτυγχάνει, σταματά να προχωρά. Οι επαναμεταδόσεις ανεβαίνουν, το παράθυρο καταρρέει, και η εφαρμογή δεν αναφέρει τίποτα επειδή τίποτα δεν έδωσε σφάλμα. Αυτή η σιωπή είναι ο λόγος που οι άνθρωποι περιγράφουν το σύμπτωμα ως κόλλημα και όχι ως αστοχία.
Επιβεβαιώστε πρώτα την έκδοση του πελάτη με ssh -V. Οτιδήποτε στην 7.8 ή πάνω φέρει αυτή τη συμπεριφορά εξ ορισμού.
Τρεις εντολές που το ξεχωρίζουν από MTU και DNS
Δύο παρόμοιες αιτίες αξίζουν αποκλεισμό πριν επεξεργαστείτε οποιοδήποτε αρχείο ρυθμίσεων. Ένα σφάλμα MTU αφήνει τις μικρές ανταλλαγές να περάσουν και παγώνει στο πρώτο μεγάλο πακέτο, ενώ ένα σφάλμα ονομάτων δεν παράγει ποτέ συνεδρία.
ssh -o IPQoS=none -v [email protected]
ssh -G [email protected] | grep -i ipqos
sudo tcpdump -ni any -vv "tcp port 22"
Η πρώτη εντολή επαναλαμβάνει την αποτυχημένη λειτουργία με τη σήμανση απενεργοποιημένη, και μια επιτυχημένη εκτέλεση είναι η ισχυρότερη μεμονωμένη απόδειξη που υπάρχει. Η δεύτερη τυπώνει τη ρύθμιση που θα εφαρμόσει πραγματικά ο πελάτης σε αυτόν τον προορισμό, κάτι που πιάνει μια παρωχημένη καταχώριση σε αρχείο που είχατε ξεχάσει. Η τρίτη δείχνει το byte TOS και στις δύο κατευθύνσεις όσο η μεταφορά είναι κολλημένη, και το ενδιαφέρον μοτίβο είναι μια τιμή στη χαλασμένη διαδρομή και καμία στη λειτουργική.
Κάντε τη σύλληψη στον φορητό υπολογιστή και όχι στον διακομιστή, γιατί ο αποστολέας ορίζει την τιμή και κάθε κατεύθυνση μπορεί να την αλλάξει. Συγκρίνετε μια λειτουργική και μια αποτυχημένη διαδρομή με την ίδια σύλληψη, και η διαφορά εμφανίζεται χωρίς εικασίες.
Βάλτε την εξαίρεση σε ένα αρχείο, έναν κεντρικό υπολογιστή κάθε φορά
Μια εξαίρεση ανήκει δίπλα στον κεντρικό υπολογιστή στον οποίο ισχύει, με ένα σχόλιο που λέει γιατί υπάρχει.
Host gitlab.example.internal
IPQoS none
# direct route rewrites the marking; the tunnel route passes it
Το εύρος μετράει περισσότερο από την ίδια την τιμή. Μια καταχώριση μπαλαντέρ απενεργοποιεί τη συμπεριφορά παντού, πετάει μια υπόδειξη που βοηθά σε δίκτυα με καλή συμπεριφορά, και δεν αφήνει κανέναν να πει πότε εμφανίστηκε. Μια καταχώριση ανά κεντρικό υπολογιστή είναι αναγνώσιμη, αναστρέψιμη και ασήμαντα εύκολη στη διαγραφή μόλις επισκευαστεί το δίκτυο. Χρησιμοποιήστε το αρχείο χρήστη για προσωπική παράκαμψη και ένα διαχειριζόμενο αρχείο όταν ένας ολόκληρος στόλος χρειάζεται την ίδια εξαίρεση.
Να είστε σαφείς για το τι δεν καλύπτει η εξαίρεση. Ισχύει για SSH, οπότε ένα απομακρυσμένο HTTPS, ένας καθρέφτης πακέτων και ένας περιηγητής μένουν έξω από αυτήν, και μια αστοχία σε οποιοδήποτε από αυτά χρειάζεται τη δική της απόδειξη. Σε μια αλυσίδα μέσα από bastion, κάθε άλμα χρησιμοποιεί τη ρύθμιση του πελάτη, και το άλμα που κολλάει είναι αυτό που αξίζει να περιοριστεί.
Κλείστε τον κύκλο με τον ιδιοκτήτη του δικτύου
Παραδώστε το εύρημα ως τέσσερα γεγονότα: έκδοση πελάτη, διαδρομή που δοκιμάστηκε, πελάτης VPN σε χρήση, και ποια κατεύθυνση έφερε τη σήμανση. Αυτά τα τέσσερα αρκούν στον ιδιοκτήτη του δικτύου για να αναπαράγει τη μεταχείριση και να αποφασίσει αν είναι σκόπιμη.
Αν η εξαίρεση δεν θεραπεύσει το κόλλημα, αφαιρέστε την. Μια παράκαμψη που επιβιώνει από ένα αποτυχημένο πείραμα γίνεται λαογραφία, και ο επόμενος άνθρωπος ξοδεύει μια ώρα αποδεικνύοντας ότι δεν κάνει τίποτα. Αν θεραπεύσει το κόλλημα, η διαδρομή παραμένει λάθος για κάθε άλλο εργαλείο που τη διασχίζει, και η επισκευή ανήκει σε όποιον διαχειρίζεται την ενδιάμεση συσκευή.
Η αλλαγή στον πελάτη είναι ένα προσωρινό μέτρο με ημερομηνία λήξης. Γράψτε αυτή την ημερομηνία στο σχόλιο.