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

Μία προεπιλεγμένη διαδρομή, δύο ιδιοκτήτες

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

Το OpenVPN έχει έναν διακόπτη ακριβώς γι’ αυτό. route-noexec εμποδίζει τον πελάτη να αγγίξει καθόλου τον κύριο πίνακα, και οι τιμές που θα χρησιμοποιούσε εξάγονται σε ένα σενάριο route-up ως route_vpn_gateway, dev και οι διευθύνσεις της διεπαφής. Έπειτα αποφασίζεις εσύ ποιος πίνακας παίρνει ποια διαδρομή, σε κώδικα που μπορείς να διαβάσεις αργότερα.

Πίνακας πολιτικής ή επανεγγραφή του κύριου

ApproachWhat it buysWhat it costs
Separate table plus source ruleLAN traffic and host traffic keep independent defaultsEvery lookup now depends on rule order
Editing the main table onlyFewer moving parts on a single-purpose hostOne mistake takes the gateway offline entirely
Two half-default routesWorks for a full-tunnel clientAmbiguous on a host that must answer on its LAN address

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

echo "10 vpn" >> /etc/iproute2/rt_tables
ip rule add from 192.168.50.0/24 table vpn
ip route add default via 10.8.0.1 dev tun0 table vpn

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

Ο κανόνας πρέπει να ταιριάζει και με τον κεντρικό υπολογιστή

Ένας κανόνας που ταιριάζει μόνο με το πρόθεμα του LAN καλύπτει τα προωθημένα πακέτα. Δεν καλύπτει την κίνηση που δημιουργεί η ίδια η πύλη ούτε τις απαντήσεις που στέλνει πίσω στους πελάτες του LAN, οι οποίες φέρουν τη διεύθυνση LAN της πύλης ως πηγή τους. Αυτές οι αναζητήσεις πέφτουν στο main και μπορούν ακόμη να βγουν από τη σήραγγα.

Πρόσθεσε δεύτερο κανόνα για τη διεύθυνση LAN της ίδιας της πύλης ή διεύρυνε τον πρώτο κανόνα σε ένα σύνολο που περιλαμβάνει και τις δύο. Η σειρά μετράει: βάλε πρώτα τον πιο συγκεκριμένο κανόνα και έλεγξε το αποτέλεσμα με μια αναζήτηση που ονομάζει ρητά την πηγή.

ip route get 203.0.113.9 from 192.168.50.1

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

NAT ή διαδρομή στην απέναντι πλευρά

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

iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADE

Διάλεξε NAT όταν δεν ελέγχεις τον διακομιστή και δεν μπορείς να προσθέσεις διαδρομές εκεί. Διάλεξε τη διαδρομή στην πλευρά του διακομιστή όταν μετρούν τα αρχεία καταγραφής, ο έλεγχος πρόσβασης ή η συμμετρία της διαδρομής επιστροφής, γιατί η συγκάλυψη σβήνει την αρχική διεύθυνση από ό,τι καταγράφει η απέναντι πλευρά.

Σε κάθε περίπτωση η προώθηση πρέπει να είναι ενεργή, και το αυστηρό φιλτράρισμα αντίστροφης διαδρομής μπορεί να απορρίψει την απάντηση όταν το main δεν θα είχε επιλέξει τη σήραγγα για εκείνη την πηγή. Έλεγξε την πραγματική τιμή πριν κατηγορήσεις τη σήραγγα.

Κάνε τον διαχωρισμό να επιβιώσει μιας επανασύνδεσης

Κανόνες και διαδρομές που προστέθηκαν με το χέρι εξαφανίζονται όταν η διεπαφή δημιουργηθεί ξανά, και μια παρωχημένη εγγραφή πίνακα μπορεί να επιβιώσει της συνεδρίας που τη δικαιολόγησε. Βάλε τον κανόνα του πίνακα, τη διαδρομή της σήραγγας και την εγγραφή συγκάλυψης μέσα στο σενάριο route-up του πελάτη και άδειασε τον πίνακα στην αρχή του σεναρίου ώστε μια παλιά πύλη να μην μπορεί να επιβιώσει στη νέα συνεδρία.

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

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