Γιατί μια διαδρομή OpenVPN χάνει από μια πολιτική XFRM του strongSwan
Μια συγκεκριμένη διαδρομή OpenVPN δεν υπερισχύει μιας πολιτικής XFRM: διαβάστε τη διαδρομή και τους επιλογείς της πολιτικής, μετά περιορίστε, εξαιρέστε ή μεταβείτε σε διεπαφή XFRM.
Τα πακέτα μπορούν να ακολουθήσουν μια διαδρομή OpenVPN και παρ' όλα αυτά να συλληφθούν από μια πολιτική IPsec, και αυτός ο συνδυασμός μοιάζει με σφάλμα δρομολόγησης από κάθε οπτική γωνία εκτός από τη σωστή. Το Linux επιλύει μια διαδρομή και μετά συμβουλεύεται μια ξεχωριστή βάση δεδομένων πολιτικών ασφαλείας, οπότε μια πιο συγκεκριμένη διαδρομή προορισμού δεν εκτοπίζει μια αντίστοιχη πολιτική XFRM. Το ορατό σύμπτωμα είναι κίνηση που φεύγει από τον υπολογιστή και δεν φτάνει ποτέ, ενώ και οι δύο σήραγγες αναφέρουν ότι είναι υγιείς. Τρεις επιλογές το λύνουν, και ποια θα διαλέξετε εξαρτάται από το ποια από τις δύο διαδρομές προορίζεται να μεταφέρει αυτό το πρόθεμα.
Δύο αποφάσεις, όχι μία
Η επιλογή διαδρομής απαντά σε ένα στενό ερώτημα: ποιο επόμενο άλμα και ποια διεύθυνση προέλευσης πρέπει να μεταφέρουν αυτό το πακέτο. Η βάση δεδομένων πολιτικών ασφαλείας απαντά σε ένα άλλο: χρειάζεται αυτό το πακέτο προστασία IPsec, και υπό ποιους επιλογείς. Και τα δύο εκτελούνται για το ίδιο πακέτο, και η ικανοποίηση του πρώτου δεν λέει τίποτα για το δεύτερο. Γι' αυτό η αλλαγή μιας μετρικής ή η προσθήκη μιας στατικής διαδρομής μπορεί να αφήσει το σύμπτωμα ανέπαφο.
Ένας ευρύς επιλογέας IPsec είναι η συνήθης αιτία. Μια πολιτική που προστατεύει το 172.16.0.0/12 καλύπτει επίσης το 172.20.8.0/24, το οποίο ένας διαχειριστής μπορεί να θέλει να φτάσει μέσω της σήραγγας OpenVPN. Η πρόθεση υπάρχει μόνο στον πίνακα δρομολόγησης, και η βάση πολιτικών δεν την έμαθε ποτέ.
Δείτε το ως σύγκρουση μεταξύ δύο διαμορφωμένων διαδρομών προστασίας και όχι ως αναμέτρηση δύο μετρικών. Η διόρθωση ανήκει στο συστατικό που διαμορφώθηκε με το λάθος εύρος.
Διαβάστε τη διαδρομή που επιλέγει πραγματικά ο πυρήνας
Ξεκινήστε με την αναζήτηση που εκτελεί ο πυρήνας, συμπεριλαμβανομένης της διεύθυνσης προέλευσης και οποιουδήποτε κανόνα πολιτικής θα μπορούσε να την εκτρέψει σε άλλο πίνακα. Μια διαδρομή στον κύριο πίνακα μπορεί να μην εξεταστεί ποτέ αν ένας προηγούμενος κανόνας επιλέξει άλλο πίνακα, και η αντιστοίχιση μεγαλύτερου προθέματος ισχύει μόνο μέσα στον πίνακα που επιλέγει ένας κανόνας.
ip rule show
ip route show table all
ip route get 172.20.8.20 from 10.44.7.15
Η τελευταία εντολή είναι αυτή που μετράει, γιατί εκτυπώνει την επιλεγμένη διαδρομή μαζί με τη διεύθυνση προέλευσης που θα χρησιμοποιούσε ο πυρήνας. Συγκρίνετε αυτή την έξοδο με τον επιλογέα που ταιριάζει η πολιτική IPsec. Όταν η διαδρομή δείχνει στη διεπαφή OpenVPN και η πολιτική εξακολουθεί να ταιριάζει στο ίδιο ζεύγος, έχετε αναπαράγει τη σύγκρουση χωρίς εικασίες.
Κρατήστε τα dumps ελεύθερα από άσχετες διευθύνσεις πριν φτάσουν σε ένα δελτίο. Ένας πίνακας δρομολόγησης από υπολογιστή παραγωγής φέρει εσωτερική τοπολογία, και μόνο οι γραμμές που απαντούν στο ερώτημα αξίζει να επικολληθούν.
Διαβάστε την πολιτική που ισχύει επίσης
Η λίστα πολιτικών δείχνει κατεύθυνση, επιλογείς και το πρότυπο που αποφασίζει τι συμβαίνει σε ένα ταιριαστό πακέτο. Διαβάστε πρώτα την εξερχόμενη κατεύθυνση, μετά την εισερχόμενη πλευρά για την κίνηση επιστροφής, γιατί μια μονόδρομη εξαίρεση παράγει μια σύνδεση που ξεκινά και δεν ολοκληρώνεται ποτέ.
ip -s xfrm policy
swanctl --list-sas
Συγκρίνετε τους επιλογείς στη λίστα με τα προθέματα που διαπραγματεύτηκε η σύνδεση. Η απενεργοποίηση της εγκατάστασης διαδρομών του strongSwan δεν αφαιρεί αυτές τις πολιτικές, και η αλλαγή μιας μετρικής δεν αλλάζει ποιο ζεύγος προέλευσης και προορισμού προστατεύει μια πολιτική. Αυτές οι δύο ψευδοδιορθώσεις αξίζει να αποκλειστούν νωρίς, γιατί είναι αυτές που δοκιμάζουν πρώτα οι άνθρωποι.
Αν η λίστα δεν περιέχει πολιτική για το πρόθεμα που περιμένατε, το πρόβλημα είναι αλλού και ο πίνακας δρομολόγησης πιθανώς λέει την αλήθεια. Αν περιέχει μια ευρύτερη πολιτική που καλύπτει το πρόθεμα, βρήκατε τη σύλληψη.
Τρεις επιλογές όταν και οι δύο διαδρομές είναι νόμιμες
Ο περιορισμός του επιλογέα IPsec είναι η καθαρότερη επιλογή όταν το ευρύ πρόθεμα ήταν ευκολία και όχι απαίτηση. Η μείωση του επιλογέα απομακρυσμένης κίνησης στα υποδίκτυα που ανήκουν πραγματικά πίσω από το IPsec αφαιρεί τη σύγκρουση για κάθε υπολογιστή ταυτόχρονα, και κοστίζει μια επαναδιαπραγμάτευση κλειδιού και όχι ένα νέο συστατικό.
Μια εξαίρεση passthrough είναι η χειρουργική επιλογή όταν ο ευρύς επιλογέας πρέπει να μείνει. Το strongSwan υποστηρίζει μια ξεχωριστή σύνδεση της οποίας το child χρησιμοποιεί λειτουργία pass, που λέει στον πυρήνα ότι η ταιριαστή κίνηση δεν πρέπει να υποβάλλεται σε επεξεργασία από IPsec. Η απομακρυσμένη διεύθυνση loopback κρατά αυτή τη σύνδεση από το να επιλεγεί για εισερχόμενους ομοτίμους, και οι επιλογείς πρέπει να περιγράφουν το πραγματικό εξουσιοδοτημένο ζεύγος και όχι τα πάντα.
connections {
openvpn-exception {
remote_addrs = 127.0.0.1
children {
openvpn-exception {
local_ts = 10.44.7.0/24
remote_ts = 172.20.8.0/24
mode = pass
start_action = trap
}
}
}
}
Τα παραδείγματα διαμόρφωσης του strongSwan τεκμηριώνουν αυτόν τον τύπο πολιτικής και τη σύμβαση ομοτίμου loopback. Η τρίτη επιλογή είναι ένα σχέδιο βασισμένο σε δρομολόγηση με διεπαφές XFRM, που δένει την πολιτική με την κίνηση που δρομολογείται μέσω μιας ονομασμένης διεπαφής αντί με έναν καθολικό επιλογέα. Είναι μετάβαση και όχι ρύθμιση, και η κίνηση πρέπει ακόμα να ικανοποιεί τους διαπραγματευμένους επιλογείς.
| Option | Use it when | Cost |
|---|---|---|
| Narrow the selector | The broad prefix was convenience | A rekey and a policy review |
| Passthrough child | The broad selector must stay | One exception per intended pair |
| XFRM interface | Policy should follow routing | A design migration |
Αποδείξτε την εξαίρεση χωρίς να αποδυναμώσετε τα υπόλοιπα
Αφού φορτώσετε την αλλαγή, δοκιμάστε την εξαίρεση και έναν συνηθισμένο προορισμό που πρέπει να μείνει προστατευμένος. Ελέγξτε και τις δύο κατευθύνσεις, μετά ρίξτε τη σήραγγα OpenVPN και επιβεβαιώστε τι συμβαίνει στην εξαιρεμένη κίνηση. Μια εξαίρεση που στέλνει ήσυχα αυτό το πρόθεμα ανοιχτά όταν η σήραγγα είναι κάτω είναι απόφαση πολιτικής που πρέπει να πάρετε σκόπιμα, όχι να ανακαλύψετε κατά τη διάρκεια ενός περιστατικού.
Καταγράψτε ποιο πρόθεμα χρησιμοποιεί ποια διαδρομή και γιατί. Αλλιώς ο επόμενος μηχανικός που θα δει έναν ευρύ επιλογέα θα ανοίξει ξανά την ίδια έρευνα, και η απάντηση θα βρίσκεται σε ένα μήνυμα commit που κανείς δεν διαβάζει.