Ίδια IP διακομιστή, δύο διαδρομές: σήμανση της εξωτερικής ροής του OpenVPN
Μια διαδρομή κεντρικού υπολογιστή που εξαιρεί τον διακομιστή VPN εξαιρεί και το HTTPS προς αυτόν. Σημάνετε αντί αυτού τον κρυπτογραφημένο φάκελο και μετά δώστε τη σήραγγα στην ασήμαντη κίνηση.
Η συνήθης προστασία βρόχου είναι μια διαδρομή κεντρικού υπολογιστή: στείλτε την κίνηση για τη δημόσια διεύθυνση του διακομιστή VPN προς τα έξω από το uplink, ώστε η κρυπτογραφημένη συνεδρία να μην μπει ποτέ στη δική της σήραγγα. Αυτό λειτουργεί ακριβώς μέχρι τη στιγμή που θέλετε να φτάσετε και σε μια υπηρεσία ιστού στον ίδιο διακομιστή μέσω της σήραγγας, γιατί η εξαίρεση εξαρτάται από τον προορισμό και ο προορισμός είναι ίδιος. Η διέξοδος είναι να σταματήσετε να ταξινομείτε με βάση τον προορισμό και να αρχίσετε να ταξινομείτε με βάση ποια υποδοχή έστειλε το πακέτο.
Ξεκινήστε από τις δύο ροές που θέλετε να διαχωρίσετε
Η μία ροή είναι η ίδια η κρυπτογραφημένη μεταφορά OpenVPN, που πρέπει να βγει από το uplink, αλλιώς η σήραγγα θα μετέφερε τη δική της εξωτερική σύνδεση. Η άλλη είναι ένα συνηθισμένο αίτημα HTTPS προς την ίδια δημόσια διεύθυνση, που το θέλετε μέσα στη σήραγγα ώστε να φτάσει στην υπηρεσία από πηγή σήραγγας. Ίδιος προορισμός, σε πολλές περιπτώσεις ίδιος αριθμός θύρας, διαφορετική απαιτούμενη διαδρομή.
Για αυτή τη διαδρομή, υποθέστε έναν πελάτη στο 10.90.0.10 μέσω tun1, μια δημόσια διεύθυνση διακομιστή 198.51.100.25 και έναν άθικτο κύριο πίνακα του οποίου η προεπιλεγμένη διαδρομή δείχνει στο συνηθισμένο uplink. Η πλευρά του διακομιστή πρέπει επίσης να δέχεται την υπηρεσία ιστού στην εσωτερική διαδρομή και να επιστρέφει την κίνηση στην πηγή της σήραγγας· η αποστολή πακέτου σε δημόσια διεύθυνση δεν παρακάμπτει τον ακροατή ή την πολιτική τείχους προστασίας του διακομιστή.
Πριν αλλάξετε οτιδήποτε, καταγράψτε τους τρέχοντες κανόνες του κεντρικού υπολογιστή και επιλέξτε τιμές που δεν χρησιμοποιεί κανείς άλλος: ένα σημάδι, έναν αριθμό πίνακα και τρεις προτεραιότητες κανόνα. Κρατήστε έναν δρόμο επιστροφής στο μηχάνημα που δεν περνά από αυτή τη σύνδεση, γιατί ένα λάθος εδώ αφαιρεί την απομακρυσμένη σας πρόσβαση και όχι απλώς σπάει μια καρτέλα του προγράμματος περιήγησης.
Σημάνετε την υποδοχή που μεταφέρει τον φάκελο
Η διαμόρφωση του πελάτη αποκτά ένα σημάδι για τα κρυπτογραφημένα εξερχόμενα πακέτα του και σταματά να εγκαθιστά διαδρομές μόνη της, ώστε η πολιτική αντικατάστασης να είναι το μόνο που αποφασίζει τις διαδρομές:
mark 42
route-noexec
disable-dco
Το δεκαδικό 42 είναι δεκαεξαδικό 0x2a, και η δεκαεξαδική μορφή είναι αυτή που θα ταιριάξουν οι κανόνες δρομολόγησης. Η αναφορά των link-options περιγράφει το mark ως κάτι που εφαρμόζεται στα κρυπτογραφημένα εξερχόμενα πακέτα στο Linux, δηλαδή ακριβώς στην υποδοχή της οποίας τη διαδρομή πρέπει να ελέγξετε. Η απενεργοποίηση του offload του καναλιού δεδομένων κρατά αυτό το παράδειγμα στη διαδρομή του χώρου χρήστη, όπου η συμπεριφορά του σημαδιού είναι αυτή που περιγράφεται.
Το route-noexec καταστέλλει τις αυτόματες προσθήκες και αφαιρέσεις διαδρομών του OpenVPN. Δεν εγκαθιστά τίποτα στη θέση τους, οπότε από αυτή τη στιγμή ο ιδιοκτήτης των διαδρομών πρέπει να συντηρεί κάθε διαδρομή που χρειάζεται η σήραγγα. Αν ένας ιδιωτικός προορισμός εξαφανιστεί μετά την αλλαγή, αυτή είναι η απούσα πολιτική αντικατάστασης, όχι σφάλμα στο σημάδι.
Μην κρατάτε διαδρομή κεντρικού υπολογιστή στον κύριο πίνακα για το 198.51.100.25 όσο το κάνετε αυτό. Μια τέτοια διαδρομή επαναφέρει ακριβώς την εξαίρεση που το σχέδιο προσπαθεί να περιορίσει, και θα κερδίσει για τη ροή HTTPS πριν ερωτηθεί οποιαδήποτε από τις πολιτικές παρακάτω.
Στείλτε όλα τα υπόλοιπα στον πίνακα της σήραγγας
Μόλις υπάρξει η διεπαφή της σήραγγας και κρατήσει τη διεύθυνσή της, η πολιτική έχει ως εξής:
ip -4 route add default dev tun1 src 10.90.0.10 table 47100
ip -4 rule add priority 20000 lookup main suppress_prefixlength 0
ip -4 rule add priority 20001 not fwmark 0x2a lookup 47100
ip -4 rule add priority 20002 not fwmark 0x2a unreachable
Ο πρώτος κανόνας κρατά ορατές τις ειδικές διαδρομές του κεντρικού υπολογιστή, συμπεριλαμβανομένου οποιουδήποτε εγκεκριμένου τοπικού δικτύου, ενώ κάνει αόρατη την προεπιλεγμένη διαδρομή του κύριου πίνακα για αυτή την αναζήτηση. Αυτή η διάκριση έχει σημασία: η καταστολή της προεπιλεγμένης δεν είναι το ίδιο με την αγνόηση του πίνακα, και οι τοπικές εξαιρέσεις που χρειάζεστε ακόμη επιβιώνουν ακριβώς εξαιτίας της. Διαβάστε τις εξαιρέσεις μία προς μία αντί να υποθέσετε ότι το αποτέλεσμα είναι ένας καθολικός διακόπτης διακοπής.
Η ασήμαντη κίνηση πέφτει τότε στον πίνακα της σήραγγας, παίρνει την πηγή της σήραγγας και βγαίνει μέσω του VPN. Η σημασμένη κίνηση αποτυγχάνει στη δοκιμή fwmark στους δύο επόμενους κανόνες και συνεχίζει στην συνηθισμένη κύρια αναζήτηση πιο κάτω στη λίστα, όπου βρίσκεται ακόμη η προεπιλεγμένη του uplink. Ο τελικός κανόνας unreachable είναι αυτός που εμποδίζει μια ασήμαντη ροή να πέσει ήσυχα πίσω στο uplink όταν λείπει η διαδρομή της σήραγγας. Ο επιλογέας είναι το σημάδι από την αρχή ως το τέλος, και η διεύθυνση προορισμού δεν μπαίνει ποτέ στην απόφαση.
Κρατήστε αυτή τη φρουρά στη θέση της μεταξύ αποσυνδέσεων και εγκαταστήστε την μαζί με την υπόλοιπη πολιτική αντί με το χέρι. Ένας κανόνας που εξαφανίζεται με τη διεπαφή δεν είναι πολιτική, είναι σύμπτωση. Η διαγραφή της πολιτικής όταν πέσει η σήραγγα αλλάζει τον τρόπο αποτυχίας από «μπλοκαρισμένο» σε «διαρρεύσαν», και μια παρωχημένη διαδρομή σήραγγας που λήγει αργότερα είναι ένα πολύ ευκολότερο πρόβλημα να εξηγηθεί από κίνηση που βγήκε από λάθος διεπαφή.
Κάντε την επιστροφή να βλέπει το ίδιο σημάδι
Τα εξερχόμενα σημάδια είναι μόνο το μισό του μηχανισμού, και αυτό είναι το μέρος που παραλείπουν οι περισσότερες αναπαραγωγές. Οι απαντήσεις στην κρυπτογραφημένη συνεδρία φτάνουν στο uplink και υπόκεινται σε επικύρωση διαδρομής επιστροφής, η οποία ρωτά αν η πηγή θα δρομολογούνταν πίσω από τον ίδιο δρόμο από τον οποίο ήρθε. Χωρίς βοήθεια, αυτή η αναζήτηση εφαρμόζει την ασήμαντη πολιτική σήραγγας σας και καταλήγει ότι το πακέτο είναι στη λάθος διεπαφή.
Η διόρθωση ανήκει στον ιδιοκτήτη του τείχους προστασίας: αποθηκεύστε το σημάδι στην εξερχόμενη σύνδεση, επαναφέρετέ το στα αντίστοιχα εισερχόμενα πακέτα και ενεργοποιήστε τη διαχείριση σημαδιών επικυρωμένη από την πηγή για τη σχετική διαδρομή. Το ότι το OpenVPN θέτει σημάδι υποδοχής δεν κάνει κανένα από αυτά τα τρία, και μια συνταγή που απαριθμεί μόνο τις επιλογές του πελάτη είναι ελλιπής. Ζητήστε αυτή την ενσωμάτωση γραπτώς, γιατί είναι το λιγότερο ορατό μέρος του σχεδίου και το πιο εύκολο να χαθεί σε μια ανακατασκευή.
Ούτε ο χαλαρός έλεγχος διαδρομής επιστροφής είναι υποκατάστατο. Η χαλαρή λειτουργία χρειάζεται ακόμη κάποια διαδρομή για την πηγή, και η φρουρά unreachable που προσθέσατε αφαιρεί σκόπιμα μία για τις ασήμαντες αναζητήσεις. Ολοκληρώστε και αναθεωρήστε την ενσωμάτωση του σημαδιού σύνδεσης πριν βασιστείτε σε αυτό το σχέδιο, και αντιμετωπίστε τα φίλτρα κεντρικού υπολογιστή ως ξεχωριστό ζήτημα: ένα σημάδι είναι σήμα δρομολόγησης, όχι άδεια. Αν λείπει η ενσωμάτωση, το σύμπτωμα είναι μια συνεδρία που εγκαθίσταται και μετά σωπαίνει μόλις αρχίσουν να φτάνουν απαντήσεις.
Αποδείξτε το με δύο αναζητήσεις διαδρομής
Συγκρίνετε τι αποφασίζει ο πυρήνας για τα δύο περιβάλλοντα, και διαβάστε τα πεδία dev και src αντί της κατάστασης εξόδου:
ip -4 route get 198.51.100.25
ip -4 route get 198.51.100.25 mark 0x2a
Η πρώτη αναζήτηση πρέπει να καταλήγει στο tun1 με την πηγή της σήραγγας, και η δεύτερη στο uplink. Είναι συνθετικές αναζητήσεις, οπότε αποδεικνύουν την πολιτική και όχι τη ζωντανή διεργασία: επιβεβαιώστε ξεχωριστά την πραγματική διαδρομή μεταφοράς του πελάτη που εκτελείται και μετά κάντε ένα πραγματικό αίτημα HTTPS με την επαλήθευση πιστοποιητικών ενεργή.
Γράψτε τι δεν καλύπτει το σχέδιο πριν το δηλώσετε ολοκληρωμένο. Το DNS, το IPv6 και ο κύκλος ζωής των κανόνων χρειάζονται το καθένα τη δική του απόφαση, και αυτό είναι ένα παράδειγμα δρομολόγησης IPv4 και όχι μια πλήρης διαμόρφωση ιδιωτικότητας. Η αξία του είναι ο επιλογέας: ο φάκελος παίρνει την εξαίρεση του uplink, και μια συνηθισμένη υπηρεσία στην ίδια διεύθυνση δεν χρειάζεται να την κληρονομήσει.