Κρύβει μια προσωρινή μνήμη διαδρομών VPN την αλλαγή σας; Ελέγξτε τρία πράγματα
Το Linux δεν έχει καθολική προσωρινή μνήμη διαδρομών για εκκαθάριση. Μια παλιά δοκιμή συνήθως σημαίνει παλιό socket, μια εγγραφή NAT ή ένα προφίλ που εφαρμόστηκε ξανά. Τρεις έλεγχοι τα ξεχωρίζουν.
Το άδειασμα της προσωρινής μνήμης διαδρομών είναι το πρώτο ένστικτο όταν μια αλλαγή δεν τίθεται σε ισχύ, και στο σύγχρονο Linux είναι χαμένος κόπος: η καθολική προσωρινή μνήμη διαδρομών IPv4 αφαιρέθηκε πριν από χρόνια, οπότε το ip route show cache δεν εκτυπώνει τίποτα και δεν υπάρχει τίποτα να καθαριστεί. Η κατάσταση που σας ξεγελά ζει ένα επίπεδο πιο πάνω: σε ένα socket, μια αντιστοίχιση NAT, έναν resolver ή έναν διαχειριστή δικτύου που εφάρμοσε ξανά το παλιό προφίλ. Τρεις ερωτήσεις χωρίζουν αυτές τις περιπτώσεις: έρχεται η λάθος διαδρομή από νέα ροή ή από παλιά σύνδεση, αποθηκεύει η πλατφόρμα σας διαδρομές σε προσωρινή μνήμη καθόλου, και βρίσκεται η κατάσταση στη δρομολόγηση ή πάνω από αυτήν. Απαντήστε τις πριν επαναφέρετε μια διεπαφή.
Έλεγχος ένα: έρχεται η παλιά διαδρομή από νέα ροή;
Μια εδραιωμένη σύνδεση κρατά τη διαδρομή με την οποία δημιουργήθηκε. Γι’ αυτό μια συνεδρία SSH μέσω της σήραγγας επιβιώνει από μια αλλαγή στον πίνακα δρομολόγησης, ενώ μια νέα συνεδρία παίρνει αμέσως τη νέα διαδρομή, και γι’ αυτό το «η αλλαγή δεν έκανε τίποτα» σημαίνει συχνά «το παλιό socket την κρατά ακόμα». Δοκιμάστε με νέα διεργασία, όχι με το παράθυρο που έχετε ήδη ανοιχτό.
ss -tnp | head
ip route get 1.1.1.1
curl -m 5 -sS -o /dev/null -w '%{remote_ip}
' https://example.com
Η τελευταία εντολή εκτυπώνει τη διεύθυνση που έφτασε πραγματικά η νέα σύνδεση, που είναι ο φθηνότερος τρόπος να δείτε την πραγματική διαδρομή χωρίς να εμπιστεύεστε ένα παράθυρο κατάστασης. Συγκρίνετέ την με τη διεύθυνση προέλευσης που υποτίθεται ότι θα χρησιμοποιούσε το namespace ή η διεπαφή.
Αν μια νέα ροή ακολουθεί τη σωστή διαδρομή και η παλιά δεν ανακάμπτει, σταματήστε να κοιτάτε τη δρομολόγηση. Η διαδρομή ήταν σωστή· η συνεδρία ήταν παλιά.
Έλεγχος δύο: κρατά η πλατφόρμα σας καθόλου προσωρινή μνήμη διαδρομών;
Στο Linux η απάντηση είναι όχι, με την έννοια που εννοούν οι περισσότεροι οδηγοί. Δεν υπάρχει καθολική προσωρινή μνήμη προορισμών για απόρριψη, και η εγγραφή ανά socket που κρατά μια επιλεγμένη διαδρομή απελευθερώνεται μαζί με το socket. Η ενότητα προσωρινής μνήμης του εγχειριδίου ip-route περιγράφει ιστορική συμπεριφορά, όχι κάτι που μπορείτε να αδειάσετε σε τρέχοντα πυρήνα.
Άλλες πλατφόρμες διαφέρουν, και εδώ πάει στραβά η αντιγραφή συμβουλών. Τα Windows κρατούν προσωρινή μνήμη προορισμών που μπορείτε να καθαρίσετε με το netsh interface ip delete destinationcache. Τα BSD και macOS εκθέτουν αναζητήσεις ανά προορισμό μέσω του route -n get, και οι προσωρινές τους μνήμες λήγουν με το δικό τους πρόγραμμα. Μια εντολή που λειτουργεί σε ένα από αυτά δεν κάνει απολύτως τίποτα στο Linux, και γι’ αυτό η ίδια διόρθωση φαίνεται να αποτυγχάνει στους μισούς που τη δοκιμάζουν.
Ένας πίνακας NAT ή conntrack δεν είναι προσωρινή μνήμη διαδρομών, αν και παράγει το ίδιο σύμπτωμα. Μια ροή που μεταφράστηκε πριν από την αλλαγή σας κρατά τη μετάφρασή της, και το conntrack -L θα τη δείξει πολύ αφού η πολιτική δρομολόγησης έχει προχωρήσει. Αυτή είναι παλιά κατάσταση, αλλά ο καθαρισμός διαδρομών δεν θα την αγγίξει.
Έλεγχος τρία: βρίσκεται η κατάσταση στη δρομολόγηση ή πάνω από αυτήν;
Διαβάστε την τρέχουσα αναζήτηση πριν διαβάσετε οτιδήποτε άλλο: ip route get για τον προορισμό, μετά την ίδια εντολή με from και τη διεύθυνση προέλευσης, μετά ip rule show. Αν αυτά τα τρία συμφωνούν με αυτό που σκοπεύατε, η δρομολόγηση δεν είναι το επίπεδο προς διόρθωση, και η παλιά παρατήρηση ήρθε από αλλού.
Τρεις συνήθεις ύποπτοι κάθονται πάνω από τη δρομολόγηση. Ένας διαχειριστής δικτύου μπορεί να επανεγκαταστήσει μια διαδρομή από αποθηκευμένο προφίλ δευτερόλεπτα αφού τη διαγράψετε, οπότε η αλλαγή σας φαίνεται να επανέρχεται· ελέγξτε το nmcli connection show --active και την κατάσταση της μονάδας πριν ξαναεπεξεργαστείτε τον πίνακα. Μια προσωρινή μνήμη resolver επιστρέφει παλιά διεύθυνση, που μοιάζει με αποτυχία δρομολόγησης μέχρι να ρωτήσετε το ίδιο όνομα με εργαλείο που παρακάμπτει την προσωρινή μνήμη. Μια δεξαμενή συνδέσεων μιας εφαρμογής κρατά ένα λειτουργικό socket προς τον παλιό προορισμό και δεν ζητά ποτέ από τον πυρήνα νέα απόφαση.
Τι σας επιτρέπουν να συμπεράνετε οι τρεις απαντήσεις
Βάλτε τις απαντήσεις μαζί και η επισκευή συνήθως διατυπώνεται μόνη της. Μια νέα ροή που ακολουθεί τη λάθος διαδρομή σε πλατφόρμα χωρίς προσωρινή μνήμη διαδρομών σημαίνει ότι η πολιτική είναι πραγματικά λάθος, οπότε διαβάστε τους κανόνες και τον πίνακα που εγκατέστησε η σήραγγα. Μια νέα ροή που ακολουθεί τη σωστή διαδρομή ενώ η παλιά συνεδρία κολλάει σημαίνει ότι το πρόβλημα είναι η εφαρμογή ή το socket. Σωστές διαδρομές με χαλασμένη παρατήρηση και στις δύο περιπτώσεις σημαίνει ότι η κατάσταση είναι πάνω από τη δρομολόγηση.
Αντισταθείτε στη γενική ανανέωση. Η επανεκκίνηση της στοίβας δικτύου ή η διαγραφή κάθε διαδρομής σε μηχάνημα του οποίου η προεπιλεγμένη διαδρομή είναι η σήραγγα μπορεί να κόψει ακριβώς τη σύνδεση που χρησιμοποιείτε για να το διορθώσετε, και καταστρέφει τα στοιχεία που θα σας έλεγαν ποιο επίπεδο απέτυχε.
Αν πρέπει οπωσδήποτε να καθαρίσετε κάτι, καθαρίστε το μικρότερο πράγμα που ταιριάζει στη διάγνωση: τα sockets μιας διεργασίας, μια εγγραφή conntrack, την προσωρινή μνήμη του resolver. Έπειτα επαναλάβετε την ίδια δοκιμή νέας ροής και σημειώστε τι άλλαξε.
Κρατήστε τις τρεις καταστάσεις χωριστά στις σημειώσεις σας
Η αποθηκευμένη διαμόρφωση, η τρέχουσα αναζήτηση και η παρατηρούμενη ροή είναι τρία διαφορετικά γεγονότα, και το να τα συνθλίψετε σε «την προσωρινή μνήμη» είναι αυτό που κάνει το σφάλμα δύσκολο να αναπαραχθεί. Σημειώστε το προφίλ ή τη μονάδα που κατέχει τη διαδρομή, την έξοδο του ip route get και την προέλευση και τον προορισμό της πραγματικής σύνδεσης.
Σημειώστε δίπλα την πλατφόρμα και την έκδοση του πελάτη, γιατί μια διόρθωση που καθαρίζει την προσωρινή μνήμη προορισμών των Windows δεν είναι διόρθωση που ισχύει για κεντρικό υπολογιστή Linux, και μια διαδικασία αντιγραμμένη μεταξύ των δύο διδάσκει το λάθος μάθημα. Όταν παραδώσετε το πρόβλημα σε κάποιον άλλο, αυτές οι τρεις γραμμές τού επιτρέπουν να αναπαραγάγει την αποτυχημένη κατάσταση αντί να μαντεύει.