Δρομολόγηση πολιτικής έναντι SOCKS: ποιο επίπεδο κάνει πραγματικά διαμεσολάβηση στην κίνηση
Μια διαδρομή προς θύρα SOCKS δεν είναι συνεδρία SOCKS. Συγκρίνετε ρυθμίσεις διαμεσολαβητή σε επίπεδο εφαρμογής, έναν προσαρμογέα IP-σε-διαμεσολαβητή και μια δρομολογημένη πύλη με βάση το επίπεδο που μετατρέπει.
Προσθέσατε μια διαδρομή πολιτικής που στέλνει την κίνηση ενός πελάτη VPN σε έναν κεντρικό υπολογιστή όπου εκτελείται ακροατής SOCKS στη θύρα 1080. Τα πακέτα φτάνουν, ο ακροατής δεν καταγράφει τίποτα και η σύνδεση κολλάει. Δεν υπάρχει τίποτα λάθος στη διαδρομή: το επόμενο άλμα επιλέγει πού πηγαίνει ένα πακέτο, και το SOCKS είναι μια συνομιλία που πρέπει να ξεκινήσει ο πελάτης. Συγκρίνετε τις τρεις αρχιτεκτονικές που συνήθως εννοούν όσοι στέλνουν κίνηση μέσω διαμεσολαβητή, και θα φανεί ποιο κομμάτι λείπει από τη ρύθμισή σας.
Η δρομολόγηση, το DNAT και το SOCKS αλλάζουν διαφορετικά πράγματα
Μια διαδρομή πολιτικής ξαναγράφει μια απόφαση επιπέδου 3. Δύο γραμμές αρκούν για να σταλεί η κίνηση ενός πελάτη σε ένα επιλεγμένο επόμενο άλμα:
ip route add default via 10.50.0.2 table 101
ip rule add from 10.77.0.2 lookup 101Μετά από αυτό, ο πυρήνας παραδίδει το πακέτο στο 10.50.0.2, με τον αρχικό προορισμό να παραμένει στην κεφαλίδα IP. Αν το 10.50.0.2 είναι δρομολογητής, προωθεί το πακέτο. Αν είναι κεντρικός υπολογιστής με δαίμονα SOCKS στο 1080, το πακέτο δεν απευθύνεται σε κάτι που μπορεί να το δεχτεί, και ούτε το DNAT στη θύρα 1080 βοηθά, γιατί ένα μεταφρασμένο πακέτο εξακολουθεί να φέρει το αρχικό ωφέλιμο φορτίο της εφαρμογής αντί για έναν χαιρετισμό SOCKS.
SOCKS5 ξεκινά με ένα byte έκδοσης, μια λίστα μεθόδων, μια ανταλλαγή ταυτοποίησης και ένα αίτημα που ονομάζει τον προορισμό. Αυτά είναι δεδομένα εφαρμογής. Ούτε μια εγγραφή δρομολόγησης ούτε ένας στόχος netfilter τα παράγει, και αυτή είναι η σύγκριση σε μία γραμμή: η δρομολόγηση επιλέγει μια διαδρομή, το SOCKS ζητά από έναν διακομιστή να κάνει δεύτερη σύνδεση.
Περίπτωση πρώτη: η εφαρμογή μπορεί να μιλήσει η ίδια SOCKS
Όταν το πρόγραμμα έχει ρύθμιση διαμεσολαβητή, αυτή είναι η συντομότερη διαδρομή και δεν απαιτεί αλλαγή στον πυρήνα. Στρέψτε το στον ακροατή, δώστε διαπιστευτήρια αν τα ζητήσει ο διακομιστής, και αποφασίστε αν τα ονόματα επιλύονται τοπικά ή περνούν στον διαμεσολαβητή. Με το curl αυτά είναι διαφορετικές σημαίες, και η διαφορά μετρά όταν ο προορισμός επιλύεται μόνο από την πλευρά του διαμεσολαβητή:
curl --socks5 10.50.0.2:1080 https://docs.example.com
curl --socks5-hostname 10.50.0.2:1080 https://internal.example.comΕφαρμογές που αγνοούν τις μεταβλητές περιβάλλοντος διαμεσολαβητή ή ανοίγουν ακατέργαστα socket δεν μπορούν να βοηθηθούν έτσι. Τα προγράμματα περιήγησης και τα περισσότερα εργαλεία HTTP είναι εντάξει· ένας πελάτης παιχνιδιού, ένας δαίμονας αλληλογραφίας ή ένα αυθαίρετο δυαδικό αρχείο προμηθευτή συνήθως δεν είναι. Το όριο είναι ανά εφαρμογή και ανά πρωτόκολλο, γι' αυτό αυτή η επιλογή είναι εξαιρετική για δοκιμές και αδύναμη ως απάντηση για ολόκληρο το VPN.
Περίπτωση δεύτερη: ένας προσαρμογέας που μετατρέπει ροές IP σε συνεδρίες διαμεσολαβητή
Για προγράμματα που δεν μπορούν να μιλήσουν SOCKS, η μετατροπή πρέπει να γίνει σε κάτι που τερματίζει την κίνηση IP και ανοίγει συνεδρίες διαμεσολαβητή για λογαριασμό τους. Αυτό το στοιχείο κατέχει μια διεπαφή σήραγγας, δέχεται τις ροές που επέλεξε η δρομολόγηση πολιτικής, εκτελεί τη χειραψία SOCKS για καθεμία και ανασυνθέτει τις απαντήσεις. Η διαδρομή στρέφει την κίνηση προς αυτό· ο προσαρμογέας είναι αυτός που δημιουργεί τη συνεδρία.
Διαβάστε την τεκμηρίωσή του πριν του εμπιστευτείτε ολόκληρο υποδίκτυο. Πολλοί προσαρμογείς μεταφέρουν καλά το TCP και χειρίζονται το UDP μόνο μέσω συσχέτισης UDP του SOCKS5, και κανένας τους δεν μετατρέπει το ICMP σε κίνηση διαμεσολαβητή, οπότε ένα επιτυχημένο ping δεν λέει τίποτα για τη διαδρομή του διαμεσολαβητή. Το DNS είναι η άλλη παγίδα: αν ο προσαρμογέας επιλύει ονόματα τοπικά, οι εγγραφές μόνο για εσωτερική χρήση επιλύονται σε λάθος απάντηση ή σε τίποτα απολύτως.
Η αποφυγή βρόχων είναι η λειτουργική λεπτομέρεια που δαγκώνει. Οι δικές του συνδέσεις του προσαρμογέα προς τον διακομιστή SOCKS δεν πρέπει να δρομολογούνται πίσω στον προσαρμογέα, άρα η κίνησή του χρειάζεται εξαίρεση στον κανόνα ή αποκλειστική διεύθυνση προέλευσης. Αν το κάνετε λάθος, η συνεδρία διαμεσολαβητή θα προσπαθήσει να διαμεσολαβήσει τον εαυτό της.
Περίπτωση τρίτη: ο κεντρικός υπολογιστής είναι στην πραγματικότητα δρομολογημένη πύλη
Μερικές φορές η ρύθμιση που λειτουργεί δεν περιέχει καθόλου SOCKS. Ο απομακρυσμένος κεντρικός υπολογιστής προωθεί τα πακέτα ή τους κάνει NAT, και ο κανόνας με βάση την προέλευση απλώς τον επιλέγει ως έξοδο. Ο σχεδιασμός αυτός είναι νόμιμος, και εξηγεί γιατί μια αντιγραμμένη διαμόρφωση λειτουργεί σε ένα δίκτυο και αποτυγχάνει σε άλλο: ο κανόνας είναι ίδιος, το κομμάτι που λείπει είναι μια υπηρεσία προώθησης στην άλλη πλευρά.
Οι τρεις περιπτώσεις διαχωρίζονται γρήγορα. Ελέγξτε τι ακούει πραγματικά και μετά κοιτάξτε τα πρώτα byte που φτάνουν στον κεντρικό υπολογιστή:
ss -ltnp 'sport = :1080'
tcpdump -ni eth0 -X 'tcp port 1080'Το πρώτο byte ωφέλιμου φορτίου ενός πραγματικού πελάτη SOCKS είναι 0x05, η έκδοση στον χαιρετισμό. Αν η καταγραφή δείχνει αντί γι' αυτό αρχικά δεδομένα εφαρμογής, κανένας δαίμονας SOCKS δεν θα απαντήσει, γιατί η διαπραγμάτευση δεν ξεκίνησε ποτέ. Αν τίποτα δεν ακούει στο 1080, ο κεντρικός υπολογιστής είναι πύλη, και το ερώτημα γίνεται αν προωθεί και αν υπάρχει διαδρομή επιστροφής.
Επιλέξτε το επίπεδο με τέσσερις ερωτήσεις
Έχει το πρόγραμμα ρύθμιση διαμεσολαβητή; Χρησιμοποιήστε τη και σταματήστε εκεί. Περιλαμβάνει η κίνηση UDP ή ICMP που πρέπει να επιβιώσει; Μόνο μια δρομολογημένη πύλη ή πύλη NAT μεταφέρει ICMP, και το UDP χρειάζεται συσχέτιση SOCKS5 που υποστηρίζουν και οι δύο πλευρές. Πρέπει να καλυφθεί κάθε διεργασία στο μηχάνημα, μαζί με όσες δεν μπορείτε να ρυθμίσετε; Τότε χρειάζεστε προσαρμογέα που κατέχει τη διεπαφή και τερματίζει ροές. Μπορείτε να αναλάβετε και τη δρομολόγηση, το DNS και τις εξαιρέσεις αποφυγής βρόχων του; Αν όχι, η απλή πύλη θα κοστίσει λιγότερο στη λειτουργία.
Μια διάκριση αξίζει να κρατηθεί καθαρή. Η δική του επιλογή socks-proxy ενός πελάτη VPN περιγράφει πώς η εξωτερική σύνδεση σήραγγας φτάνει στον διακομιστή της, και δεν λέει τίποτα για τη μετατροπή των εσωτερικών ροών του πελάτη. Τα δύο μπερδεύονται διαρκώς στο ίδιο δελτίο. Αποφασίστε ποια σχέση χρειάζεστε πριν αγγίξετε μια διαδρομή.