Twee mense vra dieselfde vraag en kry onversoenbare antwoorde, want hulle staan op verskillende plekke. Een het die stelsel se VPN-instellings oop en wysig ’n lys programme. Die ander skryf VpnService.Builder.addDisallowedApplication() in ’n redigeerder. Albei noem dit ’n VPN-filter per program. Net een van hulle besit die beheer wat hy beskryf, en nie een van hulle blokkeer iets nie.

Begin by die skerm wat die gebruiker sien

Maak Instellings oop, vind die VPN-inskrywing en kyk watter verbinding werklik aktief is. As die kliënt ’n lys per program bied, behoort daardie lys aan die kliënt se eie tonnel. Die platform publiseer nie ’n algemene API waarmee ’n onverwante program ’n ander VPN se programkeuse kan lees of wysig nie, so ’n tweede app kan nie daardie lys vir die gebruiker regmaak nie.

Dit is die eerste vurk in die uiteensetting. As die geïnstalleerde VPN nie so ’n instelling het nie, is daar niks om rond te programmeer nie: die funksie ontbreek in die produk wat die tonnel besit. As dit wel een het, is die regte oplossing in daardie skerm, deur die persoon wat dit kan oopmaak.

Volg die pakkie tot in ’n tonnel

Wanneer jou eie app ’n tonnel bou, skep dit ’n TUN-koppelvlak en verklaar watter programme se verkeer daarin gaan. Die lidmaatskap-oproepe gebeur voordat die koppelvlak gevestig word, en daarna is die reëlstel vir daardie sessie vas:

val builder = VpnService.Builder()
builder.addAddress("10.8.0.2", 32)
builder.addRoute("0.0.0.0", 0)
builder.addDisallowedApplication("com.example.bypass")
val tun = builder.establish()   // membership decided here

Daardie oproepe geld net vir die tonnel wat jou app pas geskep het. Hulle is nie ’n toestelwye beleid nie, hulle bly nie vir ander kliënte nie, en hulle kan nie in iemand anders se VPN ingryp nie. Wanneer ’n builder-oproep misluk omdat die pakket nie opgelos kan word nie, word die koppelvlak nooit gevestig nie, wat ’n skoon mislukking is eerder as ’n stil een.

Waarom die uitsluiting soos ’n blok gelyk het

’n Program wat nie toegelaat word nie, word om jou tonnel na die onderliggende netwerk gelei. Dit is die teenoorgestelde van blokkering: die verkeer verlaat steeds die toestel, net buite die koppelvlak wat jy beheer. ’n App met ’n vuurmuur-benadering doen die omgekeerde: dit laat die program se verkeer in sy tonnel toe en gooi dan die pakkies weg, of weier om hulle aan te stuur, so die koppelvlak bly dieselfde en die beleidrigting is omgekeer.

Die werk agter daardie ommekeer is nie ’n konfigurasievlag nie. Jy lees IP-pakkies uit die tonnel-beskrywer, besluit per vloei, en stuur hulle deur ’n beskermde sok of laat val hulle. Enigiets wat jy nalaat om te hanteer, stop eenvoudig, en daarom lyk ’n halfvoltooide tonnel soos ’n stukkende netwerk eerder as ’n werkende filter. As jou doel ’n blok is, begroot vir pakkiehantering, ’n voorgronddiens en ’n geskrewe beleid vir verkeer wat jy nie kan klassifiseer nie.

Wat breek as jy dit self bou

Android laat gewoonlik net een aktiewe VPN op ’n slag toe, so jou filttertonnel en ’n privaatheidstonnel meeding om dieselfde plek, tensy die produkte koppeling ondersteun. Altyd-aan VPN met blokkering van verbindings verander die mislukkingsmodus op ’n manier wat hier saak maak: verkeer wat nie die tonnel kan binnegaan nie, word weggegooi in plaas daarvan om direk gestuur te word, wat ’n lek-voorkomende ontwerp wil hê en wat ’n ontfoutingsessie selde verwag.

Pakket-sigbaarheid is die tweede lokval. Om ’n program se pakketnaam op te los kan met NameNotFoundException misluk, en op nuwer Android-weergawes hang die stel pakkette wat jy kan sien af van die navrae wat jy verklaar het. Hanteer die uitsondering eerder as om te aanvaar elke naam los op, en lees die lys weer wanneer programme geïnstalleer of verwyder word eerder as om dit vir altyd te kas.

Bestuurde toestelle voeg ’n derde eienaar by. ’n Beleid vir ondernemingsmobiliteit kan ’n VPN per program of ’n altyd-aan-profiel stel, en ’n gewone program kan dit nie oorheers nie. Kyk of die toestel bestuur word voordat jy jou eie kode ontfout, want in daardie geval is die lys wat jy probeer verander dalk nie deur enigiemand met die telefoon wysigbaar nie.

Toets dit met ’n app wat jy beheer

Moenie toets met die app wat jy probeer filtreer nie. Gebruik ’n tweede program wie se netwerkgedrag jy kan waarneem, en kyk of sy verkeer deur jou tonnel uitgaan terwyl die teiken se verkeer dit nie doen nie. As albei binne bly, werk die beleid en is die teiken uitgesluit; as nie een uitgaan nie, is die tonnel self verkeerd en is die lys van programme nie die probleem nie.

Besluit dan watter van drie dinge jy werklik bou. ’n Tonnel per program is die builder-API, met die lys as deel van jou profiel. ’n Toestel-vuurmuur is pakkiehantering plus ’n lewensiklus wat jy kan verdedig. Om iemand anders se VPN te verander is glad nie ’n ondersteunde pad nie, en die eerlike antwoord daar is dat die instelling aan daardie produk behoort.

Verwante artikels