Διακομιστής μεσολάβησης SOCKS5 για το OpenVPN: σήραγγα TCP ή μεσολάβηση των εφαρμογών;
Ένας διακομιστής μεσολάβησης μεταφέρει ροή, όχι αυτοδύναμο πακέτο. Συγκρίνετε μια σήραγγα TCP πίσω από socks-proxy με ανακατεύθυνση redsocks και δείτε πού αποτυγχάνει πρώτος κάθε σχεδιασμός.
Τα δίκτυα που επιτρέπουν εξερχόμενη κίνηση μόνο μέσω διακομιστή μεσολάβησης είναι εκεί όπου ένα προφίλ που δούλευε πεθαίνει ξαφνικά. Η διεύθυνση του διακομιστή είναι η λιγότερο ενδιαφέρουσα μεταβλητή σε αυτή την αποτυχία. Τα πάντα τα κρίνει το σχήμα της κίνησης που θα μεταφέρει ο διακομιστής, γιατί αυτοί οι διακομιστές προωθούν ροή byte και μια σήραγγα UDP δεν είναι τέτοια. Αυτό αφήνει δύο αρχιτεκτονικές, και σπάνε σε διαφορετικά σημεία.
Ένας περιορισμός κρίνει τον σχεδιασμό
Το SOCKS5 ορίζει πράγματι λειτουργία συσχέτισης UDP. Η υποστήριξη μεσολάβησης του πελάτη OpenVPN ωστόσο είναι χτισμένη γύρω από ροές: socks-proxy τεκμηριώνεται για προφίλ TCP, και ένας διακομιστής HTTP CONNECT δεν έχει κανένα μονοπάτι για αυτοδύναμα πακέτα. Μία γραμμή τεκμηρίωσης κρίνει την αρχιτεκτονική πριν αγγίξετε αρχείο ρυθμίσεων.
Το ερώτημα λοιπόν δεν είναι ποιον διακομιστή να διαλέξετε. Είναι αν η σήραγγα γίνεται ροή, ή μένει αυτοδύναμο πακέτο και αφήνει κάτι άλλο να απορροφήσει τη μεσολάβηση.
Επιλογή Α: κάντε τη σήραγγα ροή
Αυτό απαιτεί διακομιστή με ακροατή TCP και προφίλ πελάτη που ονομάζει τον διακομιστή μεσολάβησης. Και τα δύο κομμάτια είναι απαραίτητα, και η πλευρά του διακομιστή είναι αυτή που ξεχνά ο κόσμος:
proto tcp-client
remote vpn.example.net 443
socks-proxy 127.0.0.1 1080Αντικαταστήστε την τελευταία γραμμή με http-proxy proxy.internal 8080, όταν ο διακομιστής μιλά HTTP, και προσθέστε αρχείο διαπιστευτηρίων αν το ζητά. Ο διακομιστής πρέπει να δέχεται να εκτελέσει CONNECT στη θύρα VPN σας, και ο διακομιστής εξυπηρέτησης πρέπει να απαντά σε TCP· ένας ακροατής μόνο UDP αγνοεί την απόπειρα. Η επιλογή 443 είναι πρακτική κίνηση, γιατί πολλά περιοριστικά δίκτυα την επιτρέπουν και λίγα άλλα.
Το κόστος είναι TCP πάνω σε TCP. Ένα χαμένο εξωτερικό τμήμα μπλοκάρει κάθε εσωτερική ροή που μοιράζεται αυτή τη σύνδεση, οπότε η ανάκαμψη που κανονικά θα ήταν ανεξάρτητη γίνεται κοινή. Η εγκατάσταση επίσης διαρκεί περισσότερο, και μια ασταθής εξωτερική διαδρομή γίνεται ασταθής σήραγγα αντί για αργή.
Επιλογή Β: αφήστε τη σήραγγα ήσυχη
Όταν η σήραγγα πρέπει να μείνει σε UDP, η σήραγγα δεν είναι το μέρος όπου ρυθμίζετε κάτι. Αντίθετα, το εξερχόμενο TCP από τις εφαρμογές ανακατευθύνεται σε τοπικό ακροατή SOCKS, και οι εφαρμογές δεν μαθαίνουν ποτέ ότι υπάρχει διακομιστής μεσολάβησης. Στο Linux αυτό είναι συνήθως redsocks μαζί με κανόνα NAT REDIRECT στον πίνακα nat.
Μόνο TCP, ξανά. Ένας διακομιστής μόνο HTTP όπως ο privoxy δεν μπορεί να μεταφέρει αυθαίρετα πρωτόκολλα, και αυτός ο σχεδιασμός δεν προσθέτει υποστήριξη αυτοδύναμων πακέτων ούτε για τις εφαρμογές.
Το να πεις σε κάθε εφαρμογή για τον διακομιστή απευθείας είναι συνήθως καλύτερο όπου το λογισμικό το υποστηρίζει. Ελέγχεται ευκολότερα, και αποτυγχάνει κάπου που μπορείτε πραγματικά να δείτε.
Πού αποτυγχάνει κάθε επιλογή
Η επιλογή Α αποτυγχάνει όταν ο διακομιστής δεν έχει ακροατή TCP, όταν ο διακομιστής μεσολάβησης αρνείται τον στόχο CONNECT, ή όταν η εξωτερική ροή περιορίζεται κάτω από αυτό που χρειάζεται η σήραγγα. Τα δύο πρώτα αφήνουν μια εγγραφή στο αρχείο καταγραφής του διακομιστή· το τρίτο αφήνει μια σύνδεση που εδραιώνεται και μετά φαίνεται λάθος. Διαβάστε αυτό το αρχείο πριν επεξεργαστείτε το προφίλ, γιατί διαχωρίζει πρόβλημα άδειας από πρόβλημα χωρητικότητας. Ένα ολοκληρωμένο CONNECT μεταφέρει την έρευνα μέσα στη σήραγγα.
Η επιλογή Β αποτυγχάνει για οτιδήποτε χρειάζεται αυτοδύναμα πακέτα, για πρωτόκολλα που ο διακομιστής δεν καταλαβαίνει, και ήσυχα σε κεντρικούς υπολογιστές όπου ο κανόνας ανακατεύθυνσης υπάρχει αλλά η δρομολόγηση στέλνει την κίνηση πλάι του.
Καμία επιλογή δεν αλλάζει την απαίτηση της συσκευής. Τα πακέτα χρειάζονται ακόμη κόμβο TUN ή TAP πριν ο πυρήνας τα δρομολογήσει, άρα η διεργασία χρειάζεται ακόμη άδεια στο /dev/net/tun. Ένα περιτύλιγμα αλλάζει τι γίνεται αφού ανοίξει αυτός ο κόμβος, όχι αν τον χρειάζεστε.
Αποδείξτε ποια διαδρομή φτιάξατε
Κοιτάξτε τις υποδοχές αντί για το εικονίδιο του δίσκου συστήματος. Η διεργασία VPN πρέπει να κρατά εδραιωμένη σύνδεση με τη διεύθυνση του διακομιστή, και ο διακομιστής πρέπει να έχει καταγράψει τον στόχο που του ζητήθηκε να φτάσει:
ss -tnp | grep openvpnΜετά αναζητήστε προορισμό που μόνο η σήραγγα μπορεί να εξυπηρετήσει, και όνομα που μόνο ο επιλυτής της σήραγγας μπορεί να απαντήσει. Μια ολοκληρωμένη σύνδεση μέσω διακομιστή με νεκρή σήραγγα συνήθως σημαίνει ότι το απομακρυσμένο άκρο δεν πρόσφερε ποτέ το μεταφορικό που ονομάζεται στο προφίλ σας.
Σημειώστε το μεταφορικό και τον διακομιστή που δέχεται σε διαρκή θέση. Όταν το ίδιο προφίλ αποτύχει σε άλλο δίκτυο, αυτή η σημείωση αποκλείει ή επιβεβαιώνει τον διακομιστή μέσα σε δευτερόλεπτα.