OpenVPN: η τοπική διεύθυνση και η διεύθυνση της σήραγγας — δύο διαφορετικά socket
Η διεύθυνση που επικοινωνεί με τον διακομιστή δεν είναι η διεύθυνση μέσα στη σήραγγα. Αν διαβάσετε τα local, remote και nobind ως ξεχωριστούς ρόλους, εξηγούνται τα περισσότερα σφάλματα δέσμευσης.
Ο πελάτης αρνείται να ξεκινήσει και παραπονιέται ότι δεν μπορεί να δεσμεύσει μια τοπική διεύθυνση, και η προφανής διόρθωση φαίνεται να είναι να τον στρέψουμε στη διεύθυνση της σήραγγας που περιμένει να λάβει. Αυτό δεν μπορεί να δουλέψει, και ο λόγος αξίζει να τον καταλάβουμε: πριν υπάρξει η σήραγγα δεν υπάρχει εσωτερική διεύθυνση, και το socket που επικοινωνεί με τον διακομιστή πρέπει να υπάρχει πρώτο. Εμπλέκονται δύο διαφορετικές διευθύνσεις και μόνο μία από αυτές μπορεί να επιλεγεί τοπικά.
Το σφάλμα δέσμευσης ονομάζει μια τοπική διεύθυνση
Όταν το OpenVPN αναφέρει ότι δεν μπορεί να δεσμεύσει μια τοπική διεύθυνση, μιλά για το socket μεταφοράς: το τελικό σημείο UDP ή TCP που μεταφέρει την κρυπτογραφημένη σύνδεση προς τον peer.
Μια ρητή οδηγία local ζητά από τον δαίμονα να δεσμεύσει αυτό το socket σε μια συγκεκριμένη τοπική διεύθυνση. Η διεύθυνση πρέπει να υπάρχει στον χώρο ονομάτων δικτύου όπου εκτελείται η διεργασία και πρέπει να είναι εκχωρήσιμη τη στιγμή που ξεκινά ο πελάτης.
Μια δημόσια διεύθυνση που μεταφράζεται σε δρομολογητή ή στην άκρη του cloud δεν είναι τοπική διεύθυνση που μπορεί να δεσμεύσει ο δαίμονας, ακόμη και αν είναι η διεύθυνση που βλέπει ο διακομιστής. Αυτή η διάκριση εξηγεί γιατί ένα προφίλ λειτουργεί στο σπίτι και αποτυγχάνει σε μια παρουσία cloud. Εξηγεί επίσης γιατί η προσθήκη της δημόσιας διεύθυνσης σε μια διεπαφή loopback δεν βοηθά, αφού τότε η μεταφορά θα προερχόταν από διεύθυνση στην οποία το δίκτυο δεν μπορεί να επιστρέψει. Διαβάστε τη λίστα διεπαφών πριν επεξεργαστείτε το προφίλ.
Τι επιλέγουν στην πραγματικότητα τα local και remote
Το remote ονομάζει τον peer με τον οποίο γίνεται η επικοινωνία. Το local δεσμεύει το κοντινό άκρο του ίδιου socket. Το nobind αφήνει το λειτουργικό σύστημα να επιλέξει και την τοπική διεύθυνση και τη θύρα, γι’ αυτό οι πελάτες πίσω από οικιακούς δρομολογητές συνήθως λειτουργούν χωρίς καμία από τις δύο οδηγίες.
Καμία από τις δύο οδηγίες δεν έχει σχέση με τη διεύθυνση μέσα στη σήραγγα.
Σε ένα container ή σε έναν χώρο ονομάτων δικτύου ισχύει ο ίδιος κανόνας με στενότερα όρια: οι διευθύνσεις του κεντρικού υπολογιστή δεν υπάρχουν μέσα, οπότε μια γραμμή local αντιγραμμένη από τη διαμόρφωση του κεντρικού υπολογιστή αποτυγχάνει για εντελώς διαφορετικό λόγο από μια λανθασμένη διεύθυνση.
ip -brief address show
ip route get 203.0.113.10Η εσωτερική διεύθυνση προέρχεται από τον διακομιστή
Η διεύθυνση μέσα στη σήραγγα διαπραγματεύεται ή εκχωρείται αφού εδραιωθεί το κανάλι ελέγχου. Με δυναμική δεξαμενή την αποφασίζει ο διακομιστής κατά τη σύνδεση, και με διαμόρφωση ειδική για τον πελάτη μπορεί να είναι σταθερή ανά ταυτότητα.
Το να γράψετε local με μια εσωτερική διεύθυνση δεν ζητά από τον διακομιστή να εκχωρήσει αυτή τη διεύθυνση. Στην καλύτερη περίπτωση η δέσμευση αποτυγχάνει και στη χειρότερη ο πελάτης βρίσκει μια άσχετη διεύθυνση κεντρικού υπολογιστή με την ίδια τιμή και αρχίζει να τη χρησιμοποιεί για τη μεταφορά.
Οι διεπαφές που πρέπει να διαβάσετε είναι επίσης διαφορετικές. Οι παράμετροι ifconfig και η διαμόρφωση της δεξαμενής περιγράφουν το εσωτερικό, ενώ τα remote, local, proto και nobind περιγράφουν το εξωτερικό. Το να κρατάτε τις δύο λίστες χωριστά εξηγεί σχεδόν κάθε μπερδεμένο παράδειγμα που θα βρείτε σε ένα φόρουμ. Το εγχειρίδιο του OpenVPN 2.6 τα τεκμηριώνει σε ξεχωριστές ενότητες ακριβώς γι’ αυτόν τον λόγο.
Η παγίδα: μια πλήρης σήραγγα που παγιδεύει τη δική της μεταφορά
Μόλις η σήραγγα σηκωθεί και μεταφέρει την προεπιλεγμένη διαδρομή, τα πακέτα που τη συντηρούν δεν πρέπει να δρομολογούνται μέσα της. Πρόκειται για πρόβλημα δρομολόγησης και όχι διευθυνσιοδότησης, και ο δαίμονας το λύνει εγκαθιστώντας μια πιο συγκεκριμένη διαδρομή προς τη διεύθυνση του ίδιου του διακομιστή μέσω της αρχικής πύλης.
Αν καρφώσετε τη μεταφορά σε μια συγκεκριμένη τοπική διεύθυνση και αργότερα αλλάξετε τη διαδρομή που χρησιμοποιεί αυτή η διεύθυνση, η εξωτερική σύνδεση μπορεί να χαθεί ενώ το εσωτερικό παραμένει διαμορφωμένο. Η σήραγγα συνεχίζει να αναφέρει ότι είναι συνδεδεμένη επειδή το εσωτερικό είναι εντάξει. Μόνο η μεταφορά είναι σπασμένη, και γι’ αυτό τα αρχεία καταγραφής διαβάζονται σαν αντιφάσεις.
Τότε τα συμπτώματα μοιάζουν με σήραγγα που συνδέεται και παγώνει, ή με σήραγγα που επανασυνδέεται σε βρόχο χωρίς χρήσιμο σφάλμα. Ελέγξτε τη διαδρομή προς τη διεύθυνση του peer πριν ελέγξετε οτιδήποτε μέσα στη σήραγγα, και επιβεβαιώστε ότι η τοπική διεύθυνση που δεσμεύσατε ανήκει ακόμη στη διεπαφή που περιμένατε.
Μια συνήθεια που αποτρέπει τη σύγχυση
Διαβάστε κάθε διεύθυνση σε ένα προφίλ και αποφασίστε σε ποιο επίπεδο ανήκει πριν την επεξεργαστείτε.
Αν ονομάζει το μακρινό άκρο της μεταφοράς ή δεσμεύει το κοντινό της άκρο, είναι εξωτερική διεύθυνση και πρέπει να υπάρχει πριν την εκκίνηση. Αν περιγράφει τι συμβαίνει μέσα στη σήραγγα, προέρχεται από τον διακομιστή ή από την τοπολογία, και καμία τοπική οδηγία δεν μπορεί να την αντικαταστήσει.
Γράψτε τις δύο λίστες στις σημειώσεις ανάπτυξης δίπλα στο προφίλ. Η επόμενη συνεδρία αντιμετώπισης προβλημάτων θα ξεκινά τότε από το επίπεδο και όχι από μια εικασία.