Η πεποίθηση είναι αρκετά διαδεδομένη ώστε να θεωρείται γεγονός: το Android επιτρέπει μόνο ένα VPN, άρα ένας διακομιστής SSH στο τηλέφωνο δεν μπορεί να δουλέψει μέσα από αυτή τη σήραγγα. Το πρώτο μισό είναι αληθινό και το συμπέρασμα δεν έπεται. Το όριο της πλατφόρμας αφορά πόσες εφαρμογές μπορούν να κρατήσουν τη θέση της υπηρεσίας VPN, όχι πόσες υποδοχές μπορούν να υπάρχουν ή ποιος επιτρέπεται να συνδεθεί στο τηλέφωνο. Ένας δαίμονας SSH με υποδοχή ακρόασης είναι μια συνηθισμένη εφαρμογή με συνηθισμένη θύρα, και η σήραγγα είναι μία από τις διαδρομές που μπορεί να πάρει η κίνησή του.

Τι περιορίζει στην πραγματικότητα ο κανόνας του ενός VPN

Το VpnService είναι πόρος μιας θέσης. Όταν μια εφαρμογή στήνει σήραγγα γίνεται το VPN της συσκευής, και μια δεύτερη εφαρμογή που προσπαθεί απορρίπτεται μέχρι να φύγει η πρώτη. Είναι κανόνας για την κυριότητα της σήραγγας, και εξηγεί γιατί δύο πελάτες VPN δεν μπορούν να τρέχουν ταυτόχρονα.

Για τις υποδοχές ακρόασης δεν λέει τίποτα. Ο διακομιστής SSH δεν καλεί το VpnService, δεν υποκλέπτει πακέτα και δεν ανταγωνίζεται για αυτή τη θέση. Δένει μια θύρα και δέχεται συνδέσεις, όπως ακριβώς θα έκανε χωρίς κανένα VPN. Έτσι ο μύθος μπερδεύει ένα όριο στους παρόχους σηράγγων με ένα όριο στις συνδέσεις δικτύου, και τα δύο δεν έχουν σχέση.

Ο ακροατής είναι προορισμός, όχι μέρος της σήραγγας

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

Οι κανόνες δέσμευσης είναι συνηθισμένη διαμόρφωση SSH: η διεύθυνση και η θύρα ακρόασης, και ποιος επιτρέπεται να πιστοποιηθεί. Στο Android αυτές οι ρυθμίσεις βρίσκονται στη διαμόρφωση της ίδιας της εφαρμογής, και ο κάτοχος της διεργασίας της εφαρμογής μπορεί να μην έχει άδεια για προνομιακές θύρες, οπότε η συνήθεια του υπολογιστή να δεσμεύει τη θύρα 22 ως root δεν μεταφέρεται αμετάβλητη.

ListenAddress 10.90.0.4
Port 2222
AllowUsers alice

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

Η διαδρομή απάντησης είναι εκεί όπου συνήθως σπάει

Υποθέστε ότι το ομότιμο φτάνει τη διεύθυνση της σήραγγας και φτάνει το SYN. Τώρα η απάντηση πρέπει να βγει από την ίδια διαδρομή, και αυτό είναι απόφαση δρομολόγησης μέσα στο τηλέφωνο. Αν η απάντηση βγει μέσω Wi-Fi επειδή αυτό είναι το προεπιλεγμένο δίκτυο, το ομότιμο βλέπει μια σύνδεση που δεν ολοκληρώνεται ποτέ, και αυτό μοιάζει ακριβώς με τείχος προστασίας.

Το Android το κάνει πιο περίπλοκο από έναν υπολογιστή, γιατί το προεπιλεγμένο δίκτυο επιλέγεται ανά διεργασία και μπορεί να αλλάξει από την πολιτική της εφαρμογής VPN. Ένας πελάτης VPN μπορεί να δρομολογήσει μόνο μια λίστα επιτρεπόμενων εφαρμογών, οπότε μια εφαρμογή διακομιστή εκτός αυτής της λίστας συνεχίζει να χρησιμοποιεί το φυσικό δίκτυο για τις απαντήσεις της, ενώ το ομότιμο τις περιμένει μέσα από τη σήραγγα.

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

Η παράκαμψη του VPN δεν επισκευάζει εισερχόμενη υπηρεσία

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

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

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

Διαγνώστε μία κατεύθυνση τη φορά

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

adb shell ip -br addr
adb shell ip route get 10.90.0.9
nc -vz 10.90.0.4 2222

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

Κρατήστε άθικτη την επαλήθευση κλειδιού κεντρικού υπολογιστή και τους περιορισμούς λογαριασμού όσο κάνετε αποσφαλμάτωση. Ο περιορισμός του ακροατή και των επιτρεπόμενων χρηστών είναι αυτό που κάνει έναν προσβάσιμο διακομιστή αποδεκτό· το να τους χαλαρώσετε για να δουλέψει μια σύνδεση ανταλλάσσει ένα πρόβλημα με χειρότερο. Η αναφορά διακομιστή OpenSSH καλύπτει τους ελέγχους ακρόασης και πρόσβασης αν η υλοποίησή σας για Android ακολουθεί τα ίδια ονόματα ρυθμίσεων.

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