NAT του LAN μέσω tun0 σε πύλη VPN OpenBSD
Διαλέξτε ανάμεσα σε NAT προέλευσης και διαδρομή επιστροφής για την κίνηση LAN που φεύγει από έξοδο tun0 του OpenBSD και μετά τοποθετήστε τον κανόνα nat-to εκεί όπου το pf θα τον αφήσει ακόμη να περάσει.
Δύο μηχανικοί με την ίδια πύλη OpenBSD θα σας δώσουν συχνά δύο διαφορετικά σύνολα κανόνων για να φτάσετε σε ένα απομακρυσμένο δίκτυο, και τα δύο μπορούν να υπερασπιστούν. Η επιλογή ανάμεσα σε μετάφραση προέλευσης και διαδρομή επιστροφής δεν είναι καθόλου ζήτημα σύνταξης. Εξαρτάται από το τι γνωρίζει ήδη η απομακρυσμένη πλευρά για το 192.168.88.0/24 και τι πρέπει να κρατήσετε στα αρχεία καταγραφής σας. Κάντε το λάθος και η γραμμή nat-to θα φαίνεται απόλυτα σωστή ενώ οι απαντήσεις θα χάνονται στην απομακρυσμένη προεπιλεγμένη πύλη.
Η δρομολόγηση και η επανεγγραφή απαντούν σε διαφορετικά ερωτήματα
Ο πίνακας δρομολόγησης αποφασίζει ότι το 172.20.0.0/16 είναι προσβάσιμο μέσω tun0, και αυτή η απόφαση λαμβάνεται πριν συμβουλευτεί οποιαδήποτε μετάφραση pf. Η μετάφραση προέλευσης αλλάζει μετά την κεφαλίδα του πακέτου ώστε το απομακρυσμένο άκρο να βλέπει τη διεύθυνση σήραγγας της πύλης αντί για έναν κεντρικό υπολογιστή LAN. Κανένας μηχανισμός δεν υποκαθιστά τον άλλο: ένας κανόνας nat δεν μπορεί να δημιουργήσει διαδρομή από το τίποτα, και μια διαδρομή δεν μπορεί να πείσει έναν απομακρυσμένο δρομολογητή που δεν έχει ακούσει ποτέ για το ιδιωτικό σας υποδίκτυο. Όταν η απομακρυσμένη πλευρά δεν έχει διαδρομή επιστροφής, οι απαντήσεις απορρίπτονται ή προωθούνται στην προεπιλεγμένη πύλη της, και καμία ρύθμιση κανόνων δεν το διορθώνει.
Με απλά λόγια, η προώθηση απαντά πού πηγαίνει η κίνηση και η μετάφραση απαντά από ποιον φαίνεται ότι έρχεται. Κρατήστε τα σε ξεχωριστά νοητικά κουτιά όσο σχεδιάζετε το σύνολο κανόνων.
Τρεις συνθήκες που το κρίνουν
Κάντε τρεις ερωτήσεις με σειρά και ο σχεδιασμός συνήθως διαλέγεται μόνος του. Έχει το απομακρυσμένο δίκτυο μια στατική διαδρομή που δείχνει στη διεύθυνση σήραγγας για το 192.168.88.0/24, ή ο διαχειριστής του ελέγχει τους δρομολογητές σε εκείνη τη διαδρομή; Αν ναι, αφήστε τις διευθύνσεις LAN να ταξιδέψουν αμετάβλητες και παραλείψτε εντελώς τη μετάφραση. Χρειάζεστε ορατότητα ανά πελάτη στην απομακρυσμένη πλευρά, είτε για πολιτική πρόσβασης είτε για ίχνος ελέγχου; Αν ναι, η διατήρηση της προέλευσης αξίζει τον κόπο της δρομολόγησης. Είναι η διεύθυνση σήραγγας αρκετά σταθερή για να γραφτεί σε απομακρυσμένη διαδρομή, ή αλλάζει μεταξύ επανασυνδέσεων;
Αν οποιαδήποτε απάντηση είναι όχι ή άγνωστη, το nat-to είναι η πραγματιστική επιλογή, και είναι επίσης η αναστρέψιμη. Ένας κανόνας μετάφρασης αφαιρείται με μία μόνο γραμμή μόλις η απομακρυσμένη πλευρά προσθέσει σωστή διαδρομή. Μια διαδρομή επιστροφής που δεν εγκαταστάθηκε ποτέ σας κοστίζει ένα νήμα υποστήριξης κάθε φορά που κάποιος ρωτά γιατί η σήραγγα λειτουργεί μόνο προς μία κατεύθυνση.
Τοποθετήστε το απόσπασμα εκεί όπου το pf το αξιολογεί πραγματικά
Το παρακάτω απόσπασμα υποθέτει ότι το LAN είναι 192.168.88.0/24, το απομακρυσμένο δίκτυο είναι 172.20.0.0/16 και η διεπαφή σήραγγας είναι tun0. Τίποτα μέσα του δεν επιλέγει επόμενο άλμα. Απλώς επανεγγράφει την προέλευση σε πακέτα που φεύγουν ήδη μέσω της σήραγγας.
match out on tun0 inet from 192.168.88.0/24 to 172.20.0.0/16 nat-to (tun0)
pass in on em0 inet from 192.168.88.0/24 to any keep state
Δύο λεπτομέρειες στην πρώτη γραμμή κουβαλούν το μεγαλύτερο βάρος. Οι παρενθέσεις γύρω από το tun0 λένε στο pf να διαβάζει τη διεύθυνση της διεπαφής κάθε φορά που χτίζει μια καταχώριση κατάστασης, κάτι που μετράει όταν η σήραγγα αριθμείται ξανά μετά από επανασύνδεση. Η λέξη match σημαίνει ότι ο κανόνας επανεγγράφει και μετά πέφτει παρακάτω, οπότε ένας ξεχωριστός κανόνας pass πρέπει ακόμη να επιτρέψει τη ροή. Η διεπαφή που ονομάζεται στη γραμμή match πρέπει επίσης να είναι αυτή που επιλέγει ο πίνακας δρομολόγησης, αλλιώς το pf αξιολογεί τον κανόνα σε διαφορετική εξερχόμενη διαδρομή από αυτήν που παίρνει πραγματικά το πακέτο.
Μην ξεχάσετε την πλευρά του πυρήνα. Η προώθηση IPv4 πρέπει να είναι ενεργοποιημένη, και οι κανόνες pass με κατάσταση για σήραγγα και LAN πρέπει να υπάρχουν πριν αποκτήσει νόημα οτιδήποτε από αυτά. Η ενότητα PF NAT στις συχνές ερωτήσεις του OpenBSD είναι η σωστή αναφορά για τη σειρά των λέξεων-κλειδιών εδώ.
Επαληθεύστε το σύνολο κανόνων πριν εμπιστευτείτε την κίνηση
Ελέγξτε πρώτα τη σύνταξη με pfctl -nf /etc/pf.conf, το οποίο αναλύει το αρχείο χωρίς να το φορτώνει. Μετά φορτώστε την πολιτική και διαβάστε τι κρατά πραγματικά ο πυρήνας, γιατί ένας κανόνας που αναλύθηκε καθαρά μπορεί ακόμη να επισκιαστεί ή να προσαρτηθεί στη λάθος διεπαφή. Το pfctl -sn εκτυπώνει τους κανόνες μετάφρασης στη φορτωμένη τους μορφή, και το pfctl -sr εκτυπώνει τους κανόνες φιλτραρίσματος με σειρά αξιολόγησης.
Παρακολουθήστε μετά το καλώδιο. Στην πύλη, το tcpdump -ni tun0 'host 172.20.0.10' δείχνει αν η διεύθυνση προέλευσης που φεύγει από τη σήραγγα είναι η διεύθυνση σήραγγας ή ο κεντρικός υπολογιστής LAN. Ένα γρήγορο netstat -rn -f inet επιβεβαιώνει σε ποια διεπαφή επιλύεται ο προορισμός. Μόλις ρεύσει η κίνηση, το pfctl -ss απαριθμεί καταχωρίσεις κατάστασης· αν μια ροή δεν παρήγαγε κατάσταση, το πακέτο δεν ταίριαξε ποτέ με κανόνα που δημιουργεί μία.
Αν η πλευρά της σήραγγας φαίνεται σωστή και οι απαντήσεις ακόμη δεν φτάνουν ποτέ, σταματήστε να επεξεργάζεστε το pf. Η υπόλοιπη βλάβη βρίσκεται στον απομακρυσμένο δρομολογητή, όπου η απάντηση στέλνεται προς μια ιδιωτική διεύθυνση που εκείνη η πλευρά δεν μπορεί να φτάσει.
Όταν η μετάφραση κοστίζει περισσότερο απ' όσο γλιτώνει
Η μετάφραση κρύβει πελάτες, και μερικές φορές αυτό είναι ακριβώς η λάθος ανταλλαγή. Τα επικαλυπτόμενα υποδίκτυα είναι μια περίπτωση: αν η απομακρυσμένη πλευρά χρησιμοποιεί επίσης εσωτερικά το 192.168.88.0/24, η παρουσίαση των κεντρικών υπολογιστών LAN ως πύλης χειροτερεύει τη σύγκρουση αντί να τη βελτιώνει. Οι πολιτικές IPsec που επιλέγουν κίνηση κατά ζεύγος διευθύνσεων είναι μια άλλη, γιατί η βάση δεδομένων πολιτικής ασφαλείας αντιστοιχίζεται πριν από τη μετάφραση και δεν βλέπει ποτέ το επανεγγεγραμμένο πακέτο σας. Οποιαδήποτε ανάπτυξη χρεώνει, περιορίζει ή ελέγχει ανά χρήστη χάνει επίσης την ταυτότητα που χρειάζεται τη στιγμή που η προέλευση καταρρέει σε μία διεύθυνση.
Τα φορητά παράγωγα του pf είναι ξεχωριστή παγίδα. Τα προϊόντα που παράγουν τα δικά τους αρχεία κανόνων περιμένουν το NAT να ρυθμιστεί μέσω της διεπαφής τους, και τα χειροκίνητα επεξεργασμένα αποσπάσματα αντικαθίστανται στην επόμενη επαναφόρτωση. Σύνολα κανόνων αντιγραμμένα από οδηγούς που γράφτηκαν πριν υπάρξει η λέξη-κλειδί match δεν θα φορτωθούν σε τρέχοντα πυρήνα, οπότε μεταφέρετε τη σύνταξη και διαβάστε το σφάλμα αντί να μαντεύετε.
Ο κανόνας απόφασης που επιβιώνει από την επαφή με πραγματικά δίκτυα είναι σύντομος: εγκαταστήστε διαδρομή επιστροφής όταν μπορείτε, μεταφράστε όταν δεν μπορείτε, και σημειώστε ποια από τις τρεις συνθήκες σας έκανε να διαλέξετε. Αυτή η σημείωση γλιτώνει στον επόμενο ένα απόγευμα.