Κάνετε ping στον απομακρυσμένο host από το μηχάνημα Linux και απαντά, άρα η σήραγγα δουλεύει. Το container δίπλα σας εξακολουθεί να λήγει σε timeout, και το φυσικό επόμενο βήμα είναι επανεκκίνηση του Docker. Ένα container σε δίκτυο γέφυρας ξεκινά συνήθως με άλλη διεύθυνση πηγής και μπαίνει στον host μέσω forwarding και όχι μέσω της δικής του διαδρομής εξόδου της εφαρμογής, οπότε η επιτυχημένη δοκιμή μέτρησε άλλο πακέτο. Για σήραγγα strongSwan βασισμένη σε πολιτική, μια συνηθισμένη διαδρομή προς το απομακρυσμένο subnet δεν αρκεί όταν το προωθούμενο πακέτο δεν ταιριάζει με την εγκατεστημένη πολιτική IPsec.

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

Ξεκινήστε από έναν προορισμό και δύο πηγές

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

Έπειτα επαναλάβετε το αποτυχημένο αίτημα μέσα από το container και καταγράψτε την πηγή που χρησιμοποιεί πραγματικά. Αν αυτή η διεύθυνση δεν καλύπτεται από τον τοπικό επιλογέα, ξέρετε ήδη το αποτέλεσμα, και καμία επαναδημιουργία container δεν θα το αλλάξει.

Διαβάστε τις πολιτικές πριν αγγίξετε το Docker

Οι έλεγχοι host μόνο για ανάγνωση καλύπτουν τις αποφάσεις δρομολόγησης, τη βάση πολιτικών και τους κανόνες που επιλέγουν ανάμεσά τους:

ip rule show
ip route show table all
ip xfrm policy

Η λίστα πολιτικών δείχνει επιλογείς και κατεύθυνση χωρίς να χρειάζεται dump κατάστασης IPsec γεμάτο υλικό κλειδιών, γι’ αυτό είναι ασφαλές να την επικολλήσετε σε ένα ticket. Ψάξτε για τοπικό επιλογέα που καλύπτει τη διεύθυνση του host αλλά όχι το πρόθεμα γέφυρας. Ελέγξτε επίσης την επικάλυψη: μια διαδρομή container που αντιμετωπίζει τον απομακρυσμένο προορισμό ως τοπικό δεν θα παράγει ποτέ το προωθούμενο πακέτο που περιμένετε, και η σήραγγα παίρνει την ευθύνη. Κρατήστε αυτή τη λίστα δίπλα στη διεύθυνση πηγής του container, γιατί τα δύο μαζί είναι όλη η σύγκριση.

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

Ελέγξτε φιλτράρισμα και μετάφραση με σειρά

Το firewall γέφυρας Linux του Docker μπορεί να μπλοκάρει το forwarding ανεξάρτητα από το IPsec. Με backend iptables, ελέγξτε τη διαδρομή FORWARD και τις αποφάσεις DOCKER-USER, και να θυμάστε ότι ένας κανόνας που προστέθηκε μετά από προγενέστερη ετυμηγορία μπορεί να μην εκτελεστεί ποτέ. Το backend nftables ενσωματώνεται διαφορετικά, οπότε μην δημιουργήσετε αλυσίδα DOCKER-USER μόνο επειδή την ονόμασε ένα παράδειγμα iptables; ελέγξτε ποιο backend χρησιμοποιεί πραγματικά ο daemon σας.

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

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

Έπειτα αποφασίστε δρομολόγηση ή μετάφραση

Ένα δρομολογημένο subnet container απαιτεί και τους δύο peers να αποδεχτούν αυτό το subnet και μια απομακρυσμένη διαδρομή επιστροφής προς αυτό, που συνήθως σημαίνει αλλαγή επιλογέα και στα δύο άκρα και μια συζήτηση με τον ιδιοκτήτη της μακρινής πλευράς. Ένας σκόπιμα μεταφρασμένος σχεδιασμός πρέπει αντίθετα να παρουσιάσει διεύθυνση καλυμμένη από την πολιτική στο σχετικό στάδιο αναζήτησης, που συνήθως σημαίνει στενό, τεκμηριωμένο κανόνα αντί για προεπιλεγμένο MASQUERADE.

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

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

Επαληθεύστε με νέα σύνδεση, όχι με επανεκκίνηση

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

Το διαρκές αποτέλεσμα είναι τέσσερις δηλώσεις που μπορείτε να δείξετε: η πηγή του container, η αντίστοιχη προστατευμένη διαδρομή, το επιτρεπόμενο forwarding, και μια απάντηση που επιστρέφει. Όταν ισχύουν και τα τέσσερα, το container φτάνει στον peer για τον ίδιο λόγο που φτάνει και το host.

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