Δύο πελάτες VPN μπορούν να βγουν από δύο διαφορετικές δημόσιες διευθύνσεις IPv4, και ο κανόνας που το κάνει είναι συντομότερος απ’ όσο περιμένουν οι περισσότεροι. Αυτό που τον κάνει να δουλεύει δεν είναι η σύνταξη του iptables αλλά η κατάσταση του πακέτου όταν φτάνει στην αλυσίδα εξόδου: η διεύθυνση πηγής εκεί πρέπει ακόμη να ξεχωρίζει τους πελάτες. Αν ένα προηγούμενο masquerade έχει ήδη συνενώσει και τους δύο σε μία διεύθυνση, κανένας κανόνας ανά πελάτη δεν μπορεί να ανακτήσει τη διάκριση. Λύστε πρώτα αυτό το ζήτημα και μετά γράψτε τη μετάφραση.

Ποια ταυτότητα φτάνει στην πύλη

Ο κανόνας ταιριάζει με τη διεύθυνση πηγής του πακέτου, όχι με όνομα χρήστη VPN και όχι με το όνομα που εμφανίζει μια εφαρμογή πελάτη. Ό,τι μεταφράζει το πακέτο νωρίτερα στη διαδρομή καθορίζει τι μπορεί ακόμη να δει ο κανόνας σας. Εκτελέστε τον πίνακα nat με σειρά και βρείτε το σημείο όπου η πηγή είναι ακόμη ανά πελάτη.

iptables -t nat -S POSTROUTING

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

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

Η μετάφραση δεν μπορεί να εφεύρει μια διεύθυνση

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

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

Εισαγωγή πριν από το γενικό masquerade

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

ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers

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

iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78

Οι δύο κανόνες παραπάνω ταιριάζουν από μία εσωτερική διεύθυνση ο καθένας, περιορίζουν την αντιστοίχιση στη διεπαφή εξόδου και ορίζουν ρητά την πηγή. Εισαγάγετε αντί να προσθέσετε: στη θέση 1 αξιολογούνται πριν από τη γραμμή masquerade. Η σειρά μεταξύ τους δεν έχει σημασία, γιατί οι πηγές τους διαφέρουν. Αντικαταστήστε το ens3 με ό,τι ανέφερε η εντολή δρομολόγησης, και κρατήστε άλλους διαχειριστές τείχους προστασίας μακριά από τα ίδια hooks, αφού δύο εργαλεία που γράφουν έναν πίνακα είναι ο συνηθισμένος λόγος που ένας σωστός κανόνας δεν έχει αποτέλεσμα.

Αποδείξτε την πηγή με μια νέα ροή

Το Stateful NAT δεσμεύει μια μετάφραση όταν ξεκινά μια ροή και την επαναχρησιμοποιεί για μεταγενέστερα πακέτα, οπότε μια συνεδρία που άνοιξε πριν την αλλαγή κρατά την παλιά της πηγή μετά την αλλαγή. Μόνο μια νεοσύστατη σύνδεση αποδεικνύει τον κανόνα.

conntrack -L -s 10.88.4.20 -p tcp --dport 443

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

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

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