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

Τι βλέπει ο πελάτης όταν αλλάζει η πηγή

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

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

Τι κάνει στην πραγματικότητα η επιλογή multihome

Η οδηγία γράφεται ως multihome σε ένα αρχείο ρυθμίσεων και ως --multihome στη γραμμή εντολών, και κάνει έναν διακομιστή UDP να απαντά από τη διεύθυνση που έφτασε το πακέτο του πελάτη. Ο πυρήνας παραδίδει την αρχική διεύθυνση προορισμού ως πρόσθετα δεδομένα κατά τη λήψη, και το OpenVPN χρησιμοποιεί αυτή την τιμή ως πηγή της απάντησης. Έτσι ένας διακομιστής που ακούει σε διεύθυνση μπαλαντέρ, local 0.0.0.0 για IPv4 ή το αντίστοιχό του για IPv6, συμπεριφέρεται σαν κάθε πελάτης να είχε φτάσει σε ξεχωριστό ακροατή. Οι πελάτες που ήρθαν μέσω της δημόσιας διεύθυνσης λαμβάνουν απαντήσεις από τη δημόσια διεύθυνση, και οι πελάτες σε εσωτερική διεύθυνση τις λαμβάνουν από εκείνη. Τίποτε άλλο στη διαδρομή του πακέτου δεν κινείται: η διαδρομή, οι κανόνες φιλτραρίσματος και η ρύθμιση του τούνελ μένουν ακριβώς όπως ήταν.

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

Πότε μια σταθερή τοπική διεύθυνση είναι η λάθος προεπιλογή

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

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

Αποδείξτε την πηγή της απάντησης από έξω

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

tcpdump -ni any udp port 1194
ss -lunp 'sport = :1194'
ip route get 203.0.113.10 from 198.51.100.20

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

Δρομολόγηση, ανακάλυψη και φιλτράρισμα μένουν ξεχωριστά

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

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

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