Android VPN-Routing: Politiksregelen virun der Tabell main
Android wielt eng Routingstabell mat uid- a Markéierungsregelen virun all Zilsich, sou datt eng Route, déi an main agebaut gëtt, vläicht ni gefrot gëtt.
Eng Route, déi op Android an d'Tabelle main agebaut gëtt, gesäit an all Lëscht richteg aus a dréit den Traffic awer net. De Grond ass, datt d'Tabelle main eng Optioun ënner e puer ass, an net als éischt gefrot gëtt. Den Netzaldéngscht vun Android baut Politiksregelen, déi eng Routingstabell mat Informatiounen aussichen, déi d'Zieladress net enthält — den uid vun der Applikatioun, eng Markéierung um Pak, de Interface iwwer deen en ukomm ass — an d'Sich no dem Zil geschitt duerno, bannen an der Tabell, déi déi Regele gewielt hunn.
Dräi Entscheedungen an enger fixer Reihenfolge
En ausgängleche Pak hëlt dräi getrennt Entscheedungen. Éischtens entscheet eng Politiksregel, wéi eng Routingstabell gëllt. Zweetens entscheet eng Route bannen an där Tabell den nächsten Hop an den ausgänglechen Interface. Drëttens entscheeden d'netfilter-Haken, ob de Pak iwwerlieft, geännert oder ëmgeleet gëtt.
D'Reihenfolge ass wichteg, well all Etapp nëmmen hir eege Fro beäntwere kann. Eng Firewall-Regel, déi e Pak akzeptéiert, wielt keng Tabell, an eng Route, déi an eng Tabell agebaut gëtt, déi keng Regel wielt, ass inaktiv. Vill vun der Duercherneen ronderëm Android-VPNen kënnt doraus, datt ee vun den dräi reparéiert gëtt an een keng Ännerung gesäit, well de Feeler an engem aneren louch.
| Stage | Selector | What it cannot decide |
|---|---|---|
| Policy rule | uid range, mark, incoming interface | Which route exists inside the table |
| Route lookup | Destination prefix, longest match | Whether the packet is allowed out |
| Netfilter hook | Chain position, match conditions | Which table was selected |
Markéierungen sinn e gepackte Feld, net en Etikett deen dir gehéiert
Android packt e puer Fakten an de selwechte Markéierungswäert: wéi ee Netz gewielt gouf, ob eng Applikatioun en Netz explizit gewielt huet, ob e Socket virum VPN geschützt ass an d'Bitten, déi mat Berechtegungen ze dinn hunn. Den AOSP-fwmark-Kapp definéiert dee Layout fir dee momentanen Bam, an de Layout ass eng Plattform-Interna, déi sech tëscht Veröffentlichungen ännert.
Dofir ass et op Android geféierlech, eng ganz Markéierungswäert mat iptables -j MARK --set-mark ze schreiwen. Et füügt keen Tag bäi; et ersetzt d'Netzwiel, déi de System schonn getraff huet. De Pak passt duerno zu aneren Reegelen, wat ausgesi kann, wéi wann de VPN ugefaang huet ze funktionéieren, oder wéi wann eng onbedriwwen App d'Verbindung verluer huet, jee no deene Bitten, déi iwwerschriwwe goufen.
Wann s du Markéierungen ufässe muss, lies als éischt de momentane Wäert a benotz eng Mask, sou datt nëmme d'Bitten, déi s du verstees, geännert ginn:
ip rule show
ip route show table all | head -40
ip route get 10.20.4.11Eng Verbindungsmarkéierung ass en eegene Objet vun enger Pakmarkéierung, an déi eng ass eng Route. D'Markéierung op Äntwertpaken ze restauréieren ass en anere Schrëtt wéi eng Tabell beim Ausgang ze wielen, an dofir ginn een-Richtungs-Reparaturen Verbindungen, déi sech opmaachen an duerno hänken.
Wien besëtzt d'Regelen an d'Tabellen
Den Netzaldéngscht vun Android, netd, erstellt d'Regelen an d'Tabellen pro Netz. De AOSP RouteController ass dee Punkt, wou déi Reegele fir VPNen, physesch Netzer a uid-Bereicher zesummegesat ginn, an hire Liewenszyklus ass u Netzwierk-Evenementer gebonnen amplaz u eng Konfiguratiounsdatei.
Zwou Konsequenze folgen. Éischtens sinn d'Prioritéiten an d'Tabellennummeren, déi s du op engem Apparat fënns, Build-Interna, keng Schnëttstell: Nummeren déi gläich ausgesinn op enger anerer Android-Versioun kënnen eppes ganz anescht bedeiten. Zweetens gëtt de Status nei opgebaut, wann d'Netzer sech änneren, sou datt eng Regel, déi haut aus enger root-Shell agebaut gëtt, nom nächsten Wi-Fi-Wiessel fort ka sinn.
Dës Verschwannen gëtt dacks gemellt, wéi wann de System eng Route ignoréiert. Wat tatsächlech geschitt ass, ass datt d'Regel, déi d'Tabell gewielt huet, net méi existéiert, an d'Route bannen an der Tabell ass elo aus der Siicht vum Pak net erreechbar. Kontrolléier d'Regellëscht, net d'Routelëscht, wann eng funktionéierend Konfiguratioun no enger Reconnectioun ophält ze funktionéieren.
Froe fir d'Reihenfolge vun den Haken hunn keng allgemeng Äntwert
D'Fro, ob iptables virum VPN-Routing leeft, kann een net beäntweren, ouni de Wee vum Pak ze nennen. E lokal erstallte Pak geet duerch den output-Haken, wou eng Markéierungsännerung eng Re-Routing-Prüfung ausléist — eng zweet Sich, keng retrograd Ännerung vun der éischter. E Pak, dee vun engem tetherierte Client kënnt, geet duerch de prerouting-Wee a gëtt amplaz weidergeleet, an d'Ketten, déi en gesinn, sinn anerer.
Also kann déiselwecht Regel fir den Traffic vun enger App effektiv an fir Tethering-Traffic onsichtbar sinn, an en Zähler, deen op null bleift, seet der, wéi ee Wee de Pak geholl huet, net ob d'Regel falsch ass. Benotz Zähler, fir de Wee ze bestëmmen, ier s du eng Match-Bedingung änderst.
Dëst ass och d'Etapp, wou e Politiks-Routing-Fehler schwéier ze gesinn gëtt. Routing an eng Tabell, déi existéiert awer d'Zil net enthält, gëtt en Netz net erreechbar, dat wéi ee Firewall-Drop ausgesäit, wärend e Firewall-Drop eng Zäitlimitt gëtt, déi wéi e Routing-Schwaarzt Lach ausgesäit.
Diagnostizéier bannen dem System, oder looss et a Rou
Fir eng autoriséiert Iwwerpréiwung, bestëmm véier Fakten, ier s du eppes ufässe: den uid an de Profil vun der Applikatioun, d'Netz, dat Android fir si gewielt huet, ob de VPN déi Applikatioun iwwerhaapt enthält, an ob de Problem a béide Adressfamilljen existéiert. En Ausschloss pro Applikatioun erkläert vill Rapporten datt de VPN net funktionéiert ouni ee Routingfehler.
Lies duerno d'Regelen, d'Masken an d'Tabellen, déi tatsächlech a Kraaft sinn, an hal en Netzwierkwiessel bannen dem Observatiounsfenster. Wann d'Verhalen sech iwwer eng Reconnectioun ännert, kucks du op e geréierten Liewenszyklus, net op eng feelend Route.
Fir gewéinlech Ufuerderunge benotz déi ënnerstëtzt Steierungen: Abezéien an Ausschléissen pro Applikatioun an der VPN-Applikatioun, an d'eegen Netzwiel vun der Plattform fir alles, wat e bestëmmten Wee brauch. Wann eng privilegiéiert Integratioun wierklech mat der Routingmaschinn zesummeschaffe muss, zil op d'Implementatioun vun der exakt Android-Versioun, déi s du ënnerstëtz, a pfleg hire Liewenszyklus iwwer de Komponent, deen hir gehéiert. Plattform-Ketten ze flushen oder eng Regel mat héijer Prioritéit anzesetzen mécht aus enger Diagnos en zweeten Netzwierkmanager, an den Telefon wäert sech entspriechend behuelen.