Οι άνθρωποι αντιμετωπίζουν το socks5h ως socks5 με φιλικότερη ορθογραφία και περιμένουν και τα δύο να στείλουν το ίδιο αίτημα στο ίδιο σημείο. Το επιπλέον γράμμα μετακινεί αντ' αυτού το ερώτημα DNS. Σε ένα μηχάνημα όπου ο resolver και ο proxy βρίσκονται σε διαφορετικά δίκτυα, αυτή είναι η διαφορά ανάμεσα σε ένα αίτημα που δουλεύει και σε ένα που αποτυγχάνει.

Ένα γράμμα, δύο resolvers

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

Τίποτα στο σχήμα δεν αλλάζει την κρυπτογράφηση ή την ταυτοποίηση· μετακινείται μόνο η διαδρομή DNS. Γι' αυτό το γράμμα είναι εύκολο να αγνοηθεί και ακριβό να το κάνεις λάθος.

Ίδιος proxy, διαφορετικό αίτημα

Οι δύο κλήσεις διαφέρουν κατά έναν μόνο χαρακτήρα. Όλα τα άλλα είναι πανομοιότυπα:

curl --proxy socks5://proxy.example:1080 https://service.example/
curl --proxy socks5h://proxy.example:1080 https://service.example/

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

Το ίδιο το όνομα του proxy επιλύεται τοπικά

Σε αυτή την εντολή, το proxy.example πρέπει να γίνει διεύθυνση πριν συμβεί οτιδήποτε άλλο, και αυτή η αναζήτηση είναι πάντα τοπική. Η μετακίνηση της επίλυσης του service.example στον proxy δεν κάνει τίποτα για το ίδιο το όνομα του proxy, που χρειάζεται ακόμη έναν resolver προσβάσιμο από το μηχάνημά σας. Εδώ το VPN αλλάζει την εικόνα.

Αν το όνομα του proxy επιλύεται μόνο μέσα στη σήραγγα, η σύνδεση εξαρτάται από το ότι η σήραγγα είναι ενεργή πριν ξεκινήσει το curl. Ποιο σχήμα κερδίζει τότε εξαρτάται από το ποια πλευρά μπορεί να απαντήσει. Όταν το μηχάνημά σας δεν μπορεί να επιλύσει τον προορισμό αλλά ο proxy μπορεί, το socks5 αποτυγχάνει και το socks5h πετυχαίνει. Όταν το μηχάνημά σας το επιλύει μέσω της σήραγγας και ο proxy δεν μπορεί, το socks5 δουλεύει και το socks5h αποτυγχάνει.

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

Τι μπορεί να επιλύσει κάθε πλευρά

Ένας δημόσιος proxy δεν μπορεί να επιλύσει ένα όνομα που υπάρχει μόνο στην εταιρεία, οπότε η αποστολή του ονόματος κεντρικού υπολογιστή εκεί αποτυγχάνει στον proxy και εμφανίζεται ως σφάλμα proxy και όχι ως τοπικό σφάλμα DNS. Ένας proxy μέσα στο ίδιο ιδιωτικό δίκτυο συνήθως μπορεί να επιλύσει τέτοια ονόματα, και εκεί το socks5h δικαιώνεται. Επιλέξτε τη θέση του resolver με βάση την πολιτική που πραγματικά χρειάζεστε, γιατί το απομακρυσμένο DNS δεν είναι αυτόματα πιο ικανό και πράγματι παραδίδει το όνομα σε τρίτο. Για δημόσιο προορισμό δουλεύουν και οι δύο μορφές, οπότε προτιμήστε αυτή που χρησιμοποιούν ήδη τα άλλα εργαλεία σας.

Γράψτε αυτή την επιλογή στο runbook και όχι σε σχόλιο, και κρατήστε τα διαπιστευτήρια έξω από κοινόχρηστο ιστορικό και διαγνωστική έξοδο. Μετά αλλάξτε μία μεταβλητή τη φορά: ίδιος προορισμός, ίδιο δυαδικό, ίδιος resolver, ένα γράμμα.

Ποιο δυαδικό απάντησε

Δύο δυαδικά curl στο ίδιο μηχάνημα μπορούν να διαφέρουν σε έκδοση και χαρακτηριστικά κατασκευής. Σε ένα κέλυφος τύπου Unix, type -a curl απαριθμεί κάθε αντιστοιχία στη διαδρομή και curl --version δείχνει τα χαρακτηριστικά αυτού που θα εκτελούνταν. Ένα σκριπτ περιτυλίγματος ή ένα ψευδώνυμο νωρίτερα στη διαδρομή είναι συνηθισμένη αιτία να μην ταιριάζουν τα αποτελέσματα με το δυαδικό που νομίζετε ότι δοκιμάζετε.

Ένα μη υποστηριζόμενο σχήμα, ένας proxy που δεν μπορεί να επιλύσει το όνομα και ένας μη προσβάσιμος προορισμός είναι τρία διαφορετικά σφάλματα, οπότε διαβάστε το μήνυμα πριν αλλάξετε το γράμμα. Μια κατασκευή χωρίς τη σύνταξη socks5h αναφέρει τη συμβολοσειρά proxy ως μη υποστηριζόμενη, που δεν είναι το ίδιο με ένα όνομα που απέτυχε να επιλυθεί. Μην μετατρέπετε μία παλιά αναφορά για curl του συστήματος σε μόνιμο κανόνα για κάθε πλατφόρμα.

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