Linux EHOSTUNREACH με OpenVPN: ποιο επόμενο άλμα απέτυχε;
Το EHOSTUNREACH μπορεί να προέλθει από ρητή μη προσβάσιμη διαδρομή, νεκρό γείτονα ή απομακρυσμένη αναφορά. Διαβάστε την επιλεγμένη διαδρομή και το επόμενο άλμα πριν αγγίξετε την κρυπτογραφία.
Το EHOSTUNREACH είναι τοπική απόφαση εξίσου συχνά με απομακρυσμένη αποτυχία. Ο πυρήνας μπορεί να απορρίψει ένα πακέτο επειδή μια διαδρομή λέει ότι ο προορισμός είναι μη προσβάσιμος, επειδή το επόμενο άλμα Ethernet δεν απάντησε ποτέ ή επειδή έφτασε αναφορά ICMP host-unreachable από πιο πέρα στη διαδρομή. Κάθε πηγή ζει σε διαφορετικό πίνακα ή κρυφή μνήμη και κάθε μία διορθώνεται σε διαφορετικό σημείο. Διαβάστε την επιλεγμένη διαδρομή και την κατάσταση του επόμενου άλματος πριν αγγίξετε κρυπτογράφηση ή επανεγκαταστήσετε τη σήραγγα.
Επιλέξτε τη διεύθυνση και τον namespace που χρησιμοποιεί πραγματικά ο πελάτης
Ξεκινήστε καρφιτσώνοντας τον προορισμό και τον namespace δικτύου που παρήγαγε το σφάλμα. Ένας πελάτης VPN μπορεί να τρέχει στον δικό του namespace, και μια αναζήτηση από τον προεπιλεγμένο namespace συμβουλεύεται διαφορετικό πίνακα δρομολόγησης με διαφορετικούς κανόνες πολιτικής.
Η αναζήτηση πρέπει να χρησιμοποιεί το ίδιο πλαίσιο πηγής, σήμανσης και πίνακα με την εφαρμογή που αποτυγχάνει, αλλιώς μπορεί να απαντήσει σε ερώτηση που δεν έθεσε κανείς. Για έναν ενδεικτικό IPv4 peer, οι έλεγχοι μόνο ανάγνωσης είναι:
ip -4 route get 198.51.100.25
ip -4 neigh show 198.51.100.1
ip -4 route show table all | grep -w unreachable
Ένα αποτέλεσμα από διοικητικό κέλυφος αποδεικνύει μόνο τι θα έκανε αυτό το κέλυφος. Αν ο πελάτης ορίζει σήμανση firewall ή προσδένεται σε VRF, επαναλάβετε την αναζήτηση με την αντίστοιχη σήμανση ή μέσα στο VRF και συγκρίνετε την επιλεγμένη διαδρομή και το επόμενο άλμα. Η πρώτη διεύθυνση που πρέπει να επιβεβαιωθεί είναι η διεύθυνση peer στο προφίλ, όχι το cluster ή η υπηρεσία που ονομάζει ο χρήστης.
Μια ρητή μη προσβάσιμη διαδρομή απορρίπτει το πακέτο τοπικά
Μια διαδρομή τύπου unreachable είναι σκόπιμη τοπική απάντηση. Λέει στον πυρήνα να απορρίψει το πακέτο και να επιστρέψει EHOSTUNREACH στον αποστολέα, γι' αυτό το σφάλμα εμφανίζεται αμέσως και χωρίς κίνηση να φεύγει από το μηχάνημα. Κάποιος, ή κάποια αυτοματοποίηση, έβαλε αυτή τη διαδρομή εκεί επίτηδες.
Οι τύποι διαδρομών δεν είναι εναλλάξιμοι. Το blackhole απορρίπτει το πακέτο χωρίς σφάλμα στον αποστολέα, το prohibit επιστρέφει EACCES και το unreachable επιστρέφει EHOSTUNREACH. Ένας βοηθός VPN που εγκαθιστά διαδρομή καταβόθρας κατά την επανασύνδεση μπορεί επομένως να παραγάγει έναν καταιγισμό σφαλμάτων host-unreachable που εξαφανίζονται μόλις σηκωθεί η σήραγγα, ενώ μια διαδρομή blackhole θα παρήγαγε σιωπηλά timeouts.
Αναζητήστε τον τύπο σε όλους τους πίνακες πριν κατηγορήσετε το απομακρυσμένο άκρο. Ο κανόνας που επιλέγει τον πίνακα μετράει όσο και η διαδρομή μέσα σε αυτόν, και μια διαδρομή που προστέθηκε στον κύριο πίνακα δεν θα βοηθήσει έναν πελάτη του οποίου ο κανόνας πολιτικής στέλνει την κίνησή του αλλού.
Ένας νεκρός γείτονας παράγει το ίδιο σφάλμα στο Ethernet
Όταν η επιλεγμένη διαδρομή χρησιμοποιεί πύλη on-link, η παράδοση χρειάζεται μια επιλυμένη διεύθυνση επιπέδου ζεύξης. Ο πυρήνας στέλνει αίτημα ARP ή γείτονα IPv6, και αν δεν φτάσει απάντηση το πακέτο δεν μπορεί να πλαισιωθεί. Η αποστολή τότε αποτυγχάνει με EHOSTUNREACH παρόλο που η ίδια η διαδρομή είναι έγκυρη.
Ο πίνακας γειτόνων ονομάζει το στάδιο. Το INCOMPLETE σημαίνει ότι μια επίλυση είναι ακόμη σε εξέλιξη, το FAILED σημαίνει ότι η τελευταία προσπάθεια δεν πήρε απάντηση, και το REACHABLE ή STALE σημαίνει ότι ο πυρήνας έχει μια χρησιμοποιήσιμη διεύθυνση. Μια καταχώριση FAILED για την πύλη VPN είναι τοπικό πρόβλημα παράδοσης, όχι απόδειξη για την απέναντι πλευρά της σήραγγας.
Διαβάστε την καταχώριση για το πραγματικό επόμενο άλμα, όχι για την απομακρυσμένη διεύθυνση internet. Μια απομακρυσμένη διεύθυνση συνήθως φτάνεται μέσω δρομολογητή, οπότε δεν θα έχει δική της εγγραφή ARP· το να ζητάτε μία είναι κατηγορικό σφάλμα που στέλνει ανθρώπους να ψάχνουν μια καταχώριση που δεν έπρεπε ποτέ να υπάρχει.
Απομακρυσμένες αναφορές και ασύγχρονα σφάλματα UDP
Το EHOSTUNREACH μπορεί επίσης να έρθει από έξω. Ένας δρομολογητής που δεν μπορεί να προωθήσει το πακέτο μπορεί να στείλει ICMP host unreachable, και ο πυρήνας περνά αυτή την αναφορά στο socket που κατέχει τη ροή. Σε αυτή την περίπτωση η διαδρομή και ο γείτονας είναι εντάξει, και η αποτυχία ανήκει σε άλμα πέρα από το τοπικό δίκτυο.
Το UDP κάνει την απόδοση δυσκολότερη. Ένα σφάλμα που επιστρέφεται από μεταγενέστερη κλήση send ή receive μπορεί να αναφέρεται σε προηγούμενο datagram, οπότε η διεύθυνση και ο χρόνος της αποτυγχάνουσας κλήσης μπορεί να μην ταιριάζουν με το πακέτο που προκάλεσε την αναφορά. Ένα συνδεδεμένο UDP socket λαμβάνει το σφάλμα μία φορά, και ένα μη συνδεδεμένο socket μπορεί να μην το δει ποτέ.
Γι' αυτό ο χρόνος ανήκει στα στοιχεία. Σημειώστε πότε εμφανίστηκε το σφάλμα, ποια διεύθυνση peer χρησιμοποίησε το socket και αν η σήραγγα μόλις είχε επανασυνδεθεί. Ένας καταιγισμός αμέσως μετά από αλλαγή διαδρομής δείχνει στον τοπικό πίνακα· ένα μεμονωμένο σφάλμα λεπτά μέσα σε σταθερή ροή δείχνει σε αναφορά διαδρομής.
Χωρίστε τα επίπεδα πριν αλλάξετε την κρυπτογράφηση
Τρεις ερωτήσεις ταξινομούν το σφάλμα. Επέλεξε ο πυρήνας μια διαδρομή που απορρίπτει τον προορισμό; Επέλεξε έγκυρη διαδρομή αλλά απέτυχε να επιλύσει το επόμενο άλμα; Ή έφτασε αναφορά από πέρα από το τοπικό δίκτυο; Μόνο η τρίτη περίπτωση μπορεί να εμπλέξει το απομακρυσμένο άκρο της σήραγγας, και ακόμη και τότε δεν εμπλέκει την κρυπτογράφηση.
Προβλήματα αυθεντικοποίησης και διαπραγμάτευσης εμφανίζονται ως δικά τους σφάλματα αφού το μεταφορικό επίπεδο φτάσει στον peer. Η αλλαγή κρυπτογράφησης ή η επανεγκατάσταση του πελάτη δεν μπορεί να διορθώσει μια τοπική διαδρομή unreachable, και καταστρέφει τα στοιχεία διαδρομής και γείτονα που θα χρειαζόσασταν για την πραγματική αιτία.
Καταγράψτε τον προορισμό, τον namespace, τον επιλεγμένο πίνακα, το επόμενο άλμα, την κατάσταση του γείτονα και τον χρόνο του σφάλματος πριν από την πρώτη αλλαγή. Επανεκτελέστε την ίδια αναζήτηση μετά τη διόρθωση· μια διαδρομή που τώρα δείχνει στη σήραγγα και μια καταχώριση γείτονα που τώρα επιλύεται είναι ισχυρότερη απόδειξη από ένα επιτυχημένο ping σε άσχετη διεύθυνση.