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

Δύο υποδοχές, δύο ιδιοκτήτες, η μία δημόσια

Το περίβλημα τερματίζει το TLS για την εξωτερική σύνδεση και περνά την αποκρυπτογραφημένη ροή byte σε έναν απλό ακροατή OpenVPN TCP. Αυτές είναι ξεχωριστές υποδοχές με ξεχωριστά αρχεία ρυθμίσεων, οπότε η επεξεργασία της μίας αφήνει την άλλη ανέγγιχτη και φαινομενικά υγιή. Σημαίνει επίσης ότι οι δύο μπορούν να αποκλίνουν όποτε αλλάζει η μία χωρίς την άλλη.

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

Πού προσγειώνεται πραγματικά η προώθηση

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

HopListens onMust reachSymptom when it points elsewhere
Client machineA local plaintext portThe wrapper's public TLS addressPlain text offered to a TLS endpoint
Router forwardPublic TCP 443The wrapper host on its translated portWrapper records no connection at all
Wrapper, server modeIts accepted port, 8443 hereThe native VPN socket on loopbackHandshake completes, then silence
Native VPN listenerLoopback TCP portIts peer, over TCP onlyA UDP socket behind a byte-stream relay

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

grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'

Η διεύθυνση δέσμευσης που σας αρνείται

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

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

ss -lntp '( sport = :8443 )'

Τι απέδειξε πραγματικά η τοπική δοκιμή

Μια επιτυχία που καταγράφεται χωρίς το άλμα που κάλυπτε δεν είναι απόδειξη για τα άλλα άλματα. Σημειώστε ποια διεύθυνση χρησιμοποίησε η δοκιμή και ποια διεργασία απάντησε. Έπειτα επαναλάβετε από έξω από το δίκτυο και όχι από τηλέφωνο στο ίδιο Wi-Fi, γιατί η συμπεριφορά της φουρκέτας διαφέρει μεταξύ δρομολογητών και μια σύνδεση που δεν άφησε ποτέ το LAN μπορεί να ικανοποιήσει έναν πελάτη χωρίς η προώθηση να εμπλέκεται καθόλου. Μόνο αυτή η δεύτερη προσπάθεια ασκεί τη διαδρομή που ακολουθεί ένας ξένος.

Όταν η προσπάθεια αποτύχει, ακολουθήστε μία μόνο σύνδεση και στα δύο αρχεία καταγραφής: τις γραμμές αποδοχής και σύνδεσης του περιβλήματος, μετά το δικό του αρχείο συνεδρίας του δαίμονα VPN. Το πρώτο όριο που δεν καταγράφει τίποτα είναι το σημείο της επόμενης αλλαγής. Μόλις το OpenVPN συγκρίνει επιλογές ομοτίμου, κρίνετε αυτά τα μηνύματα με τους κανόνες αυτής της υλοποίησης. Μια προειδοποίηση ασυνέπειας link-mtu δεν είναι αυτόματα μοιραία, το κάρφωμα του link-mtu στο 1500 δεν αποδεικνύει ότι σταμάτησε ο κατακερματισμός, και η διαπραγμάτευση κρυπτογράφησης ανήκει στην εσωτερική ρύθμιση του OpenVPN και όχι στην προώθηση του δρομολογητή.

nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager

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

Δύο ταυτότητες, δύο σειρές αποτυχίας

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

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

openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer

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