Πίνακας δρομολόγησης έναντι πραγματικής αναζήτησης: πού πηγαίνει η κίνηση VPN
Ξεκινήστε από έναν προορισμό και την πηγή του και μετά ελέγξτε ποιος κανόνας και ποιος πίνακας καθορίζουν στην πραγματικότητα τη διαδρομή. Μια πλήρης εκτύπωση του πίνακα χωρίς αυτό το πλαίσιο παραπλανά.
Η εκτύπωση του πίνακα δρομολόγησης είναι το λιγότερο χρήσιμο διαγνωστικό στην αντιμετώπιση προβλημάτων VPN και το πιο συχνά επικολλημένο. Σαράντα γραμμές με προθέματα σάς λένε τι θα μπορούσε να κάνει το μηχάνημα, όχι τι έκανε για το αίτημα που απέτυχε. Ο μηχανισμός που θέλετε πραγματικά είναι η αναζήτηση: δεδομένης αυτής της πηγής και αυτού του προορισμού, ποιος κανόνας ταίριαξε, ποιος πίνακας συμβουλεύτηκε και ποια διεπαφή και ποιο επόμενο άλμα βγήκαν. Ξεκινήστε από έναν προορισμό και μία πηγή, μετά διαβάστε τον πίνακα με αυτή την ερώτηση στο μυαλό σας, και η ίδια έξοδος γίνεται απόδειξη αντί για θόρυβο.
Ένας πίνακας είναι σύνολο υποψηφίων, όχι απόφαση
Κάθε καταχώριση περιγράφει ένα πρόθεμα και τι να γίνει με την κίνηση που ταιριάζει: στείλτε την σε μια διεπαφή, δώστε την σε ένα επόμενο άλμα ή απορρίψτε την. Τίποτα σε αυτή τη λίστα δεν είναι ταξινομημένο με βάση την πρόθεση, και η καταχώριση που φαίνεται πιο συγκεκριμένη σε έναν άνθρωπο δεν είναι πάντα αυτή που επιλέγει ο πυρήνας, επειδή η επιλογή ακολουθεί την αντιστοίχιση του μεγαλύτερου προθέματος και, μεταξύ ίσων προθεμάτων, τη μετρική.
Άρα το πρώτο βήμα είναι να ρωτήσετε τον πυρήνα αντί να διαβάσετε τη λίστα. Η εντολή αναζήτησης απαντά για έναν προορισμό, και με όρισμα πηγής απαντά για το ακριβές ζεύγος που θα χρησιμοποιούσε μια προωθημένη ή δεσμευμένη σύνδεση:
ip route get 198.51.100.10
ip route get 198.51.100.10 from 10.80.0.25
ip -6 route get 2001:db8:10::40
Κάθε διεύθυνση παραπάνω είναι παράδειγμα τεκμηρίωσης. Το θέμα είναι η μορφή της απάντησης: διεπαφή, επιλεγμένη διεύθυνση πηγής, πύλη και ο πίνακας από τον οποίο προήλθε η καταχώριση. Αν αυτή η έξοδος δεν ταιριάζει με τη διεπαφή που περιμένατε, εντοπίσατε το πρόβλημα με μία εντολή, και κανένα διάβασμα του πλήρους πίνακα δεν θα σας έλεγε ποιος υποψήφιος κέρδισε.
Η αναζήτηση περνά πρώτα από κανόνες και μετά από πίνακες
Στο Linux η απόφαση έχει δύο στάδια. Οι κανόνες πολιτικής αξιολογούνται με σειρά προτεραιότητας, και ο πρώτος κανόνας που ταιριάζει ονομάζει έναν πίνακα προς συμβουλή· αυτός ο πίνακας κάνει τότε την αντιστοίχιση μεγαλύτερου προθέματος. Ένας κανόνας μπορεί να ταιριάζει με πηγή, προορισμό, σήμανση τείχους προστασίας, διεπαφή ή συνδυασμό, γι' αυτό μια εκτύπωση του κύριου πίνακα μπορεί να είναι απολύτως ακριβής και εντελώς άσχετη με το πακέτο που ερευνάτε.
ip rule show
ip route show table all | head -40
ip route show table 100
Αν ένας κανόνας στέλνει κίνηση από τη δεξαμενή VPN σας στον πίνακα 100, τότε ο πίνακας 100 είναι αυτός που μετράει, και ο κύριος πίνακας είναι δόλωμα. Αυτός είναι επίσης ο μηχανισμός πίσω από τη δρομολόγηση βάσει πηγής σε έναν δρομολογητή: ο ίδιος προορισμός μπορεί να έχει δύο διαφορετικές απαντήσεις ανάλογα με το από πού ήρθε το πακέτο, και μόνο η αναζήτηση με όρισμα πηγής αποκαλύπτει ποια ισχύει.
Το IPv6 έχει τους δικούς του κανόνες και πίνακες. Ένας σχεδιασμός που τρέχει και τις δύο οικογένειες χρειάζεται και τις δύο αναζητήσεις, και μια λειτουργική απάντηση IPv4 δεν λέει τίποτα για τη διαδρομή v6 που μπορεί να προτιμήσει ένας πελάτης διπλού στοίβας.
Τι εγκαθιστά ο πελάτης VPN
Οι πελάτες συνήθως δεν αντικαθιστούν την προεπιλεγμένη διαδρομή, γιατί αυτό θα έσπαγε την εξωτερική διαδρομή του ίδιου του τούνελ. Εγκαθιστούν κάτι πιο συγκεκριμένο που κερδίζει στο μήκος προθέματος: ένα ζεύγος μισο-προεπιλεγμένων που καλύπτουν το 0.0.0.0/1 και το 128.0.0.0/1 είναι το κλασικό κόλπο, αφού και τα δύο είναι μακρύτερα προθέματα από το 0.0.0.0/0 και μαζί καλύπτουν όλο τον χώρο. Άλλοι εγκαθιστούν συγκεκριμένα ιδιωτικά προθέματα συν έναν κανόνα πολιτικής, και μερικοί προσθέτουν μια σήμανση ώστε να συλλαμβάνεται μόνο επιλεγμένη κίνηση.
Γι' αυτό το "το VPN δεν άλλαξε την προεπιλεγμένη μου διαδρομή" δεν είναι απόδειξη αποτυχίας. Ελέγξτε τι πρόσθεσε τελικά και αν ο εν λόγω προορισμός πέφτει μέσα σε αυτά τα προθέματα:
ip route show | grep -E 'tun|wg|ppp|ipsec'
ip route get 10.20.30.40 from 10.80.0.25
Δύο μισο-διαδρομές είναι εύκολο να χαθούν σε μια εκτύπωση γιατί δεν μοιάζουν με προεπιλεγμένη. Μια διαμόρφωση split-tunnel που ξέχασε να συμπεριλάβει ένα πρόθεμα παράγει ακριβώς το σύμπτωμα που κυνηγάτε: η εφαρμογή που θα έπρεπε να χρησιμοποιεί το τούνελ επιλύει και συνδέεται τοπικά. Συγκρίνετε τα εγκατεστημένα προθέματα με τους προορισμούς που χρειάζεται πραγματικά ο χρήστης, όχι με τις διευθύνσεις που τυχαία δοκιμάσατε. Μια λίστα split-tunnel που καλύπτει τον διακομιστή αρχείων αλλά όχι τον resolver του παράγει σύνδεση που επιλύεται σε δημόσια διεύθυνση και μετά αποτυγχάνει στην ταυτοποίηση, κάτι που μοιάζει με πρόβλημα κωδικού και είναι πρόβλημα διαδρομής.
Η εξωτερική διαδρομή πρέπει να επιβιώσει κι αυτή
Το τούνελ είναι το ίδιο κίνηση. Τα πακέτα που μεταφέρουν το ενθυλακωμένο ωφέλιμο φορτίο πηγαίνουν στη διεύθυνση του ομότιμου μέσω της φυσικής διεπαφής, και αυτή η διαδρομή δεν πρέπει να δρομολογηθεί πίσω στο τούνελ. Όταν συμβεί, παίρνετε τη χαρακτηριστική αποτυχία όπου το τούνελ στήνεται και μετά σταματά να περνά κίνηση, γιατί η μεταφορά για το τούνελ είναι τώρα μέσα στο τούνελ.
Ελέγξτε τη διεύθυνση του ομότιμου όπως ελέγξατε τον εσωτερικό προορισμό, και επιβεβαιώστε ότι επιλύεται στη φυσική διεπαφή και όχι στο τούνελ:
ip route get 203.0.113.10
traceroute -n -m 5 203.0.113.10
Μια αναδρομική διαδρομή, ένας κανόνας πολιτικής που πιάνει τον ομότιμο, ή μια προεπιλεγμένη διαδρομή που αντικαταστάθηκε από πελάτη πλήρους τούνελ είναι τα τρία συνηθισμένα αίτια. Και τα τρία είναι ορατά στην εξωτερική αναζήτηση, και κανένα δεν είναι ορατό σε εκτύπωση του κύριου πίνακα που λήφθηκε εκ των υστέρων.
Τι δεν μπορεί να σας πει η έξοδος δρομολόγησης
Μια σωστή αναζήτηση σημαίνει ότι ο πυρήνας θα έστελνε το πακέτο κάπου λογικά. Δεν σημαίνει ότι το τείχος προστασίας το επιτρέπει, η πολιτική IPsec το καλύπτει, ο κανόνας NAT το μεταφράζει ή ότι η απομακρυσμένη πλευρά έχει διαδρομή επιστροφής. Κάθε ένα από αυτά είναι μεταγενέστερο στάδιο, και οι σημειώσεις προώθησης του strongSwan περιγράφουν την αλυσίδα που πρέπει να περάσει ένα πακέτο και στις δύο άκρες.
Δεν λαμβάνει υπόψη ούτε τη δέσμευση σε επίπεδο εφαρμογής. Μια διεργασία μπορεί να δεσμευτεί σε μια διεπαφή, να θέσει μια σήμανση ή να χρησιμοποιήσει τον δικό της resolver και να συνδεθεί με όνομα που επιλύεται διαφορετικά από αυτό που δοκιμάσατε. Όταν η αναζήτηση είναι σωστή και η σύνδεση ακόμη αποτυγχάνει, η επόμενη ερώτηση είναι ποια διεργασία τη δημιουργεί και αν αυτή η διεργασία βλέπει τον ίδιο πίνακα με εσάς.
Κρατήστε λοιπόν τη διάγνωση σε τάξη: ονομάστε τον προορισμό και την πηγή, εκτελέστε την αναζήτηση, διαβάστε μόνο τον πίνακα και τον κανόνα που ονόμασε η αναζήτηση, και μετά δοκιμάστε το επόμενο στάδιο. Αυτή η σειρά κρατά μια έρευνα δρομολόγησης σε λίγα λεπτά και αφήνει ένα αρχείο που μπορεί να ακολουθήσει κάποιος άλλος, κάτι που ένας επικολλημένος πίνακας ποτέ δεν κάνει.