Δύο δαίμονες OpenVPN μπορούν και οι δύο να αναφέρουν επιτυχημένη σήραγγα, ενώ η πύλη στέλνει κάθε πελάτη από την ίδια. Τίποτα στη χειραψία δεν αποφασίζει ποια σήραγγα χρησιμοποιεί ένας πελάτης· αποφασίζει ο πυρήνας, πακέτο-πακέτο, διατρέχοντας τους κανόνες πολιτικής και μετά τον πίνακα που ονομάζει κάθε κανόνας. Μόλις το δείτε έτσι, η διαμόρφωση παύει να αφορά επιλογές του OpenVPN και γίνεται μήτρα δρομολόγησης με δύο ιδιοκτήτες.

Ο πυρήνας αποφασίζει, όχι ο δαίμονας

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

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

Δώστε σε κάθε παρουσία το δικό της σύνολο πόρων

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

dev tun-office
route-nopull
pull-filter ignore "redirect-gateway"

dev tun-lab
route-nopull

route-nopull κρατά τις διαδρομές που σπρώχνει ένας διακομιστής έξω από τον τοπικό πίνακα, που είναι ακριβώς αυτό που θέλετε όταν οι πίνακες πολιτικής πρέπει να είναι ρητοί. Το αν ένας δεδομένος διακομιστής σπρώχνει επίσης επιλογή redirect-gateway, και το αν η έκδοση πελάτη σας υποστηρίζει τη μορφή φίλτρου, αξίζει να το ελέγξετε στο εγχειρίδιο αντί να το υποθέσετε.

Γράψτε τη μήτρα: προέλευση, πίνακας, συσκευή

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

ip rule add from 10.8.1.0/24 lookup 100 priority 1000
ip rule add from 10.9.1.0/24 lookup 200 priority 1000
ip route add default dev tun-office table 100
ip route add default dev tun-lab table 200

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

Η δική της μεταφορά της σήραγγας δεν είναι σε ομάδα πελατών

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

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

Η επιλογή διαδρομής δεν την επιτρέπει

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

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

Τι συμβαίνει όταν πέφτει μια σήραγγα

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

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

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