Du žmonės užduoda tą patį klausimą ir gauna nesuderinamus atsakymus, nes stovi skirtingose vietose. Vienas turi atidarytą sistemos VPN nustatymų ekraną ir redaguoja programų sąrašą. Kitas rašo VpnService.Builder.addDisallowedApplication() redaktoriuje. Abu tai vadina VPN filtru pagal programą. Tik vienas jų valdo tai, ką aprašo, ir nė vienas nieko neblokuoja.

Pradėkite nuo ekrano, kurį mato naudotojas

Atidarykite Nustatymus, raskite VPN įrašą ir pažiūrėkite į jungtį, kuri iš tikrųjų aktyvi. Jei klientas siūlo sąrašą pagal programą, tas sąrašas priklauso paties kliento tuneliui. Platforma neskelbia bendros API, per kurią nesusijusi programa galėtų skaityti ar keisti kitos VPN programų pasirinkimą, todėl antra programa negali sutvarkyti to sąrašo už naudotoją.

Tai pirmoji vingio šaka. Jei įdiegta VPN neturi tokio nustatymo, nėra ko apeiti kodu: funkcijos nėra produkte, kuriam priklauso tunelis. Jei turi, tinkamas pataisymas yra tame ekrane, ir jį atlieka žmogus, galintis jį atidaryti.

Sekite paketą į tunelį

Kai jūsų programa stato tunelį, ji sukuria TUN sąsają ir deklaruoja, kurių programų srautas į ją patenka. Narystės kvietimai įvyksta prieš sukuriant sąsają, o po to taisyklių rinkinys tai sesijai yra fiksuotas:

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

Tie kvietimai galioja tik tuneliui, kurį jūsų programa ką tik sukūrė, ir niekam kitam. Jie nėra viso įrenginio politika, jie neišlieka kitiems klientams ir negali patekti į kito žmogaus VPN. Kai kūrėjo kvietimas meta išimtį, nes paketo negalima išspręsti, sąsaja niekada nesukuriama, ir tai yra švari, o ne tyli klaida.

Kodėl išskyrimas atrodė kaip blokavimas

Išskirta programa nukreipiama aplink jūsų tunelį į apatinį tinklą. Tai yra priešingybė blokavimui: srautas vis dar išeina iš įrenginio, tik už sąsajos, kurią kontroliuojate. Ugniasienės stiliaus programa daro atvirkščiai. Ji įleidžia programos srautą į savo tunelį ir tada išmeta paketus arba atsisako juos persiųsti, todėl sąsaja ta pati, o politikos kryptis apversta.

Darbas už to apvertimo nėra konfigūracijos vėliavėlė. Jūs skaitote IP paketus iš tunelio aprašo, sprendžiate pagal srautą ir tada juos persiunčiate per apsaugotą lizdą arba išmetate. Viskas, ko neapdorojate, tiesiog sustoja, ir todėl pusiau baigtas tunelis atrodo kaip sugedęs tinklas, o ne kaip veikiantis filtras. Jei tikslas yra blokavimas, numatykite paketų apdorojimą, pirmosios eilės paslaugą ir rašytinę politiką srautui, kurio negalite klasifikuoti.

Kas lūžta, kai statote patys

Android paprastai leidžia tik vieną aktyvų VPN vienu metu, todėl jūsų filtruojantis tunelis ir privatumo tunelis konkuruoja dėl tos pačios vietos, nebent produktai palaiko grandininį jungimą. Visada įjungtas VPN su jungčių blokavimu keičia nesėkmės būdą taip, kas čia svarbu: srautas, kuris negali patekti į tunelį, išmetamas, o ne siunčiamas tiesiogiai, ir to nori nuotėkio prevencijos dizainas, o derinimo sesija to retai tikisi.

Paketų matomumas yra antras spąstas. Programos paketo pavadinimo išsprendimas gali nepavykti su NameNotFoundException, o naujesnėse Android versijose matomų paketų rinkinys priklauso nuo jūsų deklaruotų užklausų. Apdorokite išimtį, o ne manykite, kad kiekvienas pavadinimas išsprendžiamas, ir perskaitykite sąrašą iš naujo, kai programos įdiegiamos ar pašalinamos, o ne saugokite jį podėlyje amžinai.

Valdomi įrenginiai prideda trečią savininką. Įmonės mobilumo politika gali nustatyti VPN pagal programą arba visada įjungtą profilį, o įprasta programa negali to apeiti. Prieš derindami savo kodą patikrinkite, ar įrenginys valdomas, nes tokiu atveju sąrašo, kurį bandote keisti, gali negalėti redaguoti niekas, laikantis telefoną.

Išbandykite su programa, kurią kontroliuojate

Neišbandykite su programa, kurią bandote filtruoti. Naudokite antrą programą, kurios tinklo elgseną galite stebėti, ir patikrinkite, ar jos srautas išeina per jūsų tunelį, o tikslinės ne. Jei abi lieka viduje, politika veikia ir tikslas išskirtas; jei nė viena neišeina, pats tunelis neteisingas, o programų sąrašas nėra problema.

Tada nuspręskite, kurią iš trijų dalykų iš tikrųjų statote. Tunelis pagal programą yra kūrėjo API, o sąrašas yra jūsų profilio dalis. Įrenginio ugniasienė yra paketų apdorojimas ir gyvavimo ciklas, kurį galite apginti. Kito žmogaus VPN keitimas visiškai nėra palaikomas kelias, ir sąžiningas atsakymas ten yra toks, kad nustatymas priklauso tam produktui.

Susiję straipsniai