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

Η αναζήτηση γίνεται πριν ξαναγραφτεί η πηγή

Για ένα πακέτο που προωθείται από πελάτη VPN, ο πυρήνας εκτελεί μια σταθερή ακολουθία. Φτάνει στη διεπαφή της σήραγγας, περνά από το prerouting όπου ζουν το conntrack και το DNAT, έπειτα λαμβάνεται η απόφαση δρομολόγησης, έπειτα η προώθηση, έπειτα το postrouting, όπου το SNAT εφαρμόζεται τελευταίο. Ένας κανόνας της μορφής from εξετάζεται κατά τη διάρκεια αυτής της απόφασης δρομολόγησης, δηλαδή βλέπει την αρχική διεύθυνση του πελάτη, όχι τη μεταφρασμένη.

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

Στην κατεύθυνση της απάντησης εμφανίζεται η μεταφρασμένη διεύθυνση στους κανόνες. Ένα πακέτο που επιστρέφει στην πύλη απευθύνεται στη μεταφρασμένη διεύθυνση, και αν έχετε κανόνες πολιτικής με κριτήριο τον προορισμό ή τη διεπαφή από την οποία ήρθε, αυτή είναι η τιμή που θα συγκρίνετε. Ίδια σύνδεση, διαφορετική πηγή αλήθειας σε κάθε κατεύθυνση.

StageSource the kernel seesWhat it means for your rule
PreroutingClient address, 172.31.7.42Where marks and DNAT are applied
Routing decisionStill 172.31.7.42This is where from rules match
PostroutingBecomes 198.51.100.9What the far end and its return route see

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

Μια δοκιμή από την πύλη δεν είναι δοκιμή της δεξαμενής

Η κίνηση που παράγει η ίδια η πύλη δεν περνά ποτέ από το prerouting, γιατί δεν έφτασε σε κάποια διεπαφή. Δρομολογείται στη διαδρομή output, με τη διεύθυνση της ίδιας της πύλης ως πηγή, και ένας κανόνας from με κριτήριο εύρος πελατών δεν θα ταιριάξει. Κάθε δελτίο σε αυτόν τον τομέα που λέει ότι λειτουργεί από το μηχάνημα αλλά όχι από τον πελάτη είναι η ίδια διαπίστωση με άλλα λόγια.

Προσομοιώστε τον πελάτη αντί να τον προσεγγίσετε. Η αναζήτηση δρομολόγησης μπορεί να ερωτηθεί απευθείας, με πηγή και διεπαφή εισόδου:

ip route get 198.51.100.9 from 172.31.7.42 iif tun0
ip route get 198.51.100.9 from 172.31.8.42 iif tun0
ip route show table 201

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

Προτεραιότητα, όχι θέση στο αρχείο

Οι κανόνες αξιολογούνται με αύξουσα σειρά προτεραιότητας, και μετράει ο αριθμός, όχι η σειρά με την οποία τους πληκτρολογήσατε. Ο πίνακας local βρίσκεται στην προτεραιότητα 0, ο πίνακας main στο 32766 και ο προεπιλεγμένος κανόνας στο 32767, γι' αυτό ένας κανόνας που προστέθηκε με την προεπιλεγμένη προτεραιότητα καταλήγει κοντά στο τέλος της λίστας και χάνει από σχεδόν τα πάντα.

ip rule show
ip rule add from 172.31.8.0/24 lookup 201 priority 1000
ip -4 route show table 201

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

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

Η διαδρομή επιστροφής πρέπει να υπάρχει ακόμη

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

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

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

Μην πιάσετε τη σήραγγα της ίδιας της πύλης στην πολιτική

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

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

Η σελίδα εγχειριδίου του ip-rule τεκμηριώνει τη σημασιολογία του επιλογέα και της προτεραιότητας. Συνδυάστε την με δοκιμή αναζήτησης ανά δεξαμενή και το σχέδιο γίνεται ελέγξιμο, που είναι η διαφορά ανάμεσα σε δρομολόγηση πολιτικής που αντέχει ένα χρόνο και σε εκείνη που όλοι φοβούνται να αγγίξουν.

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