Δύο απαιτήσεις που ακούγονται ισοδύναμες δεν είναι: «εξαίρεσε αυτή την εφαρμογή από το VPN» και «στείλε αυτόν τον ένα προορισμό εκτός VPN για τον φορητό υπολογιστή στο hotspot μου». Η πρώτη αλλάζει πώς ένα socket στο τηλέφωνο επιλέγει δίκτυο. Η δεύτερη πρέπει να αλλάξει μια απόφαση προώθησης για ένα πακέτο που έφτασε από άλλη συσκευή αφού το τηλέφωνο το έχει ήδη δεχτεί. Η σύγχυση των δύο είναι ο τρόπος που ένας πελάτης hotspot καταλήγει με μια εξαίρεση που ίσχυε πάντα μόνο για το δικό του πρόγραμμα περιήγησης του τηλεφώνου.

Δύο υποσυστήματα κατέχουν τις δύο ερωτήσεις

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

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

Τι αλλάζει πραγματικά η εξαίρεση ανά εφαρμογή

Ένας builder του VpnService μπορεί να ονομάσει πακέτα που μένουν εκτός σήραγγας με το addDisallowedApplication, ή να ονομάσει τα μόνα πακέτα που επιτρέπονται μέσα με το addAllowedApplication. Αυτές οι εφαρμογές ανοίγουν τότε sockets στο υποκείμενο δίκτυο, ενώ το VPN συνεχίζει να κατέχει την προεπιλεγμένη διαδρομή για όλα τα άλλα.

Το εύρος είναι ακριβές: τα δικά του sockets του πακέτου, σε αυτή τη συσκευή, όσο η σήραγγα είναι ενεργή. Δεν λέει τίποτα για προωθημένη κίνηση, τίποτα για δεύτερη συσκευή και τίποτα για πακέτα που στέλνει το σύστημα εκ μέρους του tethering.

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

Πώς φαίνεται ένα πακέτο tethering στο τηλέφωνο

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

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

Τι πολιτική χρειάζεται πραγματικά μια εξαίρεση hotspot

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

SourceDestinationIntended path
One authorized hotspot clientOne approved public service addressOrdinary cellular uplink
The same clientAll other covered destinationsShared VPN
The phone's own appsTheir existing destinationsUnchanged phone policy

Και οι δύο κατευθύνσεις πρέπει να είναι πλήρεις. Ο άμεσος κλάδος χρειάζεται χρησιμοποιήσιμη διαδρομή μέσω του κυψελοειδούς uplink που τυχαίνει να είναι τρέχον· ο κλάδος VPN χρειάζεται τη διαδρομή της σήραγγας συν άδεια προώθησης. Κάθε μετάφραση πηγής πρέπει να ταιριάζει με την έξοδο που διαλέξατε, γιατί το NAT που εφαρμόζεται σε διεπαφή σήραγγας παρουσιάζει τη διεύθυνση της σήραγγας και όχι την κυψελοειδή, και τότε η διαδρομή επιστροφής δεν συμφωνεί με τη διαδρομή εξόδου.

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

Μια διεύθυνση που καταγράφηκε δεν είναι προορισμός

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

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

Επαληθεύστε από την πλευρά προς τα κάτω

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

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

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