Λειτουργία trap του strongSwan: γιατί η σήραγγα IPsec περιμένει κίνηση
Μια ανενεργή σήραγγα IPsec κατ' απαίτηση δεν δείχνει CHILD SA μέχρι ένα πακέτο να ταιριάξει με την πολιτική trap της. Διαβάστε την κατάσταση, ελέγξτε το έναυσμα και μάθετε πότε ταιριάζει το start.
Κανένα CHILD SA δεν εμφανίζεται στην έξοδο κατάστασης, η σήραγγα φαίνεται νεκρή και μετά ένα ping προς το απομακρυσμένο υποδίκτυο τη σηκώνει. Σε μια διάταξη IPsec κατ' απαίτηση αυτή η ακολουθία είναι ο σχεδιασμός, όχι βλάβη. Μια πολιτική trap εγκαθιστά έναν επιλογέα και περιμένει, και το πρώτο πακέτο που ταιριάζει είναι αυτό που ξεκινά το IKE και τη διαπραγμάτευση CHILD SA.
Μέρος της σύγχυσης είναι λεξιλόγιο: το «up» χρησιμοποιείται για δύο διαφορετικές καταστάσεις. Η διαμόρφωση έχει φορτωθεί και η πολιτική του πυρήνα υπάρχει, αλλά η συσχέτιση δεδομένων όχι. Ένας monitor που μετρά μόνο ενεργές SA θα αναφέρει έναν υγιή τόπο ως down όσο κανείς δεν στέλνει κίνηση προς αυτόν.
Μια ανενεργή σήραγγα κατ' απαίτηση δεν έχει CHILD SA να δείξει
Μια εγγραφή trap δεν επαληθεύει τίποτα από μόνη της. Ζητά από τον πυρήνα να κρατά μια πολιτική για την επιλεγμένη κίνηση και να σηκώνει μια acquisition όταν ένα πακέτο χρειάζεται αυτή την πολιτική. Ο δαίμονας λαμβάνει την acquisition, την αντιστοιχίζει με τον ορισμό child και διαπραγματεύεται από εκεί. Μέχρι εκείνη τη στιγμή δεν υπάρχει ούτε IKE SA για εμφάνιση, γι' αυτό και οι δύο λίστες μπορεί να είναι κενές ταυτόχρονα.
Αυτή η σειρά κάνει τα logs αναγνώσιμα. Πρώτα έρχεται η acquisition, μετά το IKE_SA_INIT και το IKE_AUTH, μετά το CHILD SA. Αν το log τελειώνει αμέσως μετά την acquisition, το έναυσμα δούλεψε. Η διαπραγμάτευση απέτυχε και το επόμενο ερώτημα αφορά διαπιστευτήρια, προτάσεις ή προσβασιμότητα, όχι το trap.
Με το backend του πυρήνα Linux μπορείτε να δείτε την πολιτική πριν υπάρξει οποιοδήποτε SA. Εκτελέστε ip xfrm policy και αναζητήστε τον επιλογέα με κατεύθυνση out και πρότυπο που δείχνει στη σύνδεση. Αυτή η εγγραφή είναι η κατάσταση κατ' απαίτηση, και η παρουσία της είναι το πρώτο που πρέπει να επιβεβαιωθεί.
Το start_action αποφασίζει αν θα περιμένει τίποτα καθόλου
Κάθε child στο swanctl.conf φέρει ένα start_action. start ξεκινά όταν φορτώνεται η διαμόρφωση, trap εγκαθιστά την πολιτική και περιμένει, και none αφήνει την εκκίνηση σε κάτι άλλο. Μόνο το trap παράγει τη συμπεριφορά «ping και ανεβαίνει» που περιγράφηκε παραπάνω.
children {
office-lan {
local_ts = 192.168.50.0/24
remote_ts = 192.168.70.0/24
start_action = trap
}
}
Οι δύο επιλογείς κίνησης ορίζουν τι θεωρείται ενδιαφέρον, και ένα πακέτο από host εκτός αυτών των προθεμάτων δεν πυροδοτεί το trap· δρομολογείται ως συνήθως. Η διεύρυνση των επιλογέων για πιο πρόθυμο έναυσμα διευρύνει και το εύρος που η σήραγγα ισχυρίζεται ότι προστατεύει, οπότε αντλήστε τους από κίνηση που πραγματικά θέλετε να κρυπτογραφήσετε.
Η αναφορά swanctl.conf απαριθμεί τις αποδεκτές τιμές, μαζί με τις ξεχωριστές ενέργειες close και DPD που καθορίζουν τι συμβαίνει μόλις υπάρξει το SA.
Βρείτε αν το έναυσμα πυροδοτήθηκε καθόλου
Ξεκινήστε με swanctl --list-conns και επιβεβαιώστε ότι το child φορτώθηκε με την ενέργεια που θέλατε. Στη συνέχεια στείλτε ένα πακέτο από host εντός του local_ts σε μια διεύθυνση εντός του remote_ts και παρακολουθήστε το swanctl --list-sas. Αν η έξοδος δεν αλλάξει, καμία acquisition δεν έφτασε στον δαίμονα.
Δύο συνηθισμένοι λόγοι για ένα σιωπηλό trap: το πακέτο πέρασε από source-NAT πριν χτυπήσει την πολιτική και δεν ταιριάζει πλέον με το local_ts, ή η σύνδεση δεν φορτώθηκε ποτέ λόγω συντακτικού ή διαπιστευτηρίων. Εκτελέστε ξανά το swanctl --load-all και διαβάστε την έξοδό του πριν αγγίξετε επιλογείς. Μια σύνδεση που δεν φορτώθηκε δεν εγκαθιστά πολιτική, άρα δεν υπάρχει τίποτα για να πυροδοτήσει η κίνηση.
Η κατεύθυνση μετρά επίσης: ένα trap για εξερχόμενη κίνηση δεν ξεκινά με εισερχόμενο πακέτο. Αν η απομακρυσμένη πλευρά πρέπει να σηκώσει τη σήραγγα, χρειάζεται δικό της trap, ή αυτή η πλευρά χρειάζεται start.
Η αναμονή για το πρώτο πακέτο δεν είναι πάντα το σωστό αντιστάθμισμα
Οι διαδραστικές συνεδρίες νιώθουν το κόστος εγκατάστασης. Το πρώτο αίτημα πληρώνει την ανταλλαγή IKE και τη διαπραγμάτευση CHILD, και ένας πελάτης με στενή προθεσμία μπορεί να τα παρατήσει πριν υπάρξει το SA. Το προληπτικό start εξαλείφει αυτή την καθυστέρηση του πρώτου πακέτου. Κρατά όμως μια σήραγγα ανοιχτή για κίνηση που μπορεί να μη φτάσει ποτέ.
Τρία γεγονότα κρίνουν την επιλογή: πόσο συχνά χρησιμοποιείται η διαδρομή, αν το πρώτο αίτημα έχει στενή προθεσμία και αν ο peer είναι προσβάσιμος κατά την εκκίνηση. Η περιστασιακή μαζική κίνηση και ένας peer που μπορεί να είναι offline στην εκκίνηση ευνοούν και τα δύο το trap. Ένας πελάτης ευαίσθητος στην καθυστέρηση και ένας peer πάντα προσβάσιμος ευνοούν το start. Αν και οι δύο πλευρές μπορούν να ξεκινήσουν, συμφωνήστε ποιος κατέχει το έναυσμα ώστε να μην έχετε διπλές διαπραγματεύσεις.
Μια εγκατεστημένη πολιτική δεν είναι ούτε εγγύηση κατά διαρροών. Αν η απαίτηση είναι fail-closed, το τείχος προστασίας πρέπει να απορρίπτει κίνηση χωρίς SA, και αυτός ο κανόνας ζει έξω από τον ορισμό child.
Καταγράψτε τις τρεις γραμμές που τελειώνουν την επόμενη διαφωνία
Γράψτε τους επιλογείς, την ενέργεια εκκίνησης και την έξοδο της εντολής που δείχνει την πολιτική παρούσα χωρίς SA. Αυτές οι τρεις γραμμές χωρίζουν το «κατ' απαίτηση και ανενεργό» από το «δεν φορτώνει» την επόμενη φορά που κάποιος θα αναφέρει τη σήραγγα ως down. Χρειάζονται ένα λεπτό για να καταγραφούν. Χωρίς αυτές, η ίδια έρευνα ξεκινά από το μηδέν.
Δοκιμάστε από host που είναι πραγματικά εντός του επιλογέα. Ένα ping από τον ίδιο τον δρομολογητή συχνά ακολουθεί διαφορετική διαδρομή και δεν αποδεικνύει τίποτα για την πολιτική που προστατεύει το υποδίκτυο πίσω του.