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

Γιατί ένας αποκλεισμός κρατά το δίκτυο ανοιχτό

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

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

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

Ένα προφίλ, μία λίστα

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

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

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

Ακολουθήστε τον κανόνα UID στον πίνακα της σήραγγας

Το Android δίνει σε κάθε εφαρμογή το δικό της αναγνωριστικό χρήστη Linux, και η υπηρεσία VPN εγκαθιστά κανόνες πολιτικής που ταιριάζουν με εύρη UID. Η κίνηση που ταιριάζει στέλνεται σε πίνακα δρομολόγησης του οποίου η προεπιλεγμένη διαδρομή δείχνει στη συσκευή tun. Ο αριθμός του πίνακα εκχωρείται ανά στιγμιότυπο VPN, άρα αλλάζει μετά από επανασύνδεση ή μετά τη δημιουργία δεύτερου προφίλ VPN.

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

adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>

Εκτελέστε πρώτα την τρίτη εντολή για να πάρετε το UID, μετά βρείτε τον κανόνα του οποίου το εύρος το περιέχει. Αυτός ο κανόνας δείχνει σε έναν αριθμό πίνακα, και ip route show table <n> με αυτόν τον αριθμό δείχνει αν υπάρχει προεπιλεγμένη διαδρομή μέσω της συσκευής tun. Αν ο πίνακας δεν έχει προεπιλογή, η εφαρμογή έχει επιλεγεί αλλά δεν έχει διαδρομή, που είναι διαφορετική βλάβη.

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

Μια διαδρομή διεκδικεί πρόθεμα, όχι εφαρμογή

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

Η διαμόρφωση που προωθεί ο διακομιστής αντιγράφει το ίδιο μοντέλο. Οι μεμονωμένες προωθήσεις διαδρομών προσθέτουν προθέματα, ενώ μια οδηγία redirect-gateway αντικαθιστά την προεπιλεγμένη διαδρομή και συλλαμβάνει τα πάντα για τις εφαρμογές που καλύπτει η σήραγγα. Η αφαίρεση αυτής της οδηγίας μπορεί να συρρικνώσει μια λειτουργική σήραγγα σε ένα υποδίκτυο χωρίς καμία αλλαγή στη συσκευή.

Μια προωθημένη διαδρομή με ασυνήθιστη πύλη ή μετρικό προσδιοριστικό μπορεί επίσης να μην εγκατασταθεί. Προτιμήστε την απλή μορφή προθέματος και αφήστε τον διακομιστή να χειριστεί την προώθηση και το NAT.

Διαβάστε την τομή πριν αλλάξετε μια ρύθμιση

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

Ένα VPN ανά εφαρμογή μπορεί επίσης να αφήσει μια συνδεδεμένη εφαρμογή χωρίς συνδεσιμότητα. Όταν το on-demand είναι κλειστό και η σήραγγα είναι κάτω, η εφαρμογή παραμένει δεσμευμένη στο VPN ανά εφαρμογή και δεν έχει εναλλακτική, που μοιάζει με χαλασμένη εφαρμογή και όχι με κατάσταση πολιτικής. Η ενεργοποίηση του on-demand ή η αφαίρεση της σύνδεσης μέσω διαχείρισης το αλλάζει.

LayerWhat it selectsWhere to lookTypical mismatch
Package listProcessesBuilder calls or managed configurationApp excluded but expected to be blocked
UID policy ruleWhich table a UID usesip rule showTunnel icon on, app still on Wi-Fi
Routing tableDestinations for matched trafficip route show table <n>Covered app reaches only one subnet
Server pushPrefixes offered to the clientServer route configurationTunnel shrinks after a server edit

Διαγνώστε έναν άξονα τη φορά. Επιβεβαιώστε πρώτα άδεια ή αποκλεισμό, διαβάστε δεύτερο τους εγκατεστημένους κανόνες UID και τους πίνακες, και δοκιμάστε τελευταία μια δεύτερη εφαρμογή στον ίδιο προορισμό. Η δεύτερη εφαρμογή χωρίζει την επιλογή διεργασίας από την επιλογή προορισμού σε ένα αίτημα.

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

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