Android SSH SOCKS proxy: γιατί συνδέεται μόνο το μισό από τις εφαρμογές σας
Το ssh -D δημιουργεί ακροατή SOCKS, όχι δίοδο για όλη τη συσκευή. Ακολουθήστε την αλυσίδα από την εφαρμογή στον προσαρμογέα και στο SSH και ελέγξτε τα κενά σε DNS και κύκλο ζωής.
Συνδέεστε μέσω SSH, προσθέτετε -D 1080 και η εντολή εκτελείται με επιτυχία. Ένας ακροατής SOCKS υπάρχει πλέον στο τηλέφωνο, και οι μισές εφαρμογές εξακολουθούν να βγαίνουν από τα δεδομένα κινητής. Αυτό είναι το φυσιολογικό αποτέλεσμα, όχι σπασμένη δίοδος: το ssh -D δημιουργεί ένα σημείο proxy, και οι εφαρμογές Android χρησιμοποιούν proxy μόνο αν κάτι τις αναγκάσει. Η βήμα-βήμα διαδρομή της αλυσίδας δείχνει πού βρίσκεται στην πραγματικότητα κάθε κομμάτι της δουλειάς.
Ξεκινήστε από εκεί που ξεκινά η κίνηση
Διαλέξτε μια εφαρμογή που θα έπρεπε να χρησιμοποιεί τη δίοδο και ελέγξτε αν έχει δική της ρύθμιση proxy. Ένας περιηγητής με πεδίο SOCKS είναι η εύκολη περίπτωση: δείξτε τον στο 127.0.0.1:1080, ενεργοποιήστε το απομακρυσμένο DNS αν υπάρχει η ρύθμιση, και το αίτημα περνά. Ένα πρόγραμμα συνομιλίας, μια εφαρμογή χαρτών ή ένα παιχνίδι χωρίς τέτοιο πεδίο δεν έχει τρόπο να χρησιμοποιήσει τον ακροατή, και τίποτα από όσα πληκτρολογήσετε στην εντολή SSH δεν το αλλάζει.
Πριν εμπλέξετε οτιδήποτε άλλο, αποδείξτε ότι ο ακροατής λειτουργεί από το ίδιο το κέλυφος του τηλεφώνου με έναν πελάτη που μιλά απευθείας SOCKS:
ssh -N -D 1080 [email protected]
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
Η διεύθυνση που επιστρέφει πρέπει να είναι του διακομιστή SSH, όχι του τηλεφώνου. Αν είναι, το μισό του proxy τελείωσε και η υπόλοιπη δουλειά αφορά την κάλυψη. Αν δεν είναι, διορθώστε πρώτα την πλευρά SSH: έλεγχο ταυτότητας με κλειδί, την ικανότητα του διακομιστή να φτάνει στον προορισμό και την έξοδο του ίδιου του διακομιστή SSH.
Προσθέστε το κομμάτι που χρειάζεται το Android
Οι εφαρμογές χωρίς ρύθμιση proxy χρειάζονται κάτι που να συλλαμβάνει τα πακέτα τους και να τα μετατρέπει σε συνδέσεις proxy. Σε συσκευή χωρίς root, αυτό είναι ένας προσαρμογέας υπηρεσίας VPN: μια εφαρμογή που παίρνει την εικονική διεπαφή και προωθεί επιλεγμένη κίνηση στον τοπικό ακροατή SOCKS. Η αλυσίδα γίνεται εφαρμογή, προσαρμογέας, ακροατής SOCKS, σύνδεση SSH, προορισμός.
Εγκαταστήστε τον προσαρμογέα, δώστε του την άδεια VPN και επιλέξτε τις εφαρμογές ή τις διαδρομές που θα συλλαμβάνει. Το εικονίδιο κλειδιού στη γραμμή κατάστασης αντιπροσωπεύει τότε τον προσαρμογέα, όχι ένα ξεχωριστό εμπορικό VPN. Το Android επιτρέπει μία ενεργή σύνδεση υπηρεσίας VPN ανά προφίλ χρήστη, οπότε το άνοιγμα δεύτερης εφαρμογής VPN δεν προσθέτει στρώμα πάνω στην αλυσίδα: ανταγωνίζεται για τον ίδιο ρόλο.
Αυτό είναι επίσης το βήμα όπου ένα επιτυχημένο τεστ μπορεί να σας παραπλανήσει. Αν ο προσαρμογέας έχει ρυθμιστεί να συλλαμβάνει μόνο τον περιηγητή που δείξατε ήδη στο proxy, όλα λειτουργούν και τίποτα άλλο δεν καλύπτεται. Διαβάστε τη λίστα σύλληψης πριν συμπεράνετε ότι η συσκευή περνά από δίοδο.
Κρατήστε τη μεταφορά SSH έξω από τη σύλληψη
Η ίδια η σύνδεση SSH δεν πρέπει να επιστρέφει στη δίοδο SOCKS που συντηρεί. Αν ο προσαρμογέας συλλαμβάνει την κίνηση της εφαρμογής SSH, η δίοδος εξαρτάται από μια σύνδεση που περιμένει τη δίοδο, και το αποτέλεσμα είναι ένας βρόχος που κολλάει ή αποτυγχάνει μόλις ξεκινήσει ο προσαρμογέας.
Οι ενσωματωμένες υλοποιήσεις προστατεύουν το δικό τους socket μεταφοράς. Με ξεχωριστές εφαρμογές χρειάζεστε μια υποστηριζόμενη εξαίρεση: αφήστε την εφαρμογή SSH έξω από τη σύλληψη ή εξαιρέστε το τελικό σημείο SSH με διεύθυνση. Και τα δύο έχουν κόστος. Αν εξαιρέσετε ολόκληρη εφαρμογή τερματικού, αφαιρείτε και την άσχετη δικτυακή της δραστηριότητα από τη δίοδο, και μια εξαίρεση διεύθυνσης σπάει όταν αλλάξει η διεύθυνση του διακομιστή ή όταν το όνομα επιλυθεί διαφορετικά στην επόμενη σύνδεση.
Ελέγξτε την εξαίρεση από έξω: επανασυνδέστε τον προσαρμογέα και μετά επιβεβαιώστε ότι η συνεδρία SSH επιβιώνει και ότι το αίτημα μέσω proxy εξακολουθεί να αναφέρει τη διεύθυνση του διακομιστή. Μια συνεδρία που δουλεύει μέχρι να ξεκινήσει ο προσαρμογέας και μετά παγώνει είναι ο βρόχος.
Ακολουθήστε το DNS και το UDP ως το τέλος της αλυσίδας
Η δυναμική προώθηση του OpenSSH μεταφέρει συνδέσεις TCP. Δεν είναι μεταφορά UDP-associate ή ICMP, και ένας προσαρμογέας δεν μπορεί να εφεύρει προώθηση UDP δεχόμενος πακέτα UDP. Ό,τι επιμένει σε UDP, μαζί με QUIC και μέσα WebRTC, είτε θα αποτύχει είτε θα πέσει πίσω σε TCP ανάλογα με την εφαρμογή.
Το DNS χρειάζεται τη δική του απόφαση. Μια εφαρμογή που επιλύει ένα όνομα τοπικά στέλνει το ερώτημα μέσω του κανονικού resolver πριν συνδεθεί, οπότε η δίοδος μεταφέρει τη σύνδεση αλλά όχι την αναζήτηση. Ένας πελάτης που γνωρίζει proxy με επιλογή απομακρυσμένου DNS το αποφεύγει· μια συλλαμβανόμενη εφαρμογή χωρίς αυτό όχι. Ελέγξτε ποιος resolver απάντησε αντί να υποθέσετε ότι ο προσαρμογέας το άλλαξε.
Κρατήστε τον ακροατή SOCKS δεσμευμένο στο loopback, επαληθεύστε το host key του διακομιστή SSH στην πρώτη χρήση και αφήστε την κανονική επικύρωση HTTPS στη θέση της για τον τελικό ιστότοπο. Το SSH προστατεύει το τμήμα τηλέφωνο-διακομιστής· δεν κρυπτογραφεί ό,τι κάνει ο διακομιστής μετά.
Ελέγξτε τους δύο κύκλους ζωής και αποφασίστε
Ο προσαρμογέας και η συνεδρία SSH έχουν ξεχωριστούς κύκλους ζωής. Αν το SSH πέσει ενώ ο προσαρμογέας συνεχίζει να συλλαμβάνει, οι εφαρμογές μπορεί να κολλήσουν χωρίς προφανές σφάλμα, γιατί τα πακέτα τους μπαίνουν ακόμα σε μια εικονική διεπαφή που δεν έχει πια λειτουργική έξοδο. Αν σταματήσει ο προσαρμογέας, οι εφαρμογές είτε πάνε απευθείας είτε μπλοκάρονται, ανάλογα με την πολιτική VPN της συσκευής.
Δοκιμάστε και τις δύο κατευθύνσεις σκόπιμα: σκοτώστε τη συνεδρία SSH με τον προσαρμογέα σε λειτουργία και μετά σταματήστε τον προσαρμογέα ενώ το SSH μένει όρθιο. Αυτό που κάνει το τηλέφωνο σε κάθε περίπτωση είναι η πολιτική που πραγματικά αναπτύσσετε, ό,τι κι αν ισχυρίζονταν οι οδηγίες εγκατάστασης.
Αν η ροή εργασίας απαιτεί κάλυψη όλης της συσκευής με προβλέψιμο τρόπο αποτυχίας, ένα πραγματικό IP VPN, ή ένας συντηρημένος προσαρμογέας σχεδιασμένος για αυτή την αλυσίδα, είναι η έντιμη απάντηση. Μια συνεδρία κελύφους που τρέχει δίπλα σε μια άσχετη εφαρμογή σύλληψης δεν είναι συντηρημένη δίοδος συσκευής· είναι δύο στοιχεία χωρίς συμφωνία για το τι συμβαίνει όταν τελειώσει το ένα.