Δύο πύλες, ένα VPN: γιατί το OpenVPN διαλέγει λάθος ζεύξη ανόδου
Το τούνελ είναι εντάξει· το socket βγαίνει από λάθος WAN. Διαβάστε τη ζωντανή διεύθυνση του peer, καρφώστε μια διαδρομή υπολογιστή και ελέγξτε πρώτα τους κανόνες πολιτικής.
Δύο ζεύξεις ανόδου, ένα τούνελ, και η κίνηση βγαίνει από εκείνη που δεν διαλέξατε. Τα ιδιωτικά υποδίκτυα είναι προσβάσιμα, το αρχείο καταγραφής αναφέρει επιτυχή σύνδεση, και η μετρούμενη ζεύξη είναι αυτή που τη μεταφέρει. Τίποτα στην έξοδο του OpenVPN δεν αναφέρει πύλη, γιατί ο client δεν διάλεξε ποτέ καμία. Άνοιξε ένα socket σε μια απομακρυσμένη διεύθυνση και άφησε τον πυρήνα να αποφασίσει πώς θα φτάσει σε αυτή τη διεύθυνση.
Η διεύθυνση του τούνελ δεν είναι το τελικό σημείο
Σε κάθε συνεδρία υπάρχουν δύο διαφορετικά μονοπάτια. Το εξωτερικό μονοπάτι μεταφέρει την κρυπτογραφημένη μεταφορά στη δημόσια διεύθυνση του διακομιστή. Το εσωτερικό μονοπάτι μεταφέρει ό,τι σπρώχνει ο διακομιστής μέσα στο τούνελ, και οι κανόνες δρομολόγησης για το ένα δεν επηρεάζουν το άλλο.
Η καταχώριση remote στο προφίλ ονομάζει τον εξωτερικό προορισμό, άρα αυτή είναι η διεύθυνση που πρέπει να καρφωθεί. Είναι επίσης η τιμή που αλλάζει όταν ένα όνομα υπολογιστή επιλύεται διαφορετικά ή το προφίλ απαριθμεί πολλά remote.
Βρείτε τη διεύθυνση που κάλεσε πραγματικά ο client
Διαβάστε το ζωντανό socket αντί για το αρχείο ρυθμίσεων. Ο πίνακας socket δείχνει τον peer με τον οποίο συνδέθηκε πραγματικά η διεργασία, και αυτή είναι η τιμή που πρέπει να ταιριάζει μια εξαίρεση. Ένα προφίλ μπορεί να επεξεργαστεί αφού ξεκινήσει η συνεδρία, και το socket είναι η μόνη απόδειξη για το τι κλήθηκε:
ss -tunp | grep -i openvpn
journalctl -u openvpn-client@work --no-pager | grep -i "Peer Connection Initiated"
Η γραμμή του αρχείου καταγραφής αναφέρει τη διεύθυνση και τη θύρα του peer τη στιγμή της σύνδεσης. Αν διαφωνεί με το προφίλ, κάτι μπροστά από τον client ξαναγράφει τον προορισμό πριν ξεκινήσει η σύνδεση.
Ελέγξτε και την οικογένεια διευθύνσεων. Ένα προφίλ διπλής στοίβας μπορεί να συνδεθεί μέσω IPv6 ενώ η εξαίρεσή σας καλύπτει μόνο IPv4, και τότε η κίνηση ακολουθεί διαφορετικό κανόνα από αυτόν που γράψατε. Το ίδιο ισχύει για έναν διαμεσολαβητή που απαντά εκ μέρους του τελικού σημείου. Και οι δύο περιπτώσεις παράγουν ένα τούνελ που δουλεύει ενώ η διαδρομή σας δεν κάνει τίποτα.
Καρφώστε το τελικό σημείο και διαβάστε τη σειρά πολιτικής
Μια διαδρομή υπολογιστή είναι πιο συγκεκριμένη από οποιαδήποτε προεπιλεγμένη. Ένα /32 για τη διεύθυνση του peer κερδίζει επομένως μέσα στον πίνακα που το περιέχει. Η συνήθης μορφή ονομάζει ρητά την πύλη και τη συσκευή:
ip route add 203.0.113.40/32 via 192.168.10.1 dev eth0
Αυτή η διαδρομή βοηθά μόνο αν η αναζήτηση φτάσει σε αυτόν τον πίνακα. Οι κανόνες πολιτικής αξιολογούνται με σειρά και η πρώτη αντιστοιχία αποφασίζει, άρα ένας κανόνας που στέλνει τα πάντα σε δεύτερο πίνακα παρακάμπτει τη διαδρομή υπολογιστή σας στο main. Διαβάστε τους κανόνες πριν υποθέσετε ότι η διαδρομή είναι έγκυρη:
ip rule show
ip route get 203.0.113.40
Ρωτήστε τη δεύτερη εντολή με την ίδια διεύθυνση προέλευσης ή ένδειξη που χρησιμοποιεί ο client όταν η πολιτική εξαρτάται από αυτές. Αναφέρει τη διαδρομή που θα διάλεγε ο πυρήνας, κάτι που είναι απόδειξη για την αναζήτηση και όχι απόδειξη ότι το ζωντανό socket χρησιμοποιεί αυτό το μονοπάτι.
Όταν το τελικό σημείο μετακινείται
Ένα όνομα υπολογιστή που επιλύεται σε πολλές διευθύνσεις ακυρώνει ένα μόνιμο /32 μόλις αλλάξει η απάντηση. Ένα προφίλ με πολλές γραμμές remote έχει το ίδιο πρόβλημα, γιατί ο client μπορεί να προσγειωθεί σε οποιαδήποτε από αυτές. Ανανεώνετε τη διαδρομή από τα δικά του άγκιστρα κύκλου ζωής αντί να την προσθέτετε με το χέρι. Ένα σενάριο up που διαβάζει τον διαπραγματευμένο peer και εγκαθιστά τη διαδρομή υπολογιστή κρατά την εξαίρεση ευθυγραμμισμένη με την πραγματικότητα, και ένα αντίστοιχο σενάριο down την αφαιρεί.
Καταγράψτε την ανανέωση στο ίδιο σημείο με την υπόλοιπη ρύθμιση δρομολόγησης του υπολογιστή. Μια διαδρομή που υπάρχει μόνο μέχρι την επόμενη επανεκκίνηση είναι δοκιμή, όχι διόρθωση.
Κρατήστε την εσωτερική πολιτική ξεχωριστή
Η μετακίνηση του εξωτερικού μονοπατιού δεν δίνει πρόσβαση σε νέο ιδιωτικό υποδίκτυο και δεν αλλάζει ποιους προορισμούς σπρώχνει ο διακομιστής μέσα στο τούνελ. Η διαδρομή του κατώτερου στρώματος διαλέγει το καλώδιο· οι σπρωγμένες διαδρομές διαλέγουν τι μπαίνει στο τούνελ. Το να κρατάτε αυτές τις δύο αποφάσεις ξεχωριστές κάνει τον διαχωρισμό προβλέψιμο.
Αν ο στόχος είναι μόνο να κρατήσετε την κρυπτογραφημένη μεταφορά μακριά από μια μετρούμενη ζεύξη, αφήστε την προεπιλεγμένη διαδρομή ήσυχη και προσθέστε τη μοναδική εξαίρεση υπολογιστή. Η αντικατάσταση της προεπιλεγμένης διαδρομής σε όλο το μηχάνημα για να μετακινήσετε μία σύνδεση VPN σπάει κάθε άλλη εφαρμογή στον υπολογιστή.
Επιβεβαιώστε το αποτέλεσμα με δύο ανεξάρτητες παρατηρήσεις: την τοπική διεύθυνση και τη συσκευή του socket, και τη διαδρομή στην οποία επιλύεται ο ιδιωτικός προορισμός. Όταν και τα δύο ταιριάζουν με την πρόθεσή σας, ο διαχωρισμός είναι πραγματικός. Το εγχειρίδιο του OpenVPN 2.6 καλύπτει τις επιλογές remote και τοπικής δέσμευσης που καθορίζουν ποια διεύθυνση καλεί ο client.