Πρόσβαση σε ένα απομακρυσμένο /24 μέσω σήραγγας: NETMAP, DNAT ή διαδρομή;
Χαρτογραφήστε ένα ολόκληρο πρόθεμα με το NETMAP, προσθέστε κανόνες DNAT ανά κεντρικό υπολογιστή ή δρομολογήστε το πραγματικό εύρος και αποφασίστε με βάση τι πρέπει να βλέπει η απέναντι πλευρά και ποιος επιτρέπεται να ξεκινά κίνηση.
Μπορείτε να φτάσετε σε ένα υποδίκτυο πίσω από ένα άκρο σήραγγας με τρεις τρόπους, και ένα λεπτό συλλογής γεγονότων συνήθως αποκλείει δύο. Τα γεγονότα είναι αν οι διακομιστές εκεί πρέπει να ξεχωρίζουν χρήστες, αν κάποιος εκεί θα καλέσει ποτέ προς το εύρος σας, και ποιος επιτρέπεται να επεξεργαστεί τον δρομολογητή στο απομακρυσμένο άκρο. Απαντήστε σε αυτά τα τρία και ο σχεδιασμός επιλέγεται μόνος του. Το υπόλοιπο προϋποθέτει ότι διαχειρίζεστε το άκρο και μπορείτε να επεξεργαστείτε το τείχος προστασίας του.
Τρεις επιλογές, και τι αλλάζει πραγματικά καθεμία
Η αντιστοίχιση προθέματος, το DNAT ανά κεντρικό υπολογιστή και ένα δρομολογημένο πρόθεμα μετακινούν όλα πακέτα μεταξύ των ίδιων δύο ευρών, αλλά αλλάζουν διαφορετικά πράγματα. Η αντιστοίχιση επινοεί ένα εύρος ψευδωνύμου και ξαναγράφει διευθύνσεις αριθμητικά εν πτήσει. Οι κανόνες ανά κεντρικό υπολογιστή ξαναγράφουν επίσης, μόνο που κάθε προορισμός ονομάζεται με το χέρι. Ένα δρομολογημένο πρόθεμα δεν ξαναγράφει τίποτα: τα πακέτα κρατούν τις πραγματικές διευθύνσεις και τα δύο άκρα συμφωνούν πού ζουν αυτές οι διευθύνσεις.
| What the far side needs | Prefix mapping | Per-host DNAT | Routed prefix |
|---|---|---|---|
| Users visible to its logs | Only without source NAT | Same condition | Yes, unchanged |
| To start a connection toward you | No, alias is local | No, same reason | Yes, both ends route |
| To absorb a new host | Yes, arithmetic only | No, one rule per address | Yes, it simply routes |
| To require no config change | Yes, with source NAT | Yes, same condition | No, it needs a route back |
Ξεκινήστε την εξάλειψη από την απέναντι πλευρά, όπου οι περιορισμοί είναι δυσκολότερο να αλλάξουν. Αν ένας διακομιστής εκεί γράφει διευθύνσεις πελατών σε αρχεία καταγραφής, τις ελέγχει σε λίστα επιτρεπόμενων ή τις παραδίδει σε άλλο σύστημα, η μετάφραση της πηγής καταστρέφει το μοναδικό του αναγνωριστικό. Αν η απέναντι πλευρά πρέπει επίσης να καλέσει, η μετάφραση αποκλείεται εντελώς, γιατί κανείς εκεί δεν ξέρει ότι το ψευδώνυμο υπάρχει. Μόνο όταν η απέναντι πλευρά απλώς απαντά σε αιτήματα γίνονται ασφαλείς οι φθηνότερες επιλογές.
Ζεύγη προθεμάτων, και γιατί τα μεγέθη πρέπει να ταιριάζουν
Το NETMAP είναι στόχος του πίνακα nat που εργάζεται σε ζεύγος προθεμάτων ίδιου μήκους. Δεν έχει πίνακα ανά διεύθυνση μέσα: αφαιρεί το πρόθεμα, κρατά τα bit του κεντρικού υπολογιστή και τα επανασυνδέει στο νέο πρόθεμα, γι' αυτό ένα /24 αντιστοιχίζεται σε /24 και ποτέ σε /25. Η θέση καθορίζει την κατεύθυνση: μια αντιστοίχιση προορισμού στο PREROUTING ξαναγράφει πού πηγαίνει ένα πακέτο, και μια αντιστοίχιση πηγής στο POSTROUTING ξαναγράφει από πού ήρθε.
Ένας κεντρικός υπολογιστής στο 192.168.2.17 εμφανίζεται στους πελάτες σας ως 10.50.1.17, και το τελευταίο οκτάδιο δεν είναι διακοσμητικό — είναι ο ίδιος αριθμός και στις δύο πλευρές. Προσθέστε αύριο έναν κεντρικό υπολογιστή στο 192.168.2.40 και το ψευδώνυμό του είναι 10.50.1.40, χωρίς κανόνα προς επεξεργασία.
Οι πελάτες χρειάζονται ακόμη μια διαδρομή για το εύρος ψευδωνύμου που δείχνει στο μηχάνημά σας, εκτός αν το ψευδώνυμο βρίσκεται μέσα σε υποδίκτυο που ήδη φτάνουν. Η πύλη δεν χρειάζεται διαδρομή για το ψευδώνυμο, γιατί η μετάφραση προορισμού εκτελείται στο PREROUTING, πριν από την αναζήτηση διαδρομής. Η προώθηση πρέπει επίσης να είναι ενεργή, αλλιώς ο πυρήνας απορρίπτει το πακέτο μετά την ξαναγραφή. Οι τρεις εντολές παρακάτω είναι όλη η ρύθμιση σε πύλη τύπου Debian με πελάτες στο br0, το ψευδώνυμο στο 10.50.1.0/24 και τη σήραγγα στο tun0.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i br0 -d 10.50.1.0/24 -j NETMAP --to 192.168.2.0/24
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADEΗ απάντηση πρέπει να βρει μόνη της τον δρόμο της επιστροφής
Η ξαναγραφή του προορισμού καθορίζει μόνο πού θα παραδοθεί ένα πακέτο. Ο διακομιστής στην απέναντι πλευρά πρέπει ακόμη να απαντήσει σε μια διεύθυνση που μπορεί να φτάσει, και υπάρχουν δύο τρόποι να το κανονίσετε. Μεταφράστε την πηγή ώστε οι απαντήσεις να επιστρέφουν στο μηχάνημά σας, ή αφήστε την πηγή ήσυχη και δώστε στην απέναντι πλευρά μια διαδρομή για το εύρος πελατών.
Η συγκάλυψη στην έξοδο είναι η συντομότερη διαδρομή: ένας κανόνας στο POSTROUTING και η απέναντι πλευρά βλέπει τη διεύθυνση της σήραγγάς σας, οπότε δεν χρειάζεται δική της διαδρομή. Το κόστος είναι ότι όλοι οι χρήστες συνενώνονται σε μία διεύθυνση και τα αρχεία καταγραφής ανά χρήστη παύουν να σημαίνουν κάτι. Το να μείνει η πηγή ανέπαφη διατηρεί αυτή την πληροφορία, αλλά τότε ο απομακρυσμένος τόπος πρέπει να στέλνει τις απαντήσεις για το εύρος πελατών πίσω μέσω της σήραγγας. Σε έναν OpenVPN διακομιστή αυτό είναι ένα ωθούμενο push "route 10.50.9.0 255.255.255.0", συν μια γραμμή route 192.168.2.0 255.255.255.0.
Το ακριβό λάθος είναι να κάνετε τη μισή δουλειά από το καθένα. Αν συγκαλύψετε μέρος της κίνησης ενώ η απέναντι πλευρά μεταφέρει επίσης διαδρομή επιστροφής για άλλη κίνηση, οι απαντήσεις φτάνουν σε διεπαφή όπου η καταχώριση παρακολούθησης συνδέσεων δεν είχε δει ποτέ. Ο πελάτης αναφέρει λήξη χρόνου για αίτημα που ο διακομιστής κατέγραψε ως εξυπηρετημένο. Και οι δύο κατευθύνσεις μιας ροής πρέπει να περνούν από το ίδιο στιγμιότυπο netfilter: μία πύλη που μεταφράζει, όχι δύο τείχη προστασίας σε σειρά.
conntrack -L -d 10.50.1.17
iptables -t nat -L PREROUTING -v -nΔιαβάστε την καταχώριση και προς τις δύο κατευθύνσεις: η αρχική πλειάδα κρατά το ψευδώνυμό σας στον προορισμό, ενώ η πλειάδα απάντησης φέρει την πραγματική διεύθυνση. Αν λείπει η πλειάδα απάντησης, το πρόβλημα είναι η διαδρομή επιστροφής και όχι ο κανόνας. Αν οι μετρητές του PREROUTING δεν κουνήθηκαν ποτέ, το πακέτο δεν έφτασε ποτέ σε αυτό το άγκιστρο.
Συγκρούσεις και η αναζήτηση που εκτελείται πρώτη
Δύο διαφορετικά εύρη μπορούν να συγκρουστούν, και οι δύο αστοχίες μοιάζουν με χαλασμένη σήραγγα και όχι με κακό κανόνα. Το ψευδώνυμο που επινοείτε πρέπει να είναι αχρησιμοποίητο σε όλη τη διαδρομή, και το πραγματικό εύρος της απέναντι πλευράς δεν πρέπει να υπάρχει ήδη στο δίκτυό σας. Ένα διπλότυπο παράγει διακοπτόμενη κίνηση προς λάθος κεντρικό υπολογιστή, που διαγιγνώσκεται δυσκολότερα από μια απορριφθείσα σύνδεση. Ρωτήστε τον πίνακα δρομολόγησης πριν προσθέσετε κανόνα.
Στην πύλη, ip route get 192.168.2.17 θα πρέπει να ονομάζει τη συσκευή σήραγγας· μια τοπική γέφυρα σημαίνει ότι το απομακρυσμένο εύρος επισκιάζεται και κανένας κανόνας nat δεν θα το διορθώσει. Αν το δικό σας δίκτυο χρησιμοποιεί ήδη 192.168.2.0/24, αναριθμήστε τον απομακρυσμένο τόπο αντί να στοιβάξετε αντιστοίχιση πάνω στη σύγκρουση.
Δοκιμή από πραγματικό πελάτη, και μετά διατήρηση
Δοκιμάστε από μηχάνημα που θα χρησιμοποιήσει πραγματικά το ψευδώνυμο, όχι από την πύλη, γιατί η τοπικά παραγόμενη κίνηση δεν περνά ποτέ από το PREROUTING με τον ίδιο τρόπο. Ανοίξτε σύνδεση προς έναν κεντρικό υπολογιστή με ψευδώνυμο και παρατηρήστε τους μετρητές και την καταχώριση conntrack να εμφανίζονται μαζί, μετά κλείστε την και επιβεβαιώστε ότι η καταχώριση φεύγει. Μια παρωχημένη καταχώριση δείχνει μισάνοιχτη σύνδεση, που συνήθως σημαίνει ότι η απάντηση δεν επέστρεψε ποτέ.
curl -sv http://10.50.1.17/ -o /dev/null
ss -tn dst 10.50.1.17
conntrack -L -d 10.50.1.17Δύο ή τρεις επιτυχημένες συνδέσεις αποδεικνύουν την αριθμητική, αλλά δεν λένε τίποτα για τη διάρκεια ούτε για τον επόμενο μηχανικό. Αποθηκεύστε τους κανόνες εκεί όπου τους διαβάζει η διαδικασία εκκίνησης, που σε Debian και Ubuntu σημαίνει iptables-save > /etc/iptables/rules.v4 με ενεργό το netfilter-persistent. Μια αντιστοίχιση που εξαφανίζεται στην επανεκκίνηση είναι χειρότερη από καμία, γιατί η διακοπή έρχεται χωρίς πρόσφατη αλλαγή να κατηγορήσετε.
Αφήστε ένα σημείωμα δίπλα στους κανόνες: το εύρος ψευδωνύμου, το πραγματικό εύρος, τον λόγο του ζεύγους και ποια πλευρά μπορεί να ξεκινήσει. Αυτό το σημείωμα χωρίζει έναν σχεδιασμό από έναν σωρό κανόνων που κανείς δεν τολμά να διαγράψει. Λύνει επίσης το μεταγενέστερο ερώτημα, όταν ο απομακρυσμένος τόπος προσθέτει κεντρικό υπολογιστή και μια διεύθυνση που κανείς δεν διαμόρφωσε απαντά ήδη. Αν το σημείωμα λέει ότι η απέναντι πλευρά χρειάζεται διαδρομή επιστροφής, ο επόμενος ξέρει ότι η αφαίρεση του κανόνα συγκάλυψης σπάει τη συνδεσιμότητα. Η τεκμηρίωση εδώ είναι φθηνή· το να ανακαλύψεις ξανά μια εξάρτηση από NAT στις τρεις τα ξημερώματα δεν είναι.