Ένα φορτωμένο προφίλ strongSwan δεν είναι ενεργή σήραγγα
Το strongSwan φορτώνει ορισμούς και έπειτα διαπραγματεύεται SA IKE και CHILD. Το ότι ένα προφίλ είναι φορτωμένο δεν λέει τίποτα για το αν υπάρχει σήραγγα ή ποιος την ξεκινά.
Η καταγραφή μιας σύνδεσης στη διαμόρφωση του strongSwan αποδεικνύει μόνο ότι φορτώθηκε ένας ορισμός. Δεν σημαίνει ότι επικοινώνησαν με τον ομότιμο, ότι υπάρχει SA IKE ή ότι κάποια κίνηση προστατεύεται. Ο δαίμονας αντιμετωπίζει τους ορισμούς και τις ζωντανές συσχετίσεις ως ξεχωριστά αντικείμενα, και η απόσταση μεταξύ τους είναι σκόπιμη σχεδιαστική επιλογή. Το να ξέρετε ποιο αντικείμενο εξετάζετε μετατρέπει μια ασαφή βλάβη σε συγκεκριμένη επόμενη εντολή.
Η φόρτωση δεν είναι σύνδεση
Μια φορτωμένη σύνδεση είναι μια δήλωση για το τι μπορεί να διαπραγματευτεί αργότερα: διευθύνσεις ομοτίμου, διαπιστευτήρια, προτάσεις και επιλογείς κίνησης. Τίποτα σε αυτή τη δήλωση δεν απαιτεί ο δαίμονας να έχει καλέσει κάποιον. Μια πύλη μπορεί να περιμένει την άλλη πλευρά, να ξεκινήσει κατά την εκκίνηση ή να περιμένει να την ξυπνήσει κατάλληλη κίνηση. Και τα τρία ισχύουν, και τα τρία φαίνονται ίδια στο αρχείο διαμόρφωσης μέχρι να διαβάσετε την πολιτική εκκίνησης.
Οι διαχειριστές μπλέκουν διαβάζοντας τη λίστα ορισμών ως λίστα κατάστασης. Το προφίλ υπάρχει, άρα η σήραγγα θεωρείται σηκωμένη, και η επόμενη ώρα πηγαίνει στην αποσφαλμάτωση διαδρομών για μια συσχέτιση που δεν χτίστηκε ποτέ.
Το αντίθετο λάθος είναι εξίσου συχνό. Ένα απόν προφίλ στέλνει τους ανθρώπους να ψάχνουν βλάβη δικτύου ενώ η διαμόρφωση δεν φορτώθηκε ποτέ. Ονομάστε το αντικείμενο και μετά εκτελέστε την εντολή που το παρατηρεί.
Τρία αντικείμενα, τρεις παρατηρήσεις
Το strongSwan κρατά έναν φορτωμένο ορισμό, μια SA IKE και μια SA CHILD. Η πρώτη είναι διαμόρφωση, η δεύτερη είναι πιστοποιημένη σχέση ελέγχου και η τρίτη είναι διαπραγματευμένη προστασία για την επιλεγμένη κίνηση. Έχουν ακόμη και ξεχωριστά ονόματα, οπότε ένα προφίλ με όνομα hq μπορεί να έχει child με όνομα hq-lan.
Ο πίνακας αντιστοιχίζει κάθε επίπεδο στην εντολή που το δείχνει. Διαβάστε τη γραμμή πριν διαβάσετε το αρχείο καταγραφής.
| Layer | What it contains | Command |
|---|---|---|
| Definition | Peer addresses, credentials, proposals, and traffic selectors | swanctl --list-conns |
| IKE SA | One authenticated control channel to the peer | swanctl --list-sas |
| CHILD SA | Keys and selectors for the traffic being protected | Child rows under the IKE SA |
Το αίτημα για το child χτίζει πρώτα τη γονική του SA IKE όταν δεν υπάρχει καμία. Το αίτημα μόνο για τη SA IKE είναι διαφορετική κλήση. Ένα κανάλι ελέγχου που πιστοποιείται σωστά δεν εγγυάται το child που ζητήσατε.
Αυτή η διαφορά μετρά σε μια μερική αστοχία. Μια SA IKE μπορεί να είναι υγιής ενώ το child αποτυγχάνει σε αναντιστοιχία επιλογέα ή σε πρόταση που ο ομότιμος δεν δέχεται. Τα δύο αντικείμενα αποτυγχάνουν για διαφορετικούς λόγους, γι' αυτό αξίζουν ξεχωριστές παρατηρήσεις.
Επιλέξτε την ενέργεια εκκίνησης συνειδητά
Στο swanctl.conf, το start_action ενός child καθορίζει τη συμπεριφορά μετά τη φόρτωση. Η προεπιλογή none αφήνει τον ορισμό για χειροκίνητη έναρξη ή χρήση ως responder. Το start την καλεί, ενώ το trap αφήνει μια πολιτική που διαπραγματεύεται μόλις εμφανιστεί κατάλληλη κίνηση.
Άρα και το «η φόρτωση δεν ξεκινά ποτέ σήραγγα» και το «η φόρτωση ξεκινά πάντα μία» είναι λάθος. Η ενέργεια είναι μέρος του προφίλ και πρέπει να ταιριάζει με τον ρόλο του ομοτίμου. Δύο πύλες που περιμένουν και οι δύο την άλλη πλευρά παράγουν σιωπή, όχι σήραγγα.
Με trap η κίνηση πρέπει να ταιριάζει με τους επιλογείς, οπότε ένα άσχετο ping δεν ξυπνά τίποτα. Με start η διεύθυνση του ομοτίμου πρέπει να είναι χρησιμοποιήσιμη και οι δύο πλευρές πρέπει να συμφωνήσουν για πιστοποίηση και προτάσεις. Καμία από τις δύο ενέργειες δεν αντικαθιστά τον έλεγχο αυτών των προϋποθέσεων.
Η ανάκτηση είναι ξεχωριστή πολιτική
Η εκκίνηση δεν είναι keepalive. Η ανίχνευση νεκρού ομοτίμου, το ρητό κλείσιμο από τον ομότιμο, η ανανέωση κλειδιών και η επανεκκίνηση της διεργασίας είναι διαφορετικά γεγονότα κύκλου ζωής με δικές τους ρυθμίσεις. Διαμορφώστε καθένα συνειδητά αντί να περιμένετε μια αρχική εκκίνηση να τα καλύψει όλα.
Μια σήραγγα που ανεβαίνει στην εκκίνηση και πεθαίνει μία ώρα μετά είναι ζήτημα ανάκτησης. Η πολιτική εκκίνησης έκανε τη δουλειά της και μετά έπαψε να μετρά. Κοιτάξτε τις ρυθμίσεις DPD και ανανέωσης κλειδιών πριν κατηγορήσετε την αρχική διαπραγμάτευση.
Η αντικατάσταση φορτωμένων ορισμών είναι ξεχωριστή λειτουργία. Οι μη προεπιλεγμένες πολιτικές εκκίνησης έχουν τεκμηριωμένες αντίστροφες ενέργειες, και η επαναφόρτωση είναι επιχειρησιακή αλλαγή και όχι η υπόθεση ότι κάθε συσχέτιση ενημερώθηκε επιτόπου. Εκτελέστε τις επαναφορτώσεις σε στάδια, όπου μια επανασύνδεση είναι αποδεκτή. Κρατήστε την παλιά διαμόρφωση μέχρι να αποδειχθεί η νέα.
Ελέγξτε τι υπάρχει πριν αποσφαλματώσετε τη δρομολόγηση
Εκτελέστε τις τρεις παρατηρήσεις με σειρά: φορτωμένοι ορισμοί, ενεργές SA IKE και εγγραφές child. Κάθε απάντηση στενεύει την επόμενη ερώτηση. Παραλείψτε ένα βήμα και στο τέλος θα αποσφαλματώνετε ένα επίπεδο που δεν χτίστηκε ποτέ.
Ξεκινήστε από ό,τι είναι φορτωμένο και από ό,τι είναι πραγματικά εδραιωμένο:
swanctl --list-conns
swanctl --list-sas
Αν το child λείπει ενώ το προφίλ είναι σωστό, ξεκινήστε το με το όνομά του και παρατηρήστε τι συμβαίνει. Η έξοδος συνήθως λέει αν ανέβηκε πρώτο το γονικό.
swanctl --initiate --child hq-lan
Μια ενεργή SA CHILD δεν είναι η γραμμή τερματισμού. Κανόνες προώθησης, διαδρομές και η δική της εξουσιοδότηση της εφαρμογής πρέπει ακόμη να ταιριάξουν. Ο κύκλος ζωής απαντά τι διαπραγματεύτηκε· δεν μπορεί να αποφασίσει ποιος επιτρέπεται να χρησιμοποιεί την υπηρεσία.