Το Git κολλάει στο WSL2 μέσω VPN: MTU της διεπαφής ή της διαδρομής;
Το Git πιστοποιείται και μετά κολλάει μέσα στο WSL2; Συγκρίνετε τη διεπαφή Linux με τον προσαρμογέα VPN των Windows, δοκιμάστε μία μικρότερη τιμή και σχεδιάστε τη διάρκεια ζωής της.
Το κλώνισμα πιστοποιείται, εμφανίζεται το πλήθος αντικειμένων και μετά τίποτα δεν κινείται για λεπτά. Τα Windows αναφέρουν το VPN ως συνδεδεμένο, το όνομα υπολογιστή επιλύεται και ένα πρόγραμμα περιήγησης στο ίδιο μηχάνημα φορτώνει την ίδια σελίδα αποθετηρίου χωρίς δυσκολία. Αυτός ο συνδυασμός δείχνει μέγεθος πακέτου και όχι διαπιστευτήρια, και το ερώτημα του μεγέθους πρέπει να τεθεί σε δύο σημεία επειδή το WSL2 έχει τη δική του διεπαφή Linux με δικό του MTU. Ο ένας αριθμός ανήκει στην πλευρά Windows της διαδρομής, ο άλλος στη διανομή, και η ανάγνωση μόνο του προσαρμογέα VPN αφήνει τη μισή διαδρομή ανεξέταστη.
Τρία σήματα ξεχωρίζουν ένα πρόβλημα μεγέθους από άλλα
Το πρώτο σήμα είναι το σχήμα: η δημιουργία σύνδεσης και μια μικρή ανταλλαγή πετυχαίνουν, και μετά η μαζική μεταφορά σταματά να προοδεύει. Το δεύτερο είναι η συμμετρία: το ίδιο αποθετήριο και το ίδιο μεταφορικό μέσο αποτυγχάνουν ενώ ένας άλλος κεντρικός υπολογιστής στην ίδια διαδρομή λειτουργεί, ή η αποτυχία αλλάζει με το μέγεθος του ωφέλιμου φορτίου και όχι με την ώρα της ημέρας. Το τρίτο είναι η σιωπή: κανένα σφάλμα πιστοποίησης, καμία απόρριψη διαμεσολαβητή, καμία αποτυχία επίλυσης ονομάτων, μόνο μια μεταφορά που δεν ολοκληρώνεται ποτέ.
Αυτά τα τρία μαζί δικαιολογούν μια υπόθεση μεγέθους πακέτου. Μια αποτυχία DNS, ένα ληγμένο διακριτικό, ένα απορριφθέν κλειδί SSH και ένας διαμεσολαβητής που αρνείται CONNECT παράγουν το καθένα το δικό του σφάλμα, και κανένα δεν μοιάζει με κόλλημα μετά την επιτυχία. Η διατήρηση του ίδιου αποθετηρίου, μεταφορικού μέσου και χρονικού παραθύρου κατά τη δοκιμή είναι αυτό που κάνει τη σύγκριση έντιμη.
Συγκρίνετε και τις δύο διεπαφές πριν αποφασίσετε
Συλλέξτε την όψη των Windows και την όψη του Linux στην ίδια συνεδρία, και κρατήστε τη διεύθυνση του αποθετηρίου αντί για εικασία για το ποια διεπαφή τη μεταφέρει. Η παρακάτω εντολή επιλύει πρώτα τον προορισμό ώστε η αναζήτηση διαδρομής να περιγράφει τον πραγματικό διακομιστή με τον οποίο επικοινωνεί το κλώνισμα, ο οποίος μπορεί να διαφέρει από το όνομα που έδειξε ένα πρόγραμμα περιήγησης. Εκτελέστε τα δύο μισά κοντά το ένα στο άλλο, επειδή το VPN μπορεί να αλλάξει τις μετρικές της διεπαφής μεταξύ προσπαθειών.
netsh interface ipv4 show subinterfaces
wsl -d Ubuntu -- bash -lc 'dest=$(getent ahostsv4 github.com | awk \'NR==1{print $1}\'); ip -br link show; ip route get "$dest"'
Εκτελέστε το μισό Linux μέσα στη διανομή αντί να επικολλήσετε την έξοδο σε ένα κέλυφος Windows, αφού τα ονόματα διεπαφών και η επιλογή διαδρομής έχουν νόημα μόνο εκεί. Μια επικόλληση από κέλυφος Windows αναφέρει λάθος αριθμούς με μεγάλη βεβαιότητα. Καταγράψτε τη συσκευή, την επιλεγμένη διαδρομή και το MTU από κάθε πλευρά πριν αλλάξετε οτιδήποτε.
Αποφασίστε αν ο αριθμός πρέπει να είναι μικρότερος
Ένα MTU διεπαφής μεγαλύτερο από αυτό που μπορεί να μεταφέρει η διαδρομή δεν είναι αυτόματα βλάβη, επειδή η ανακάλυψη MTU διαδρομής υπάρχει ακριβώς γι' αυτό. Η λειτουργία αποτυχίας εμφανίζεται όταν η ανακάλυψη καταστέλλεται: τα μηνύματα ICMP φιλτράρονται κάπου στη διαδρομή, ο αποστολέας δεν μαθαίνει ποτέ το όριο και τα μεγάλα πακέτα εξαφανίζονται ενώ τα μικρά περνούν. Αυτό είναι ιδιότητα της διαδρομής, όχι του Git. Είναι επίσης ο λόγος που ένα μικρό αρχείο μπορεί να πετύχει σε σύνδεση όπου ένα μεγάλο δεν τελειώνει ποτέ.
Αν τα στοιχεία το στηρίζουν, μια προσωρινή αλλαγή στη διεπαφή Linux είναι η φθηνότερη δοκιμή. Διαλέξτε μια τιμή κάτω από το χρησιμοποιήσιμο μέγεθος διαδρομής, καταγράψτε την προηγούμενη και κρατήστε όλα τα άλλα σταθερά ώστε η σύγκριση να σημαίνει κάτι. Αν η μεταφορά ολοκληρωθεί με τη μικρότερη τιμή, έχετε διάγνωση και όχι σύμπτωση.
ip -br link show dev eth0
sudo ip link set dev eth0 mtu 1380
ip -br link show dev eth0
Αποφασίστε πού πρέπει να ζει η ρύθμιση
Από τη δοκιμή προκύπτουν τρεις επιλογές, και συνήθως μόνο μία από αυτές είναι κατάλληλη. Αν η μικρότερη τιμή διορθώνει τη μεταφορά και η τιμή είναι πραγματικά απαραίτητη για αυτό το δίκτυο, η ρύθμιση χρειάζεται ιδιοκτήτη κύκλου ζωής: ένα άγκιστρο εκκίνησης στη διανομή, μια διαμόρφωση δικτύου που διαχειρίζεται η πλατφόρμα ή μια τεκμηριωμένη διαδικασία. Αν η τιμή δεν διορθώνει τίποτα, επαναφέρετέ τη και επιστρέψτε στα ερωτήματα μεταφορικού μέσου, διαμεσολαβητή και πιστοποίησης.
Το αν υπάρχει άγκιστρο εκκίνησης εξαρτάται από τις εκδόσεις Windows και WSL που χρησιμοποιούνται και από τη διαμορφωμένη λειτουργία δικτύου. Ο κατοπτρισμός του δικτύου των Windows μπορεί να αλλάξει τον τρόπο που το VPN αλληλεπιδρά με τη διανομή με τρόπους που μετράνε περισσότερο από μια προσαρμογή MTU, οπότε προσδιορίστε τη λειτουργία πριν σχεδιάσετε μια λύση παράκαμψης γι' αυτήν. Μια τιμή που ταιριάζει σε έναν πάροχο ή σε ένα προφίλ VPN δεν είναι προεπιλογή για το επόμενο.
Αυτό που πρέπει να αποφεύγεται είναι η δελεαστική τοποθέτηση: μια προνομιούχος εντολή δικτύου στο αρχείο εκκίνησης κάθε διαδραστικού κελύφους, ή sudo χωρίς κωδικό για ολόκληρο το δυαδικό ip ώστε ένα σενάριο να εκτελεί μία γραμμή. Και τα δύο μετατρέπουν μια διάγνωση σε μόνιμη έκθεση και κάνουν το αρχικό πρόβλημα δυσκολότερο να φανεί αργότερα.
Επαληθεύστε μετά από καθαρή εκκίνηση και μετά ανατρέψτε
Μια αλλαγή που επιβιώνει μόνο μέχρι την επανεκκίνηση της διανομής δεν είναι διόρθωση. Επανεκκινήστε τη διανομή, συνδέστε ξανά το VPN και επαναλάβετε την αρχική λειτουργία Git αντί για υποκατάστατο όπως ping ή ένα μικρό αίτημα HTTP. Στη συνέχεια επιβεβαιώστε ότι η διεπαφή φέρει την επιθυμητή τιμή στη νέα συνεδρία.
ip -br link show dev eth0
ip route get "$(getent ahostsv4 github.com | awk 'NR==1{print $1}')"
Κρατήστε την καταγεγραμμένη αρχική τιμή δίπλα στην αλλαγή ώστε το πείραμα να μπορεί να αναιρεθεί καθαρά, και σημειώστε ποια οικογένεια διευθύνσεων δοκιμάστηκε, αφού ένα αποτέλεσμα IPv4 δεν λέει τίποτα για σύνδεση IPv6 στον ίδιο κεντρικό υπολογιστή. Η τεκμηρίωση δικτύωσης του WSL περιγράφει τις λειτουργίες που καθορίζουν πώς πρέπει να μοιάζει μια διόρθωση· ο ίδιος ο αριθμός MTU είναι τοπική μέτρηση, όχι σύσταση.