DNAT σε container VPN: προώθηση, όχι INPUT
Μετά το DNAT, ένα αίτημα προς τη διεύθυνση της σήραγγας γίνεται προωθούμενη κίνηση. Περιορίστε τον κανόνα προώθησης, διαβάστε την αλυσίδα του Docker και επιλέξτε διαδρομή επιστροφής συνειδητά.
Το αίτημα φτάνει με διεύθυνση την IP της σήραγγας και φεύγει από το ίδιο container με διεύθυνση μιας γειτονικής υπηρεσίας. Ανάμεσα σε αυτές τις δύο στιγμές, το DNAT ξαναέγραψε τον προορισμό και το πακέτο έπαψε να είναι είσοδος για το container VPN. Τώρα είναι προωθούμενη κίνηση, που κρίνεται από διαφορετικό κανόνα. Αυτή η αλλαγή εξηγεί γιατί ένας κανόνας τείχους προστασίας που φαίνεται σωστός για τη διεύθυνση της σήραγγας δεν έχει κανένα αποτέλεσμα στη μεταφρασμένη σύνδεση.
Ακολουθήστε το πακέτο μετά τη μετάφραση
Πάρτε μια δεξαμενή πελατών 10.90.0.0/24 και μια διεύθυνση σήραγγας 10.90.0.1. Δύο container βρίσκονται σε μία γέφυρα: το 192.0.2.2 εκτελεί το VPN και το 192.0.2.3 εκτελεί την εφαρμογή. Ένας πελάτης συνδέεται στο 10.90.0.1:8080 και ο κανόνας DNAT στον χώρο ονομάτων του container VPN το ξαναγράφει στην πραγματική διεύθυνση και θύρα της εφαρμογής. Έπειτα μια διαδρομή στέλνει το πακέτο μέσα από τη γέφυρα. Αυτές οι διευθύνσεις είναι ενδεικτικές, όχι συνταγή ανάπτυξης.
Η θύρα στην οποία ακούει πραγματικά η εφαρμογή μπορεί να διαφέρει από οποιαδήποτε θύρα δημοσιεύεται στον κεντρικό υπολογιστή. Διαβάστε τον ακροατή μέσα στο container αντί να υποθέσετε ότι και οι δύο αριθμοί ταιριάζουν.
Η άδεια ανήκει στη διαδρομή προώθησης
Το container VPN χρειάζεται προώθηση IP και μια απόφαση προώθησης περιορισμένη στη δεξαμενή πελατών, στη διεύθυνση της εφαρμογής και στην προβλεπόμενη θύρα. Οι καθιερωμένες απαντήσεις χρειάζονται τη δική τους άδεια. Ένας κανόνας που ταιριάζει με την αρχική διεύθυνση της σήραγγας δεν θα ταιριάζει μετά το DNAT, επειδή ο προορισμός έχει ήδη αλλάξει. Μια άδεια INPUT είναι το λάθος άγκιστρο για κίνηση που δεν απευθύνεται πλέον σε αυτόν τον υπολογιστή.
Κρατήστε το εύρος στενό: ένα εύρος πηγών, ένας προορισμός, μία υπηρεσία. Ένας επιτρεπτικός κανόνας προώθησης γράφεται ευκολότερα και υπερασπίζεται πολύ δυσκολότερα αργότερα.
docker exec vpn-container ip route get 192.0.2.3
docker exec vpn-container iptables -t nat -S
docker exec vpn-container iptables -S FORWARD
Οι αλυσίδες του Docker δεν είναι οι αλυσίδες του container σας
Οι κανόνες μέσα στον χώρο ονομάτων του container δεν είναι οι κανόνες του κεντρικού υπολογιστή Docker. Όταν η κίνηση περνά από τη διεπαφή της σήραγγας στη γέφυρα, το τείχος προστασίας της γέφυρας στον κεντρικό υπολογιστή μπορεί να πάρει άλλη απόφαση. Με το backend iptables του Docker, οι τεκμηριωμένες αλυσίδες προώθησης και τα σημεία αντιστοίχισης μετά το DNAT είναι εκεί όπου εμφανίζεται αυτή η απόφαση.
Η αναφορά τείχους προστασίας του Docker περιγράφει αυτές τις αλυσίδες και την αντιστοίχιση μετά το DNAT. Μην διορθώνετε μια απούσα αποδοχή απενεργοποιώντας τη διαχείριση τείχους προστασίας του Docker ή κάνοντας κάθε αλυσίδα επιτρεπτική, γιατί αυτό αφαιρεί τα όρια που προσπαθείτε να χρησιμοποιήσετε.
Κάντε τη διαδρομή επιστροφής συνειδητή επιλογή
Αν η διεύθυνση πηγής διατηρηθεί, η εφαρμογή βλέπει 10.90.0.x και πρέπει να δρομολογεί τις απαντήσεις πίσω μέσω του container VPN. Διαφορετικά η συνηθισμένη πύλη Docker της θα τις στείλει στον κεντρικό υπολογιστή, που δεν κατέχει τη σήραγγα. Η εναλλακτική είναι μια στενά περιορισμένη μετάφραση πηγής στο container VPN, που απλοποιεί την απάντηση αλλά κρύβει τον πελάτη από την εφαρμογή. Επιλέξτε συνειδητά και γράψτε ποια επιλέξατε.
Δοκιμάστε μια νέα επιτρεπόμενη σύνδεση από έναν συνηθισμένο πελάτη και μετά επιβεβαιώστε ότι οι άσχετες θύρες παραμένουν κλειστές. Όταν ένα πακέτο εξαφανίζεται, εξετάστε τον χώρο ονομάτων VPN, τον χώρο ονομάτων της εφαρμογής και το δικό της αρχείο καταγραφής. Ένα ping στην πύλη της γέφυρας δεν είναι δοκιμή αποδοχής για την υπηρεσία.
Κρατήστε τους κανόνες στη υποστηριζόμενη διαμόρφωση εκκίνησης του container, γιατί οι διαδραστικές αλλαγές εξαφανίζονται όταν αυτό δημιουργηθεί ξανά. Η δημοσίευση θύρας στον κεντρικό υπολογιστή είναι διαφορετική διαδρομή έκθεσης και δεν χρειάζεται μόνο επειδή η υπηρεσία είναι προσβάσιμη μέσω της σήραγγας.