Twa minsken stelle deselde fraach en krije net ferienbere antwurden, om't se op ferskillende plakken steane. De iene hat it systeem-VPN-ynstellingsskerm iepen en bewurket in list fan applikaasjes. De oare skriuwt VpnService.Builder.addDisallowedApplication() yn in editor. Beide neame it in per-app VPN-filter. Mar ien fan harren hat de kontrôle dy't se beskriuwe, en gjin fan beiden blokkearret wat.

Begjin by it skerm dat de brûker sjocht

Iepenje Ynstellings, fyn de VPN-ynfier en besjoch de ferbining dy't echt aktyf is. As de klant in per-app list biedt, heart dy list by de eigen tunnel fan de klant. It platform publisearret gjin algemiene API wêrtroch in oare applikaasje de applikaasjeseleksje fan in oare VPN lêze of bewurkje kin, dus in twadde app kin dy list net foar de brûker reparearje.

Dit is de earste splitsing fan de rûnlieding. Hat de ynstallearre VPN sa'n ynstelling net, dan is der neat om hinne te programmearjen: de funksje ûntbrekt yn it produkt dat de tunnel hat. Hat it dy wol, dan is de goede repaasje yn dat skerm, dien troch de persoan dy't it iepenje kin.

Folgje it pakket in tunnel yn

As jo eigen app in tunnel bout, makket it in TUN-ynterface en ferklearret it hokker applikaasjes har ferkear deryn komt. De lidmaatskip-opropen barre foardat de ynterface oprjochte wurdt, en dêrnei is de regelset foar dy sesje fêst:

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

Dy oprop jilde foar de tunnel dy't jo app krekt makke hat en foar neat oars. It is gjin belied foar it hiele apparaat, se bliuwe net foar oare klanten, en se kinne net yn de VPN fan in oar komme. As in oprop fan de bouwer in útsûndering smyt om't it pakket net oplost wurde kin, wurdt de ynterface nea oprjochte, wat in skjinne mislearring is yn stee fan in stille.

Wêrom't de útsluting op in blokkade like

In útsluten applikaasje wurdt om jo tunnel hinne nei it ûnderlizzende netwurk rûte. Dat is it tsjinoerstelde fan blokkearjen: it ferkear ferlit it apparaat noch, mar bûten de ynterface dy't jo beheare. In app yn fjoermuorstyl docht it omkearde. It lit it ferkear fan de applikaasje yn syn tunnel ta en smyt dan de pakketten weil of wegeret se troch te stjoeren, sadat de ynterface itselde is en de rjochting fan it belied omkeard.

It wurk efter dy omkearing is gjin konfiguraasjeflagge. Jo lêze IP-pakketten fan de tunnelbeskriuwer, beslute per stream en stjoere se troch in beskerme socket of smite se weil. Alles wat jo net behannelje, stopet gewoan, en dêrom liket in healôffre tunnel op in brutsen netwurk yn stee fan in wurkjend filter. As jo doel in blokkade is, begreatsje dan pakketbehanneling, in foargrûnttsjinst en in skriftlik belied foar ferkear dat jo net klassifisearje kinne.

Wat brekt as jo it sels bouwe

Android lit oer it generaal ien aktive VPN tagelyk ta, dus jo filtertunnel en in privacy-tunnel konkurrearje om itselde plak, útsein as de produkten keatling stypje. Altyd-aktyf VPN mei ferbiningsblokkade feroaret de wize fan mislearjen op in manier dy't hjir telt: ferkear dat net yn de tunnel komme kin, wurdt weil smiten yn stee fan direkt stjoerd, wat in ûntwerp tsjin lekken wol en wat in debugsesje selden ferwachtet.

Pakket-sichtberens is de twadde falstrik. It oplossen fan de pakketnamme fan in applikaasje kin mislearje mei NameNotFoundException, en op nijere Android-ferzjes hinget de set pakketten dy't jo sjogge ôf fan de queries dy't jo ferklearre hawwe. Behannelje de útsûndering yn stee fan oan te nimmen dat elke namme oplost, en lês de list opnij as applikaasjes ynstallearre of fuortsmiten wurde, yn stee fan har foar altyd yn cache te hâlden.

Beheardere apparaten foegje in tredde eigener ta. In belied foar bedriuwsmobyliteit kin in per-app VPN of in altyd-aktyf profyl ynstelle, en in gewoane applikaasje kin dat net oerskriuwe. Kontrolearje oft it apparaat behearder is foardat jo jo eigen koade debugge, want yn dat gefal is de list dy't jo besykje te feroarjen miskien net bewurkber troch immen dy't de telefoan hâldt.

Test it mei in app dy't jo beheare

Test net mei de app dy't jo besykje te filterjen. Brûk in twadde applikaasje wêrfan jo it netwurkgedrach observearje kinne, en kontrolearje oft har ferkear troch jo tunnel giet wylst dat fan it doel net. As beide binnen bliuwe, wurket it belied en is it doel útsluten; as gjinien fuortgiet, is de tunnel sels ferkeard en is de app-list it probleem net.

Beslute dan hokker fan trije dingen jo eins bouwe. In per-app tunnel is de bouwer-API, mei de list as part fan jo profyl. In apparaatfjoermuorre is pakketbehanneling plus in libbenssyklus dy't jo ferdigenje kinne. It feroarjen fan de VPN fan in oar is hielendal gjin stipe paad, en it earlike antwurd dêrop is dat de ynstelling by dat produkt heart.

Relatearre artikelen