Ο container σου μπορεί να ακούει σε UDP 1195 ενώ ο host δημοσιεύει 1194, και αυτό είναι σωστό εφόσον η αντιστοίχιση το λέει. Οι αριθμοί σχηματίζουν πίνακα μετάφρασης: ο client καλεί τη θύρα του host, το Docker ξαναγράφει τον προορισμό στη θύρα του container και το OpenVPN απαντά στη θύρα που ονομάζει η δική του ρύθμιση. Μια ασυμφωνία σε οποιονδήποτε από αυτούς τους κρίκους παράγει σιωπηλή αποτυχία που μοιάζει με firewall. Τα πιστοποιητικά και οι κρυπτογραφήσεις βρίσκονται πιο κάτω και δεν μπορούν να τη διορθώσουν.

Ακολούθησε ένα πακέτο από τον client στη διεργασία πριν αλλάξεις οτιδήποτε στην ταυτοποίηση.

Τρεις αριθμοί, μία σύνδεση

Οι τρεις αριθμοί είναι ο απομακρυσμένος προορισμός που χρησιμοποιεί ο client, η δημοσιευμένη αντιστοίχιση στον host και ο ακροατής μέσα στον container. Δεν χρειάζεται να είναι ίσοι, αλλά πρέπει να σχηματίζουν αλυσίδα. Ίσοι αριθμοί είναι ειδική περίπτωση που τυχαίνει να είναι η συνηθέστερη, γι’ αυτό μια ασυμφωνία γράφεται εύκολα μία φορά και δύσκολα φαίνεται αργότερα.

Γράψε την αλυσίδα σε μία γραμμή πριν το debugging: διεύθυνση και θύρα client, αντιστοίχιση host, ακροατής container, transport. Ένα ελάττωμα στην αλυσίδα εμφανίζεται ως αριθμός που εμφανίζεται δύο φορές με διαφορετικές τιμές.

LocationExample
Remote client destinationHost address, UDP 1194
Published mappingHost UDP 1194 to container UDP 1195
Container listenerOpenVPN on UDP 1195

Τι λέει πραγματικά η σύντομη σύνταξη

Στη σύντομη μορφή η αριστερή πλευρά είναι η θύρα του host και η δεξιά η θύρα του container, και ένα επίθεμα με κάθετο επιλέγει το transport. Αν παραλείψεις το επίθεμα, το Docker αντιμετωπίζει την αντιστοίχιση ως TCP, άρα ένας ακροατής UDP πίσω από αντιστοίχιση χωρίς πρωτόκολλο είναι ακροατής που κανείς δεν φτάνει. Αυτή η προεπιλογή είναι τεκμηριωμένη και ακόμη εκπλήσσει όσους ταίριαξαν τους αριθμούς και θεώρησαν το θέμα λήξαν.

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

ports:
  - 1194:1195/udp

Πού μπορεί να σταματήσει το πακέτο

Ένα αίτημα μπορεί να απορριφθεί πριν από το Docker, στο Docker ή στον ακροατή. Μπροστά από το Docker μπορεί να υπάρχει firewall cloud ή router που κάνει δική του προώθηση, και αυτή η συσκευή χρειάζεται τη θύρα προς τον host και το σωστό transport. Μέσα στο Docker, μια αντιστοίχιση σε λάθος θύρα container προωθεί σε κλειστό socket.

Έπειτα ο ακροατής: η ρύθμιση του OpenVPN ονομάζει θύρα και πρωτόκολλο, και ένας client που φτάνει σε άλλη μέσα στον container δεν φτάνει πουθενά. Ο έλεγχος υπηρεσίας UDP μέσω TCP δεν αποδεικνύει τίποτα σε κανένα από αυτά τα στάδια, οπότε χρησιμοποίησε το transport που θα χρησιμοποιήσει ο client.

Οι διευθύνσεις δέσμευσης καθορίζουν την προσβασιμότητα

Μια δημοσιευμένη αντιστοίχιση δεσμευμένη στο loopback είναι προσβάσιμη μόνο από τον host, ενώ μία δεσμευμένη σε όλες τις διεπαφές είναι προσβάσιμη όπου το επιτρέπει το firewall. Οι δύο φαίνονται ίδιες σε ένα αρχείο Compose που παραλείπει τη διεύθυνση, και η προεπιλογή του Docker είναι η ευρεία.

Αποφάσισε ποια έκθεση σκοπεύει η ανάπτυξη και μετά γράψ’ την ρητά. Ένας εσωτερικός έλεγχος που συνδέεται μέσω loopback και ένας απομακρυσμένος client που δεν μπορεί να συνδεθεί μπορούν και οι δύο να είναι ακριβείς περιγραφές του ίδιου container.

Διάβασε την τρέχουσα κατάσταση

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

Τρεις διαφορετικές καταστάσεις, τρεις διαφορετικές εντολές, και μόνο η τελευταία αφορά το OpenVPN.

Αφού η αντιστοίχιση είναι σωστή

Μόλις το πακέτο φτάσει στο OpenVPN, το log του είναι το μέρος για να διαβάσεις για TLS και ταυτοποίηση. Το να ξαναδημιουργείς πιστοποιητικά για να διορθώσεις ένα πακέτο που δεν έφτασε ποτέ είναι χαμένη δουλειά που προσθέτει δεύτερη μεταβλητή. Κράτησε τη σημείωση της αντιστοίχισης δίπλα στο προφίλ του client ώστε ο επόμενος να διαβάσει μία γραμμή αντί να ανακαλύψει ξανά και τους τρεις αριθμούς. Μία σύλληψη πακέτων στην πλευρά του host καθορίζει ποιος από τους τρεις κρίκους είναι λάθος, και κοστίζει λιγότερο από μια ανανέωση πιστοποιητικού.

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

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