VPN bawat app sa Android: ang pagbubukod sa app ay hindi pag-block dito
Ang listahan ng bawat app sa screen ay pag-aari ng isang may-ari ng tunnel, at ang pagbubukod sa app ay dumadaan ito sa paligid ng tunnel na iyon, hindi palabas ng network. Magsimula doon.
Dalawang tao ang nagtatanong ng parehong bagay at nakakakuha ng mga sagot na hindi magkatugma, dahil nakatayo sila sa magkaibang lugar. Bukas ang screen ng system VPN settings ng isa at nag-e-edit siya ng listahan ng apps. Ang isa ay nagsusulat ng VpnService.Builder.addDisallowedApplication() sa isang editor. Tinatawag nilang dalawa itong VPN filter bawat app. Isang tao lamang sa kanila ang may-ari ng kontrol na inilalarawan nila, at wala silang binoblock.
Magsimula sa screen na nakikita ng user
Buksan ang Settings, hanapin ang entry ng VPN at tingnan ang koneksyon na talagang aktibo. Kung may inaalok na listahan bawat app ang client, pag-aari ng sariling tunnel ng client ang listahang iyon. Hindi naglalathala ang platform ng pangkalahatang API kung saan makakabasa o makakapagbago ang isang walang kaugnayang app ng pagpili ng apps ng ibang VPN, kaya hindi kayang ayusin ng pangalawang app ang listahang iyon para sa user.
Ito ang unang sangandaan sa paglalakbay. Kung wala ang setting na iyon sa naka-install na VPN, wala nang iba pang maiiwasan sa code: wala ang tampok sa produktong may-ari ng tunnel. Kung mayroon, nasa screen na iyon ang tamang pagwawasto, at ginagawa ito ng taong kayang buksan ito.
Sundan ang packet papasok sa tunnel
Kapag gumagawa ng tunnel ang sarili mong app, gumagawa ito ng TUN interface at nagpapahayag kung kaninong trapiko ng apps ang pumapasok dito. Nagaganap ang membership calls bago maitatag ang interface, at pagkatapos ay nakapirmi ang rule set para sa session na iyon:
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 hereAng mga tawag na iyon ay para lamang sa tunnel na kakagawa lang ng app mo at wala nang iba. Hindi ito patakaran ng buong device, hindi ito nananatili para sa ibang client, at hindi ito makakaabot sa VPN ng iba. Kapag naghagis ng exception ang tawag ng builder dahil hindi maresolba ang package, hindi kailanman naitatatag ang interface, na isang malinis at hindi tahimik na pagkabigo.
Bakit mukhang block ang pagbubukod
Ang isang ibinukod na app ay dinadaan sa paligid ng tunnel mo papunta sa nasa ilalim na network. Kabaligtaran iyon ng pag-block dito: lumalabas pa rin ang trapiko sa device, sa labas lamang ng interface na kinokontrol mo. Ang app na parang firewall ay kabaligtaran ang ginagawa. Pinapasok nito ang trapiko ng app sa sariling tunnel at pagkatapos ay itinatapon ang mga packet, o tumatangging ipasa ang mga ito, kaya pareho ang interface at baliktad ang direksyon ng patakaran.
Ang trabaho sa likod ng pagbabaliktad na iyon ay hindi isang configuration flag. Nagbabasa ka ng IP packets mula sa tunnel descriptor, nagpapasya bawat flow, at pagkatapos ay ipinapasa ang mga ito sa protektadong socket o itinatapon. Anumang hindi mo hinahawakan ay tumitigil lang, at kaya ang kalahating tapos na tunnel ay mukhang sirang network at hindi gumaganang filter. Kung block ang layunin mo, maglaan ng badyet para sa packet handling, serbisyong pangharap at nakasulat na patakaran para sa trapikong hindi mo mauri.
Ano ang nasisira kapag ikaw mismo ang gumawa
Karaniwang isang aktibong VPN lamang ang pinapayagan ng Android sa isang pagkakataon, kaya nag-aagawan ng parehong puwang ang filtering tunnel mo at isang privacy tunnel maliban kung sinusuportahan ng mga produkto ang chaining. Ang laging bukas na VPN na may block sa connections ay nagbabago ng paraan ng pagkabigo sa paraang mahalaga dito: ang trapikong hindi makapasok sa tunnel ay itinatapon sa halip na direktang ipadala, na siyang gusto ng disenyong laban sa pagtagas at bihirang inaasahan ng sesyon ng debugging.
Ang visibility ng packet ang pangalawang bitag. Maaaring mabigo ang pagresolba ng pangalan ng package ng app sa NameNotFoundException, at sa mas bagong bersyon ng Android ang set ng package na nakikita mo ay nakadepende sa mga query na idineklara mo. Pangasiwaan ang exception sa halip na ipagpalagay na nareresolba ang bawat pangalan, at muling basahin ang listahan kapag may naka-install o natanggal na app sa halip na i-cache ito magpakailanman.
Nagdadagdag ng ikatlong may-ari ang mga pinamamahalaang device Maaaring magtakda ng VPN bawat app o laging bukas na profile ang patakaran ng mobility ng enterprise, at hindi ito maaaring lampasan ng ordinaryong app. Tingnan kung pinamamahalaan ang device bago i-debug ang sarili mong code, dahil sa ganoong kaso ang listahang sinusubukan mong baguhin ay maaaring hindi ma-edit ng sinumang humahawak ng telepono.
Subukan ito sa app na kontrolado mo
Huwag subukan sa app na sinusubukan mong i-filter. Gumamit ng pangalawang app na mapagmamasdan mo ang gawi sa network, at tingnan kung lumalabas ang trapiko nito sa tunnel mo habang ang sa target ay hindi. Kung parehong nananatili sa loob, gumagana ang patakaran at ibinukod ang target; kung wala ni isang lumalabas, mali ang tunnel mismo at ang listahan ng app ang hindi ang problema.
Pagkatapos ay magpasya kung alin sa tatlong bagay ang talagang ginagawa mo. Ang tunnel bawat app ay ang API ng builder, kasama ang listahan bilang bahagi ng profile mo. Ang firewall ng device ay packet handling at isang lifecycle na kayang ipagtanggol mo. Ang pagbabago ng VPN ng iba ay hindi suportadong landas, at ang tapat na sagot doon ay pag-aari ng produktong iyon ang setting.