Διακομιστής VPN σε Android: το root δεν κάνει το τηλέφωνο προσβάσιμο
Τρία ξεχωριστά προβλήματα κρίνουν αν ένα τηλέφωνο μπορεί να εξυπηρετεί πελάτες VPN: η εισερχόμενη διαδρομή, το μοντέλο προνομίων και η προώθηση. Το root αγγίζει μόνο το μεσαίο.
Το root αλλάζει ποιες δικτυακές λειτουργίες επιτρέπεται να δοκιμάσει μια διεργασία. Δεν δίνει στο τηλέφωνο μια δημόσια προσβάσιμη διεύθυνση, δεν δεσμεύει εισερχόμενη αντιστοίχιση στον πάροχο και δεν κρατά έναν δαίμονα ζωντανό μετά από επανεκκίνηση. Αν αποφασίζετε αν ένα τηλέφωνο Android μπορεί να λειτουργήσει ως διακομιστής VPN, διαχωρίστε τρία ερωτήματα: μπορεί ο προβλεπόμενος πελάτης να φτάσει καθόλου στον ακροατή, ποιο μοντέλο προνομίων χρειάζεται η υλοποίηση του διακομιστή και τι πρέπει να προωθείται όταν το τούνελ είναι ενεργό.
Ποιος πρέπει να φτάσει το τηλέφωνο, και από πού
Ένας πελάτης στο ίδιο επιτρεπόμενο LAN και ένας πελάτης σε δεδομένα κινητής δοκιμάζουν δύο διαφορετικά δίκτυα. Καθορίστε πρώτα το προβλεπόμενο, γιατί οι απαντήσεις δεν μεταφέρονται. Στο Wi-Fi, η ανεπιθύμητη εισερχόμενη κίνηση χρειάζεται συνήθως αντιστοίχιση στον ανάντη δρομολογητή και μια χρησιμοποιήσιμη δημόσια διαδρομή πέρα από αυτόν. Στο κυψελωτό, το carrier-grade NAT σημαίνει ότι η εισερχόμενη IPv4 συχνά δεν είναι διαθέσιμη, ό,τι κι αν επιτρέπει το τηλέφωνο.
Ακριβώς αυτό το τελευταίο σημείο δεν μπορεί να αγγίξει το root. Το τοπικό τείχος προστασίας του τηλεφώνου και το NAT του παρόχου είναι διαφορετικά συστήματα, και η αλλαγή του πρώτου δεν επηρεάζει το δεύτερο. Μια ιδιωτική διεύθυνση διασύνδεσης, ένα εικονίδιο δεδομένων κινητής ή ένα socket που ακούει δεν αποδεικνύουν προσβασιμότητα. Αν η διαδρομή του παρόχου προσφέρει όντως παγκοσμίως δρομολογήσιμη IPv6, χρειάζεστε ακόμη συνειδητή πολιτική ακροατή και τείχους προστασίας γι' αυτήν· το να έχεις διεύθυνση δεν είναι το ίδιο με το να δέχεσαι συνδέσεις.
| Client path | What actually decides reachability |
|---|---|
| Same LAN | The phone's listener and its local firewall |
| Wi-Fi, from the internet | A mapping on the upstream router plus a usable public path beyond it |
| Cellular IPv4 | The carrier's NAT, which the handset does not control |
| Cellular IPv6 | Address, listener and firewall policy together |
Η εξυπηρέτηση και η προώθηση είναι δύο διαφορετικές επιτυχίες
Μια ολοκληρωμένη χειραψία VPN αποδεικνύει ότι το τούνελ υπάρχει. Δεν αποδεικνύει ότι ο πελάτης μπορεί να φτάσει ένα LAN πίσω από το τηλέφωνο, ούτε ότι το τηλέφωνο μπορεί να λειτουργήσει ως έξοδος στο διαδίκτυο. Αυτές είναι ξεχωριστές ρυθμίσεις χτισμένες στο εσωτερικό σχέδιο διευθύνσεων, τις διαδρομές, τη συμπεριφορά επιστροφής και μια στενά οριοθετημένη πολιτική προώθησης για την εργασία που θέλετε πραγματικά.
Ο τρόπος αποτυχίας είναι προβλέψιμος: η χειραψία πετυχαίνει, ο πελάτης δείχνει συνδεδεμένος και τίποτα δεν φορτώνει. Πριν εντοπίσετε σφάλματα στον πελάτη, αποφασίστε ποιον από τους δύο ρόλους χτίζετε. Η απομακρυσμένη πρόσβαση σε μια συσκευή στο δίκτυο του τηλεφώνου και η έξοδος στο διαδίκτυο μέσω πλήρους τούνελ απαιτούν διαφορετικούς κανόνες προώθησης, και το να παρέχετε και τα δύο όταν θέλατε ένα διευρύνει την έκθεση χωρίς να προσθέτει τη δυνατότητα που ζητήσατε.
Το μοντέλο προνομίων είναι επιλογή, όχι root ή τίποτα
Ένας συμβατικός δαίμονας OpenVPN που χρησιμοποιεί συσκευή TUN του πυρήνα χρειάζεται τις αντίστοιχες δυνατότητες, πρόσβαση στον κόμβο της συσκευής και συνεργασία από την πολιτική ασφαλείας του Android. Το root δεν είναι γενική εξαίρεση από το SELinux· μια προνομιούχα διεργασία εξακολουθεί να περιορίζεται από την πολιτική της πλατφόρμας. Γι' αυτό ένα δυαδικό που τρέχει άνετα σε διακομιστή Linux μπορεί να αποτύχει σε τηλέφωνο χωρίς προφανές σφάλμα για άδειες.
Μια υλοποίηση πύλης στον χώρο χρήστη μπορεί να έχει εντελώς διαφορετικό μοντέλο προνομίων, οπότε ο κοινός ισχυρισμός ότι κάθε διακομιστής VPN στο Android χρειάζεται root είναι υπερβολικά ευρύς. Το root σας αγοράζει τη δυνατότητα να δοκιμάσετε περισσότερες λειτουργίες, όχι την εγγύηση ότι θα επιτραπούν ή ότι το αποτέλεσμα θα είναι προσβάσιμο.
Η ίδια η εγγραφή υπηρεσίας VPN του Android είναι άλλος ένας μηχανισμός. Δίνει σε μια εφαρμογή μια διαχειριζόμενη διασύνδεση πελάτη με καθορισμένο κύκλο ζωής· δεν είναι γενικός εγκαταστάτης διακομιστή, και η εκκίνηση ενός δαίμονα από τερματικό δεν του δίνει διαχείριση μόνιμης λειτουργίας, πολιτική ανά εφαρμογή ή δική του διαδρομή ανάκτησης.
Αν θέλετε σημείο εξόδου, αλλάξτε την αρχιτεκτονική
Όταν ο στόχος είναι απλώς απομακρυσμένη έξοδος στο διαδίκτυο μέσω του τηλεφώνου και όχι συμβατότητα με υπάρχον προφίλ OpenVPN, ένας υποστηριζόμενος κόμβος εξόδου σε δίκτυο επικάλυψης είναι η καταλληλότερη σχεδίαση. Η Tailscale τεκμηριώνει ρόλο κόμβου εξόδου για Android με δικά της βήματα εγγραφής, εξουσιοδότησης και επιλογής πελάτη.
Το αντιστάθμισμα είναι πραγματικό και αξίζει να ειπωθεί καθαρά: δέχεστε διαφορετικό πρωτόκολλο, διαφορετικό μοντέλο εμπιστοσύνης και εξάρτηση από εκείνον τον λογαριασμό και την υπηρεσία συντονισμού. Δεν κάνει έναν τροποποιημένο πελάτη OpenVPN να ενταχθεί στο δίκτυο επικάλυψης και δεν σας δίνει ακροατή OpenVPN σε δημόσια διεύθυνση.
Τι χρειάζεται ακόμη η ανάπτυξη
Όποια διαδρομή κι αν διαλέξετε, τα επιχειρησιακά βασικά κρίνουν αν θα αντέξει μια εβδομάδα. Κρατήστε τα διαπιστευτήρια του διακομιστή ιδιωτικά, εκδώστε ξεχωριστές ταυτότητες πελατών και σχεδιάστε την ανάκληση πριν τη χρειαστείτε. Αποφασίστε πώς φτάνουν οι ενημερώσεις, τι κρατά την υπηρεσία σε λειτουργία στο παρασκήνιο και πώς ανακάμπτει μετά από επανεκκίνηση ή αλλαγή δικτύου.
Αποφύγετε τις συντομεύσεις που φαίνονται βολικές: ένα παρωχημένο στατικό δυαδικό, ονόματα διασύνδεσης γραμμένα στον κώδικα και ένα σενάριο εκκίνησης που αδειάζει την υπάρχουσα πολιτική τείχους προστασίας. Μετά αποδεχτείτε το αποτέλεσμα μόνο απέναντι σε συγκεκριμένη δοκιμή: ένας εξουσιοδοτημένος απομακρυσμένος πελάτης φτάνει τον προβλεπόμενο πόρο, οι απαγορευμένοι προορισμοί παραμένουν μη διαθέσιμοι και η συσκευή επανέρχεται μόνη της μετά το υποστηριζόμενο γεγονός κύκλου ζωής. Η πρόσβαση root είναι ένα πιθανό συστατικό αυτού του αποτελέσματος και σπάνια το καθοριστικό.