Βάλτε καταγραφή και στις δύο πλευρές μιας πύλης VPN και μία ροή μπορεί να δείξει τέσσερις διαφορετικές διευθύνσεις. Το NAT πηγής ξαναγράφει από πού ισχυρίζεται το πακέτο ότι έρχεται· το NAT προορισμού ξαναγράφει πού πηγαίνει. Το Masquerade δεν είναι τρίτη κατεύθυνση, είναι κανόνας NAT πηγής που παίρνει τη διεύθυνσή του από τη διεπαφή εξόδου αντί για σταθερή τιμή. Ονομάστε ποιο από τα τρία χρειάζεστε πραγματικά και τα περισσότερα δελτία «το VPN είναι χαλασμένο» συμπτύσσονται σε ερώτηση για την επιστροφική διαδρομή.

Τι ξαναγράφει κάθε κανόνας

Το NAT πηγής, συνήθως γραμμένο SNAT, αλλάζει τη διεύθυνση πηγής μιας ροής καθώς φεύγει από δρομολογητή ή πύλη. Η υπηρεσία που λαμβάνει απαντά στη μεταφρασμένη διεύθυνση, και το κουτί που μεταφράζει αναιρεί την αλλαγή με την κατάσταση που κράτησε για εκείνη τη σύνδεση. Στο Linux αυτή η κατάσταση ζει στο conntrack, γι’ αυτό το conntrack -L τυπώνει τις αρχικές και τις πλειάδες απάντησης δίπλα δίπλα.

Το NAT προορισμού, DNAT, αλλάζει τον προορισμό αντ’ αυτού. Ένα πακέτο που απευθύνεται σε δημόσια διεύθυνση στο UDP 51820 μπορεί να ξαναγραφτεί προς εσωτερικό διακομιστή WireGuard στο 10.8.0.2:51820. Έτσι δημοσιεύει ένας οικιακός δρομολογητής ή ένας cloud balancer έναν ακροατή VPN, και αυτό δεν λέει τίποτα για το τι μπορεί να μεταφέρει το τούνελ μετά.

Το Masquerade ανήκει στην οικογένεια SNAT. Ο κανόνας δεν ονομάζει διεύθυνση· χρησιμοποιεί όποια έχει η διεπαφή εξόδου όταν φεύγει το πακέτο. Το Linux του δίνει δικό του στόχο, και είναι η συνήθης επιλογή σε διεπαφή WAN που παίρνει τη διεύθυνσή της από DHCP ή PPPoE.

Πού ζει η αντιστοίχιση καθορίζει την αποτυχία

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

Η κίνηση επιστροφής πρέπει να περάσει από τη συσκευή που κρατά την αντιστοίχιση. Αν η απάντηση πάρει άλλη διαδρομή, δεύτερο uplink, διαδρομή πολιτικής ή πάροχο που δεν έχει ακούσει ποτέ το ιδιωτικό σας εύρος, η κατάσταση ανάστροφης μετάφρασης δεν συμβαίνει ποτέ και ο πελάτης βλέπει μονόδρομη κίνηση. Η προσθήκη περισσότερου NAT πηγής σπάνια διορθώνει μια απούσα διαδρομή επιστροφής· μπορεί να κρύψει το σύμπτωμα σε μία ροή ενώ σπάει την πολιτική με βάση διευθύνσεων παντού αλλού.

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

Masquerade ή ρητό SNAT

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

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

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

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

Διαβάζοντας τους κανόνες σε πύλη Linux

Μια πύλη απομακρυσμένης πρόσβασης με πελάτες στο 10.8.0.0/24 και διεπαφή WAN με όνομα eth0 χρειάζεται ενεργή προώθηση και πολιτική φιλτραρίσματος που επιτρέπει τη ροή, πριν μπορέσει να βοηθήσει οποιοσδήποτε κανόνας NAT. Η έκδοση με iptables κρατά και τις δύο κατευθύνσεις στον πίνακα nat:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 51820 \
  -j DNAT --to-destination 10.8.0.2:51820

Η μορφή nftables χρησιμοποιεί τα ίδια δύο hooks με ονομασμένη διεπαφή και ρητή αλυσίδα:

nft add rule ip nat postrouting ip saddr 10.8.0.0/24 oifname "eth0" masquerade
nft add rule ip nat prerouting iifname "eth0" udp dport 51820 dnat to 10.8.0.2:51820

Και τα δύο αποσπάσματα υποθέτουν ότι η αλυσίδα φιλτραρίσματος δέχεται ήδη την προωθούμενη ροή. Το NAT δεν είναι κανόνας άδειας, και ένα σωστά μεταφρασμένο πακέτο μπορεί να απορριφθεί έναν πίνακα παρακάτω. Επιβεβαιώστε τη ζωντανή αντιστοίχιση με το conntrack -L, επιβεβαιώστε τι έχει φορτωθεί με το nft list ruleset ή το iptables-save -t nat, και μετά καταγράψτε και στις δύο διεπαφές για να δείτε τη διεύθυνση να αλλάζει πράγματι.

Τρόποι αποτυχίας που μοιάζουν με κακό κανόνα

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

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

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

Λίστα ελέγχου πριν αποθηκεύσετε τον κανόνα

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

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

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