Ο πελάτης OpenVPN κολλάει όταν ο διακομιστής του τρέχει στον ίδιο κεντρικό υπολογιστή
Δύο παρουσίες OpenVPN σε έναν κεντρικό υπολογιστή μάχονται για την ίδια τοπική θύρα και τον ίδιο πίνακα δρομολόγησης. Καρφιτσώστε τη θύρα, χωρίστε τις συσκευές και ελέγξτε ποιος πίνακας κερδίζει.
Είχα ένα μηχάνημα εργαστηρίου που δεχόταν ένα τούνελ από απομακρυσμένη τοποθεσία και επίσης καλούσε προς ένα δίκτυο προμηθευτή. Το εξερχόμενο προφίλ λειτουργούσε επί εβδομάδες. Αφού προστέθηκε ο εισερχόμενος διακομιστής, το εξερχόμενο συνδέθηκε και μετά σταμάτησε να περνά κίνηση μέσα σε δευτερόλεπτα, ή αρνήθηκε να ξεκινήσει με σφάλμα διεύθυνσης σε χρήση. Τα αρχεία ρυθμίσεων δεν είχαν αλλάξει· ο κεντρικός υπολογιστής είχε απλώς αποκτήσει μια δεύτερη διεργασία OpenVPN με τη δική της γνώμη για θύρες και διαδρομές.
Η αποτυχία δεν είναι τυχαία και δεν είναι πρόβλημα ταυτοποίησης. Δύο δαίμονες σε ένα μηχάνημα ανταγωνίζονται για την ίδια τοπική υποδοχή και τον ίδιο πίνακα δρομολόγησης, και όποιος ξεκινά ή επανασυνδέεται τελευταίος συνήθως κερδίζει. Το να γνωρίζετε ποια από τις δύο συγκρούσεις έχετε καθορίζει πού να κοιτάξετε πρώτα.
Διαβάστε το σύμπτωμα ανάποδα
Ξεκινήστε από το πότε πεθαίνει το τούνελ. Ένα σφάλμα δέσμευσης κατά την εκκίνηση δείχνει προς την πλευρά ακρόασης: κάτι κατέχει ήδη αυτή τη θύρα, και το OpenVPN αρνείται να ξεκινήσει αντί να τη μοιραστεί. Ένα τούνελ που ανεβαίνει και μετά σωπαίνει δείχνει προς τη δρομολόγηση, επειδή μια διαδρομή που εγκατέστησε η άλλη παρουσία μπορεί να τραβήξει τα πακέτα της εξωτερικής σύνδεσης έξω από τη διαδρομή τους.
Και οι δύο περιπτώσεις παράγουν το ίδιο παράπονο χρήστη, γι' αυτό οι βρόχοι επανάληψης και τα σενάρια επιτήρησης δεν διορθώνουν τίποτα. Επανασυνδέουν τον πελάτη στην ίδια σύγκρουση. Το χρήσιμο πρώτο ερώτημα είναι αν η διεργασία εξακολουθεί να τρέχει όταν σταματά η κίνηση.
Μία υποδοχή και μία συσκευή ανά παρουσία
Ένας διακομιστής που ακούει δεσμεύει τη θύρα του· ένας εξερχόμενος πελάτης χρειάζεται επίσης μια τοπική θύρα για την ενθυλακωμένη κίνησή του. Όταν και οι δύο ζουν στον ίδιο κεντρικό υπολογιστή, η προεπιλεγμένη συμπεριφορά του πελάτη μπορεί να συγκρουστεί με τη θύρα του διακομιστή. Η τοπική θύρα του πελάτη μπορεί να καρφιτσωθεί, και η δέσμευση μπορεί να παραλειφθεί όπου ο ομότιμος δεν χρειάζεται σταθερή θύρα προέλευσης:
lport 1195
nobind
dev tun1Αυτοί οι αριθμοί είναι παραδείγματα, όχι απαίτηση. Αυτό που μετράει είναι ότι ο πελάτης σταματά να ανταγωνίζεται για τη θύρα του διακομιστή και ότι κάθε παρουσία παίρνει ξεχωριστή συσκευή τούνελ. Δύο δαίμονες που μοιράζονται το tun0 αντικαθιστούν ο ένας την κατάσταση συσκευής του άλλου ακόμη και όταν οι θύρες τους διαφέρουν, οπότε μία συσκευή ανά τούνελ δεν είναι προαιρετική.
Το nobind ανήκει στην πλευρά του πελάτη. Ένας διακομιστής πρέπει ακόμη να δεσμεύει και να ακούει, οπότε μην αντιγράφετε τη γραμμή στη ρύθμιση του διακομιστή και μην απενεργοποιείτε τη δέσμευση σε πελάτη του οποίου ο ομότιμος φιλτράρει σε σταθερή θύρα προέλευσης.
Επιλέξτε έναν ιδιοκτήτη για την προεπιλεγμένη διαδρομή
Μόνο μία σύνδεση μπορεί να εγκαταστήσει προεπιλεγμένη διαδρομή. Αν και τα δύο προφίλ ανακατευθύνουν όλη την κίνηση, η δεύτερη σύνδεση αντικαθιστά σιωπηλά την πρώτη, και η πρώτη φαίνεται να σπάει. Είτε κρατήστε το εξερχόμενο τούνελ χωριστό και σπρώξτε μόνο τα προθέματα του προμηθευτή, είτε δώστε του ξεχωριστό πίνακα δρομολόγησης.
ip rule add from 10.9.0.2 table 120
ip route add default dev tun1 table 120
ip route get 10.9.0.2Οι διευθύνσεις και ο αριθμός πίνακα παραπάνω είναι θέσεις κράτησης. Αμέσως μετά την προσθήκη του κανόνα, επιβεβαιώστε ότι η διεύθυνση του ίδιου του διακομιστή VPN εξακολουθεί να επιλύεται μέσω του κανονικού πίνακα· ένας πίνακας που συλλαμβάνει την εξωτερική μεταφορά σπάει το τούνελ που υποτίθεται ότι προστάτευε, και ο βρόχος επανασύνδεσης που ακολουθεί μοιάζει με αναξιόπιστο πάροχο.
Για μια ρύθμιση που πρέπει να επιβιώσει από επανασυνδέσεις και επανεκκινήσεις, ο χώρος ονομάτων δικτύου είναι το πιο στέρεο όριο. Ο δεύτερος πελάτης τρέχει μέσα στον δικό του χώρο ονομάτων με τις δικές του διεπαφές και διαδρομές, και εκτίθενται μόνο οι υπηρεσίες που πρέπει να περάσουν. Ο κεντρικός υπολογιστής κρατά μία προεπιλεγμένη διαδρομή, και μια επανασύνδεση χώρου ονομάτων δεν μπορεί να την ξαναγράψει.
Επαληθεύστε με τον πίνακα, όχι με τη γραμμή κατάστασης
Ένας πελάτης που αναφέρει ότι είναι συνδεδεμένος αποδεικνύει μόνο το κανάλι ελέγχου του. Καταγράψτε την κατάσταση δρομολόγησης πριν και μετά από κάθε σύνδεση και μετά ρωτήστε τον πυρήνα ποια συσκευή θα χρησιμοποιούσε ένας πραγματικός προορισμός:
ip route show
ip route get 10.40.0.20
ss -lunp | grep 1194Αν η επιλεγμένη συσκευή για τη διεύθυνση του προμηθευτή αλλάζει όταν ξεκινά το δεύτερο τούνελ, έχετε τη σύγκρουση διαδρομών. Αν και οι δύο διεργασίες εμφανίζονται στην ίδια τοπική θύρα, έχετε τη σύγκρουση υποδοχών. Η διόρθωση της πρώτης χωρίς τη δεύτερη απλώς μετακινεί την αποτυχία στην επόμενη επανασύνδεση.
Γράψτε τις θύρες, τις συσκευές, τους πίνακες και τον ιδιοκτήτη της διαδρομής στο runbook του κεντρικού υπολογιστή. Διαφορετικά, το επόμενο άτομο που θα προσθέσει τρίτο τούνελ θα ανακαλύψει ξανά την ίδια σύγκρουση, και η μόνη ορατή απόδειξη θα είναι μια σύνδεση που λειτουργεί μέχρι να επανεκκινήσει ο δαίμονας κάποιου άλλου.