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

Ένας βρόχος αποφασίζεται άλμα προς άλμα. Η τοποθεσία A επιλέγει το B ως επόμενο άλμα για τον προορισμό, το B επιλέγει το A για τον ίδιο προορισμό, και το πακέτο λήγει στο TTL μετά από δύο κύκλους. Το αναβόσβημα το αποφασίζει αντίθετα το πρωτόκολλο δρομολόγησης: το πρόθεμα αποσύρεται, επανεγκαθίσταται ή αντικαθίσταται από εναλλακτικό επόμενο άλμα, οπότε μερικά πακέτα δεν έχουν καθόλου διαδρομή ενώ άλλα ακολουθούν μια απολύτως καλή.

Οι τρεις έλεγχοι που λύνουν το ερώτημα

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

ObservationRouting loopRoute flapping
Prefix in the tableInstalled, same next hop throughoutWithdrawn and reinstalled, or next hop alternates
Hop countReaches zero at the same two gatewaysExpires only while the prefix is missing
Failure shapeConsistent loss for that prefix from every sourceBursts, often after a link or peer event
Where the fix belongsThe site that owns the prefix, plus filters on the transit pathAdvertisement, hold timers, or the flapping link

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

Έλεγχος πρώτος: είναι το πρόθεμα σταθερό ή αναδεύεται

Ρωτήστε τον πυρήνα τι εγκατέστησε, όχι τι υπόσχεται το αρχείο ρυθμίσεων. Σε πύλη Linux, το ip route get 10.20.30.40 εκτελεί την ίδια αναζήτηση που εκτελεί η διαδρομή προώθησης, μαζί με τους πίνακες πολιτικής, ενώ το ip route show 10.20.30.0/24 δείχνει την ίδια την καταχώριση. Το ip monitor route μεταδίδει κάθε αλλαγή τη στιγμή που συμβαίνει, που είναι ο ταχύτερος τρόπος να βλέπετε ένα πρόθεμα να έρχεται και να φεύγει.

Σε δρομολογητή με FRR ή BIRD, ο ενδιαφέρων πίνακας δεν είναι της προώθησης. Το show ip bgp 10.20.30.0/24 επιστρέφει την επιλεγμένη διαδρομή και τον χρόνο λειτουργίας της· ένας χρόνος λειτουργίας που μηδενίζεται κάθε λίγα λεπτά είναι αναβόσβημα που μπορείτε να ονομάσετε, όχι βρόχος. Το show ip bgp summary δείχνει την κατάσταση των γειτόνων και τα πλήθη προθεμάτων, οπότε ένας γείτονας που πέφτει συνεχώς αφαιρεί την ευθύνη από τη διαδρομή προώθησης.

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

Έλεγχος δεύτερος: δείχνει το επόμενο άλμα πίσω στη σήραγγα άφιξης

Ένας βρόχος χρειάζεται δύο πύλες που συμφωνούν. Στην τοποθεσία που λαμβάνει το πακέτο, κοιτάξτε τη διαδρομή που θα χρησιμοποιήσει το πακέτο για να βγει: ip route get 10.20.30.40 from 10.10.5.20 με την πραγματική διεύθυνση προέλευσης, γιατί ένας κανόνας πολιτικής μπορεί να απαντήσει διαφορετικά από τον κύριο πίνακα. Έπειτα επαναλάβετε την αναζήτηση στην τοποθεσία που το έστειλε. Αν κάθε πλευρά επιλέγει την άλλη ως επόμενο άλμα για το ίδιο πρόθεμα, ο βρόχος αποδεικνύεται και καμία σύλληψη δεν θα προσθέσει τίποτα.

Η αιτία είναι σχεδόν πάντα μια αναγγελία που δεν έπρεπε να είχε διασχίσει τη σήραγγα. Μια προεπιλεγμένη διαδρομή που αναδιανέμεται στη σήραγγα, ένα άθροισμα που καλύπτει το δικό του υποδίκτυο της απομακρυσμένης τοποθεσίας, ή μια στατική διαδρομή προς τον ομότιμο για παν ενδεχόμενο δημιουργούν όλα το ίδιο αμοιβαίο επόμενο άλμα. Η σήραγγα μπορεί να είναι πλήρως εδραιωμένη και παρόλα αυτά να μεταφέρει κίνηση σε κύκλο· οι σημειώσεις προώθησης του strongSwan περιγράφουν την πλευρά δρομολόγησης αυτής της απαίτησης.

Το WireGuard αξίζει δική του σημείωση, γιατί δεν υπάρχει αναγγελία να κατηγορήσετε. Το wg show απαριθμεί τα AllowedIPs για κάθε ομότιμο, και ο πυρήνας δέχεται προορισμό για έναν ομότιμο μόνο αν πέφτει μέσα σε αυτό το εύρος. Βρόχος εκεί είναι ένα επικαλυπτόμενο εύρος AllowedIPs ή μια στατική διαδρομή που δείχνει πίσω μέσω της διεπαφής, οπότε η επισκευή ζει σε αυτά τα δύο σημεία και πουθενά αλλού.

Έλεγχος τρίτος: διαβάστε το πλήθος αλμάτων, όχι τα αστέρια

Το traceroute -n -I 10.20.30.40 και το mtr -n -r -c 20 10.20.30.40 δείχνουν και τα δύο τη διαδρομή, και η λειτουργία ICMP συχνά επιβιώνει από φιλτράρισμα που τρώει τους ανιχνευτές UDP. Ένας βρόχος μοιάζει με μια σύντομη επαναλαμβανόμενη ακολουθία των ίδιων δύο διευθύνσεων πύλης, με το TTL να ανεβαίνει κάθε φορά. Μια πτώση μοιάζει με αστέρια μετά την τελευταία πύλη που απάντησε, και ένα μόνο σιωπηλό άλμα δεν είναι απόδειξη τίποτα.

Όταν η διαδρομή είναι αμφίσημη, διαβάστε το TTL στο καλώδιο. Το tcpdump -ni any -vv icmp και στις δύο πύλες δείχνει το TTL κάθε πακέτου και τη διεύθυνση προέλευσης κάθε απάντησης υπέρβασης χρόνου. Αν ένα πακέτο φτάνει στην απομακρυσμένη τοποθεσία με TTL χαμηλότερο από το πλήθος αλμάτων που μπορεί να περιέχει η διαδρομή, κάτι προσθέτει άλματα που το traceroute δεν σας δείχνει, και αυτό συμβαίνει όταν το τείχος προστασίας μιας τοποθεσίας απαντά σε ανιχνευτές για λογαριασμό μιας άλλης.

Επισκευάστε τον ιδιοκτήτη του προθέματος και μετά επαληθεύστε τις δύο κατευθύνσεις

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

Μετά την αλλαγή, επαληθεύστε την πορεία προς τα εμπρός και την επιστροφή χωριστά, γιατί ένας βρόχος μπορεί να αντικατασταθεί από μια μαύρη τρύπα χωρίς καμία ορατή βελτίωση του συμπτώματος. Εκτελέστε το ip route get και από τα δύο άκρα, στείλτε κίνηση από κεντρικό υπολογιστή που δεν είναι η πύλη, και αφήστε το ip monitor route να τρέχει για τουλάχιστον ένα χρονόμετρο συγκράτησης ώστε ένα αναβόσβημα να μη λογιστεί ως επισκευή.

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

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