Η απομακρυσμένη πύλη επανεκκινεί, επιστρέφει μέσα σε ένα λεπτό, και ο τοπικός daemon του strongSwan συνεχίζει να τρέχει με το τούνελ ακόμη κάτω. Μια εργασία cron που κάνει grep για ESTABLISHED και επανεκκινεί τον daemon θα το καλύψει τελικά, και θα διακόψει και κάθε άσχετο τούνελ στο μηχάνημα, ενώ ίσως χάσει αυτό που απέτυχε. Η ανάκτηση ανήκει στη σύνδεση που πρέπει να επιστρέψει, εκφρασμένη σε ρυθμίσεις που επιβιώνουν από ένα reload. Αυτό το runbook το στήνει για μία σύνδεση και αποδεικνύει το αποτέλεσμα με το όνομα.

Αποσύρετε τη συνολική επανεκκίνηση, κρατήστε τα στοιχεία της

Η επανεκκίνηση του daemon έχει δύο συγκεκριμένα ελαττώματα: καταστρέφει την κατάσταση κάθε σύνδεσης και δεν σας λέει τίποτα για το ποιο γεγονός απέτυχε πραγματικά. Το κείμενο κατάστασης που κάνατε grep μπορεί να ήρθε από άλλη σύνδεση, ενώ το απαιτούμενο child καθόταν αδρανές επειδή τίποτα δεν το ενεργοποίησε.

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

swanctl --list-conns
swanctl --list-sas

Βάλτε την έναρξη και τις επαναλήψεις στη σύνδεση που επιστρέφει

Σε μια εγκατάσταση swanctl.conf αυτές οι ρυθμίσεις ζουν στο επίπεδο σύνδεσης και child και όχι σε μια συνολική πολιτική. Το παρακάτω απόσπασμα είναι παράδειγμα από την πλευρά του εκκινητή που υποθέτει ότι οι προτάσεις, η ταυτοποίηση και οι επιλογείς είναι ήδη σωστοί.

connections {
    branch {
        keyingtries = 0
        dpd_delay = 30s
        children {
            private-lan {
                start_action = trap|start
                dpd_action = restart
            }
        }
    }
}

Το start_action αποφασίζει τι γίνεται όταν φορτώνεται το child: το start ξεκινά αμέσως, ενώ το trap εγκαθιστά μια πολιτική που πυροδοτεί την έναρξη όταν εμφανιστεί ταιριαστή κίνηση. Το trap|start απαιτεί strongSwan 5.9.6 ή νεότερο, οπότε ελέγξτε την έκδοση πριν αντιγράψετε τη γραμμή. Το dpd_action=restart ζητά νέα διαπραγμάτευση μόλις ο peer κηρυχθεί νεκρός, και το keyingtries=0 στο επίπεδο σύνδεσης επιτρέπει περαιτέρω προσπάθειες μέχρι επιτυχία ή μόνιμο σφάλμα. Στο IKEv2 το dpd_timeout δεν έχει κανένα αποτέλεσμα, γιατί η συνηθισμένη αναμετάδοση αποφασίζει πότε ο peer δεν αποκρίνεται.

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

Μάθετε από ποιο γεγονός ανακτάτε

Τρεις βλάβες φαίνονται ίδιες σε ένα ταμπλό και χρειάζονται διαφορετικές ρυθμίσεις. Μια αρχική σύνδεση που δεν ανέβηκε ποτέ είναι πρόβλημα διαμόρφωσης ή προσβασιμότητας. Ένας peer που σταμάτησε να απαντά είναι η περίπτωση DPD. Ένα child που ο peer έκλεισε ρητά είναι γεγονός πολιτικής με δικό του close_action, το οποίο το DPD δεν παρατηρεί ποτέ. Η ανάγνωση του log γύρω από τη διακοπή σας λέει ποια από τις τρεις έχετε, και η απάντηση αλλάζει τη διόρθωση.

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

Επαληθεύστε με το όνομα, όχι με την κατάσταση του daemon

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

swanctl --initiate --child private-lan
swanctl --terminate --ike branch

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

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

Φορτώστε την αλλαγή σε ένα παράθυρο και δοκιμάστε ξανά

Το reload είναι ασφαλέστερο από την επανεκκίνηση του daemon, και πάλι όμως δεν είναι δωρεάν: η αντικατάσταση ή η εκφόρτωση ενός child μπορεί να κλείσει έναν ξεκινημένο συσχετισμό ή να ρίξει το trap του.

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

swanctl --load-conns
swanctl --list-conns

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

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