Παρακολουθήστε το τούνελ να σηκώνεται και τον πελάτη να κάνει ping στην άλλη πλευρά, και μετά μια δημόσια διεύθυνση που ανήκει πίσω από το VPN απαντά από αλλού, ή καθόλου. Αυτό το σύμπτωμα συνήθως δεν έχει καμία σχέση με την κρυπτογράφηση ή τα πιστοποιητικά. Ένα πρόθεμα που δρομολογεί ο πάροχος παραδίδεται ως διαδρομή IP, και η μεταφορά του μέσω OpenVPN σημαίνει αναπαραγωγή αυτής της διαδρομής σε δύο επίπεδα και διατήρηση της διεύθυνσης προέλευσης στη διαδρομή επιστροφής. Η γεφύρωση του WAN δεν απαιτείται, και η προσθήκη της διεύθυνσης σε μια διεπαφή δεν δημιουργεί την ανάντη διαδρομή.

Το πρόθεμα πρέπει πρώτα να δρομολογηθεί προς εσάς

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

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

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

Δύο επίπεδα δρομολόγησης: διαδρομή πυρήνα και iroute

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

Η διαδρομή στην πλευρά του διακομιστή μοιάζει έτσι, με το πρόθεμα και τη μάσκα να ταιριάζουν με την εκχώρηση:

ip route add 198.51.100.64/28 dev tun0

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

iroute 198.51.100.64 255.255.255.240

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

Πού ζει η διεύθυνση υπηρεσίας

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

Σε έναν πελάτη Linux που τερματίζει την υπηρεσία τοπικά, αρκεί μία διεύθυνση κεντρικού υπολογιστή:

ip address add 198.51.100.70/32 dev lo

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

Διατηρήστε τη δημόσια προέλευση στην επιστροφή

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

Στον διακομιστή εισόδου, ένας ευρύς κανόνας masquerade είναι ο συνήθης ένοχος. Ξαναγράφει τη δημόσια προέλευση στη βασική διεύθυνση του διακομιστή, και ο πελάτης δεν βλέπει ποτέ την αληθινή:

iptables -t nat -S POSTROUTING

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

Επαληθεύστε και τις δύο κατευθύνσεις πριν το εμπιστευτείτε

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

Ρωτήστε τον πυρήνα ποια διαδρομή ακολουθεί μια εκχωρημένη διεύθυνση, και παρατηρήστε το τούνελ όσο εκτελείται ένα αίτημα:

ip route get 198.51.100.70
sudo tcpdump -ni tun0 host 198.51.100.70

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

sysctl net.ipv4.conf.tun0.rp_filter net.ipv4.conf.eth0.rp_filter

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

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