Masquerade ή δρομολόγηση πολιτικής: κίνηση LAN μέσω πύλης VPN
Μια πύλη Linux μπορεί να κρύψει τις πηγές του LAN πίσω από τη διεύθυνση της σήραγγας ή να τις δρομολογήσει αναλλοίωτες. Η επιλογή εξαρτάται από το ποιος κατέχει την απέναντι πλευρά και από τη διαδρομή επιστροφής της.
Το να βάλεις ένα ολόκληρο LAN πίσω από μια σήραγγα VPN είναι το εύκολο μέρος· το να αποφασίσεις πώς βλέπει η απέναντι πλευρά αυτούς τους πελάτες δεν είναι. Το masquerade ξαναγράφει κάθε πηγή του LAN στη διεύθυνση σήραγγας της πύλης, ώστε το απομακρυσμένο άκρο να απαντά σε έναν μόνο ομότιμο. Η δρομολόγηση πολιτικής διατηρεί τις αρχικές διευθύνσεις και απαιτεί από το απομακρυσμένο άκρο να ξέρει πώς να τις φτάσει. Κανένα από τα δύο δεν είναι προεπιλογή· η επιλογή προκύπτει από το ποιος κατέχει την απέναντι πλευρά και από το αν η ταυτότητα ανά συσκευή έχει σημασία.
Τα δύο σχέδια υπόσχονται διαφορετικά πράγματα
Το masquerade περιορίζει το LAN σε έναν μόνο ορατό υπολογιστή: την πύλη. Το απομακρυσμένο δίκτυο απαντά σε αυτή τη μία διεύθυνση, και η πύλη μεταφράζει τις απαντήσεις πίσω στον πελάτη που ξεκίνησε τη ροή. Δεν χρειάζεται διαδρομή προς τα ιδιωτικά σου προθέματα στην απέναντι πλευρά, γι’ αυτό αυτό το σχέδιο επιβιώνει με πάροχο που αρνείται να τα μεταφέρει. Η πύλη γίνεται επίσης η πηγή κάθε σύνδεσης, οπότε η απέναντι πλευρά δεν μπορεί να ξεχωρίσει δύο πελάτες.
Η δρομολόγηση πολιτικής κρατά άθικτη τη διεύθυνση κάθε πελάτη. Το απομακρυσμένο δίκτυο βλέπει την πραγματική πηγή και μπορεί να την καταγράψει, να εφαρμόσει κανόνα ανά υπολογιστή ή να στείλει την απάντηση απευθείας σε αυτή τη διεύθυνση. Αυτή η ορατότητα είναι το όλο νόημα, και συνοδεύεται από υποχρέωση: η απέναντι πλευρά πρέπει να έχει διαδρομή για το πρόθεμα του LAN που δείχνει πίσω μέσα από τη σήραγγα. Σχεδίασε αυτή τη διαδρομή πριν ενεργοποιήσεις τον κανόνα, γιατί η σήραγγα θα σηκωθεί ούτως ή άλλως και θα λείπουν μόνο οι απαντήσεις.
Οι τρόποι αποτυχίας διαφέρουν όσο και οι υποσχέσεις. Ένας κανόνας masquerade που λείπει παράγει πακέτα που φεύγουν με ιδιωτικές πηγές και δεν επιστρέφουν ποτέ. Μια διαδρομή επιστροφής που λείπει δίνει το ίδιο σύμπτωμα στη δρομολόγηση πολιτικής, αλλά η διόρθωση ανήκει στον απομακρυσμένο δρομολογητή και όχι στην πύλη.
Masquerade: ένας ομότιμος στην απέναντι πλευρά
Η διαδρομή του masquerade έχει μια σειρά που μετράει. Η προώθηση πρέπει να είναι ενεργή πριν αποδώσει χρήσιμο έργο οποιοσδήποτε κανόνας NAT, ο πίνακας φιλτραρίσματος πρέπει να επιτρέπει τη διέλευση και προς τις δύο κατευθύνσεις, και μόνο τότε η μετάφραση εφαρμόζεται στη διεπαφή της σήραγγας.
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Οι πελάτες χρειάζονται ακόμη μια διαδρομή προς την πύλη. Είτε η πύλη είναι ο προεπιλεγμένος δρομολογητής τους, είτε κουβαλούν συγκεκριμένη διαδρομή για το απομακρυσμένο πρόθεμα· αν ένας ξεχωριστός δρομολογητής παραμένει προεπιλογή, χρειάζεται στατική διαδρομή για τους προορισμούς της σήραγγας, αλλιώς το πακέτο πάει στο λάθος άλμα πριν το δει η πύλη.
Το DNS είναι ξεχωριστή απόφαση. Ένας resolver στην απέναντι πλευρά απαντά μόνο αν η απάντησή του μπορεί να ταξιδέψει πίσω στον πελάτη. Στο masquerade το ερώτημα φαίνεται να έρχεται από την πύλη, οπότε η διαδρομή επιστροφής του resolver ικανοποιείται ήδη· στη δρομολόγηση πολιτικής ο resolver χρειάζεται την ίδια διαδρομή επιστροφής όπως κάθε άλλη απομακρυσμένη υπηρεσία.
Δρομολόγηση πολιτικής: κράτα την πηγή, πρόσθεσε διαδρομή επιστροφής
Η δρομολόγηση πολιτικής ξεκινά με έναν πίνακα και έναν κανόνα που τον επιλέγει. Η κίνηση που εισέρχεται από τη διεπαφή του LAN στέλνεται σε ειδικό πίνακα, και αυτός ο πίνακας φέρει προεπιλεγμένη διαδρομή μέσα από τη σήραγγα. Ο κύριος πίνακας μένει ανέγγιχτος, οπότε η κίνηση που παράγει η ίδια η πύλη μπορεί να ακολουθήσει άλλη διαδρομή.
ip rule add iif eth1 table vpn
ip route add default dev tun0 table vpn
Στη συνέχεια η απέναντι πλευρά πρέπει να δρομολογήσει το πρόθεμα του LAN πίσω μέσα από τη σήραγγα. Αυτό είναι ρύθμιση στον απομακρυσμένο δρομολογητή, όχι σε αυτή την πύλη. Η πύλη πρέπει επίσης να δέχεται απαντήσεις που φτάνουν σε διαφορετική διεπαφή από αυτή που θα προέβλεπε ο κύριος πίνακας· το χαλαρό φιλτράρισμα αντίστροφης διαδρομής (rp_filter ορισμένο σε 2) είναι η συνήθης προσαρμογή όταν η αυστηρή λειτουργία απορρίπτει αυτά τα πακέτα.
Όταν δύο σήραγγες είναι ενεργές, σημείωσε κάθε ροή κατά την είσοδό της και άφησε τη σημείωση να διαλέξει τον πίνακα. Ένας κανόνας που κοιτά μόνο τη διεπαφή εισόδου στέλνει την κίνηση και των δύο σηράγγων στον ίδιο πίνακα, οπότε η δεύτερη σήραγγα κλέβει ροές από την πρώτη. Δοκίμασε αυτή τη σημείωση με μια σύνδεση που επιβιώνει από επανασύνδεση, γιατί τότε εμφανίζεται μια μικτή πολιτική.
Αποφάσισε με βάση την ιδιοκτησία και το τι καταγράφει η απέναντι πλευρά
Αν η σήραγγα καταλήγει σε πάροχο, χρησιμοποίησε masquerade. Αυτός ο φορέας δεν πρόκειται να δρομολογήσει τις ιδιωτικές σου περιοχές LAN, και δεν έχει λόγο να ξεχωρίζει μεμονωμένους πελάτες πίσω από την πύλη σου. Ένας ορατός ομότιμος είναι το μόνο μοντέλο που υποστηρίζει η πολιτική του, οπότε δώσε του αυτό και κράτα τη μετάφραση στην άκρη σου. Ο πάροχος βλέπει έναν ομότιμο, που είναι ακριβώς αυτό που περιμένει η πολιτική του, και οι πελάτες σου κληρονομούν αυτή τη μία ταυτότητα.
Αν και τα δύο άκρα είναι δικά σου και οι απομακρυσμένες υπηρεσίες δρουν με βάση τις διευθύνσεις πηγής, η δρομολόγηση πολιτικής κερδίζει την επιπλέον διαδρομή της. Κανόνες τείχους προστασίας, πρόσβαση ανά χρήστη και αρχεία ελέγχου μπορούν τότε να ξεχωρίζουν πελάτες. Αν η απέναντι πλευρά χρειάζεται μόνο προσβασιμότητα, το masquerade είναι απλούστερο και αφαιρεί μια κατηγορία λαθών διαδρομής επιστροφής.
Τα υβριδικά σχέδια είναι φυσιολογικά: δρομολόγηση πολιτικής μέσα στο δικό σου δίκτυο, masquerade στην άκρη του παρόχου. Αυτό που μετράει είναι να γράψεις ποιο άλμα μεταφράζει και ποιο άλμα δρομολογεί, γιατί ένας τυχαίος κανόνας NAT που προστέθηκε για έναν πελάτη κρύβει την πηγή για κάθε πελάτη στην ίδια αλυσίδα.
Επαλήθευσε από έναν πελάτη και μετά από δεύτερο πελάτη
Τρέξε τη δοκιμή εκεί όπου ξεκινά η κίνηση. Έλεγξε τη διαδρομή που χρησιμοποιεί ο υπολογιστής, παρατήρησε το πακέτο να εμφανίζεται στη διεπαφή της σήραγγας και εξέτασε το conntrack για τη μετάφραση. Αυτή η αλληλουχία αποδεικνύει ότι το πακέτο πήρε την προβλεπόμενη διαδρομή και όχι απλώς ότι έφτασε κάπου.
Επανάλαβε τη δοκιμή μετά από επανασύνδεση. Ένας κανόνας masquerade που ονομάζει τη διεπαφή επιβιώνει σε νέα διεύθυνση σήραγγας· ένας κανόνας που ονομάζει την παλιά διεύθυνση δεν επιβιώνει. Έπειτα δοκίμασε δεύτερο υπολογιστή του LAN, γιατί ένα σχέδιο που δουλεύει σε ένα μηχάνημα συχνά εξαρτάται από τη δική του διαδρομή και όχι από την πολιτική της πύλης.
Γράψε το μοντέλο που διάλεξες, την πηγή που μεταφράστηκε ή διατηρήθηκε και τον ιδιοκτήτη της διαδρομής επιστροφής στις σημειώσεις της πύλης. Αλλιώς ο επόμενος που θα προσθέσει πελάτη ή σήραγγα θα μαντέψει, και η μαντεψιά είναι ο τρόπος που μια λειτουργική εγκατάσταση LAN-προς-VPN γίνεται μερική.