Ausgeschlossene App trotzdem online? Regeln pro App und für Routen unterscheiden sich
Eine Android-App von einem VPN auszuschließen blockiert sie nicht. Positivlisten, UID-Richtlinienregeln und übertragene Routen entscheiden jeweils über einen anderen Teil des Wegs.
Ein Paket auszuschließen ist eine Routing-Anweisung, keine Sperre, daher sind die Seiten, die nach dem Verbindungsaufbau des VPNs laden, zu erwarten und kein Beleg für einen Fehler. Der Ausschluss nimmt die App aus dem Tunnel, statt sie zu blockieren, und das gewöhnliche Netz trägt ihren Verkehr. Hier treffen zwei getrennte Richtlinien aufeinander: die eine wählt Prozesse, die andere wählt Ziele. Sie in dieser Reihenfolge zu lesen erklärt, warum ein verbundenes Symbol und eine funktionierende App kein Widerspruch sind.
Warum ein Ausschluss das Netz offen lässt
VpnService.Builder akzeptiert entweder eine Positivliste oder eine Negativliste, nie beides. Nur Pakete auf einer Positivliste werden durch den Tunnel geleitet. Eine Negativliste kehrt das um: Jedes Paket außer den gelisteten nutzt den Tunnel, und die gelisteten behalten den physischen Weg. Ein nicht gelistetes Paket ist unter einer Positivliste ebenfalls außerhalb des Tunnels, daher ist der Ausschluss in diesem Modus der normale Zustand für die meisten Apps.
Damit wird ein lokaler Negativlisteneintrag zu einer Routingentscheidung, nicht zu einer Firewallregel. Soll eine App daran gehindert werden, einen Host zu erreichen, muss der Tunnel sie abdecken, und der Server oder eine lokale Richtlinie muss den Verkehr ablehnen. Eine App aus dem Tunnel zu nehmen ändert nur, welche Schnittstelle ihre Pakete trägt.
Der Play-Store-Fall ist das übliche bewusste Beispiel. Den Store auszuschließen lässt Downloads die zugrunde liegende Verbindung nutzen, wenn der VPN-Ausgang Übertragungen stört, und zeigt, dass Ausschluss Umgehung bedeutet, nicht Sperre.
Ein Profil, eine Liste
Der Builder wirft einen Fehler, wenn beide Aufrufe verwendet werden, also ist das Profil vor Ihnen entweder eine Positiv- oder eine Negativliste. Diese eine Tatsache bestimmt, wie jede spätere Beobachtung zu lesen ist. Prüfen Sie den Code oder die verwaltete Konfiguration vor der Routingtabelle, denn die Liste entscheidet, was der Rest der Ausgabe bedeutet. Ein Hybridprofil ist kein Zustand, den man betrachten kann.
Der Unterschied sagt auch voraus, was eine neu installierte App tun wird. Unter einer Positivliste bleibt sie draußen, bis jemand sie hinzufügt, während sie unter einer Negativliste standardmäßig dem Tunnel beitritt.
Verwaltete Konfigurationen bieten dieselbe Wahl unter anderen Schlüsselnamen, und manche Konsolen beschreiben sie als Per-App-VPN-Modus statt als Liste. Das Verhalten läuft dennoch auf diese beiden Aufrufe hinaus, also verfolgen Sie die Einstellung zurück bis zur Paketliste, statt dem Etikett zu vertrauen. Wenn Etikett und Liste nicht übereinstimmen, gewinnt die Liste.
Folgen Sie der UID-Regel zur Tunneltabelle
Android gibt jeder App ihre eigene Linux-Benutzerkennung, und der VPN-Dienst installiert Richtlinienregeln, die auf UID-Bereiche passen. Passender Verkehr wird an eine Routingtabelle gesendet, deren Standardroute auf das tun-Gerät zeigt. Die Tabellennummer wird pro VPN-Instanz vergeben, ändert sich also nach einer erneuten Verbindung oder nach dem Anlegen eines zweiten VPN-Profils.
Die Regelausgabe ist die Karte. Jede Zeile nennt eine Nachschlagetabelle, und diese Tabelle enthält die Standardroute, die entscheidet, ob passende Pakete in den Tunnel gelangen.
adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>
Führen Sie zuerst den dritten Befehl aus, um die UID zu erhalten, und suchen Sie dann die Regel, deren Bereich sie enthält. Diese Regel zeigt auf eine Tabellennummer, und ip route show table <n> mit dieser Nummer zeigt, ob eine Standardroute durch das tun-Gerät existiert. Hat die Tabelle keine Standardroute, ist die App ausgewählt, hat aber keinen Weg, was ein anderer Fehler ist.
Diese Befehle benötigen einen debugbaren Build oder ein Gerät, auf dem adb shell den Netzwerkzustand lesen kann. Auf einem Produktionsgerät antwortet der Paketmanager weiterhin, aber die Routingprüfung kann verweigert werden, also erfassen Sie, was Sie können, und behandeln Sie den Rest als unbestätigt.
Eine Route beansprucht ein Präfix, keine App
Builder.addRoute beansprucht Zielpräfixe für den Tunnel. Ein Profil, das nur 10.0.0.0/8 hinzufügt, sendet dieses Präfix durch den Tunnel und lässt jedes andere Ziel auf dem physischen Weg. Das ist gewöhnliches geteiltes Tunneln und unabhängig davon, welche Apps die Regeln ausgewählt haben.
Die vom Server übertragene Konfiguration spiegelt dasselbe Modell. Einzelne Routenübertragungen fügen Präfixe hinzu, während eine redirect-gateway-Direktive die Standardroute ersetzt und alles für die Apps erfasst, die der Tunnel abdeckt. Das Entfernen dieser Direktive kann einen funktionierenden Tunnel ohne jede Änderung am Gerät auf ein einziges Subnetz schrumpfen.
Eine übertragene Route mit ungewöhnlichem Gateway oder metrischem Qualifizierer wird möglicherweise ebenfalls nicht installiert. Bevorzugen Sie die schlichte Präfixform und überlassen Sie dem Server Weiterleitung und NAT.
Lesen Sie die Schnittmenge, bevor Sie eine Einstellung ändern
Der Tunnel trägt die Schnittmenge der abgedeckten Prozesse und der beanspruchten Ziele. Eine abgedeckte App, die eine Adresse außerhalb der veröffentlichten Präfixe anfragt, verlässt das Gerät über das physische Netz. Ein ausgeschlossenes Paket bleibt draußen, selbst wenn es eine Adresse innerhalb dieser Präfixe anfragt. Keiner der Fälle ist ein Fehler; beide sind die zwei Richtlinien bei der Arbeit.
Ein Per-App-VPN kann eine zugeordnete App auch ohne Konnektivität zurücklassen. Ist On-Demand aus und der Tunnel unten, bleibt die App an das Per-App-VPN gebunden und hat keinen Rückfallweg, was wie eine defekte App aussieht statt wie ein Richtlinienzustand. On-Demand einzuschalten oder die Zuordnung über die Verwaltung zu entfernen ändert das.
| Layer | What it selects | Where to look | Typical mismatch |
|---|---|---|---|
| Package list | Processes | Builder calls or managed configuration | App excluded but expected to be blocked |
| UID policy rule | Which table a UID uses | ip rule show | Tunnel icon on, app still on Wi-Fi |
| Routing table | Destinations for matched traffic | ip route show table <n> | Covered app reaches only one subnet |
| Server push | Prefixes offered to the client | Server route configuration | Tunnel shrinks after a server edit |
Diagnostizieren Sie eine Achse nach der anderen. Bestätigen Sie zuerst Erlauben oder Ausschließen, lesen Sie zweitens die installierten UID-Regeln und Tabellen, und testen Sie zuletzt eine zweite App gegen dasselbe Ziel. Die zweite App trennt Prozessauswahl von Zielauswahl in einer einzigen Anfrage.
Notieren Sie das Ergebnis als App, Ziel und Tabellennummer. Genau dieses Tripel muss die nächste Änderung bewahren.