Divi cilvēki uzdod vienu un to pašu jautājumu un saņem savstarpēji nesavienojamas atbildes, jo viņi stāv dažādās vietās. Vienam ir atvērts sistēmas VPN iestatījumu ekrāns, un viņš rediģē lietotņu sarakstu. Otrs raksta VpnService.Builder.addDisallowedApplication() redaktorā. Abi to sauc par VPN filtru pa lietotnēm. Tikai vienam no viņiem pieder viņa aprakstītā vadība, un neviens no viņiem neko nebloķē.

Sāc ar ekrānu, ko redz lietotājs

Atver Iestatījumus, atrodi VPN ierakstu un apskati savienojumu, kas patiešām ir aktīvs. Ja klients piedāvā sarakstu pa lietotnēm, šis saraksts pieder paša klienta tunelim. Platforma nepublicē vispārīgu API, ar kuru nesaistīta lietotne varētu lasīt vai mainīt citas VPN lietotņu izvēli, tāpēc otra lietotne nevar salabot šo sarakstu lietotāja vietā.

Šis ir pirmais atzars ceļā. Ja instalētajai VPN nav šāda iestatījuma, nav ko apiet ar kodu: funkcija iztrūkst produktā, kuram pieder tunelis. Ja tā ir, pareizais labojums ir šajā ekrānā, un to veic cilvēks, kurš to var atvērt.

Seko pakešu plūsmai tunelī

Kad tava lietotne būvē tuneli, tā izveido TUN saskarni un paziņo, kuru lietotņu trafiks tajā ieplūst. Dalības izsaukumi notiek pirms saskarnes izveides, un pēc tam noteikumu kopa šai sesijai ir fiksēta:

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

Šie izsaukumi attiecas tikai uz tuneli, ko tava lietotne tikko izveidoja, un ne uz ko citu. Tie nav visaptveroša ierīces politika, tie nepastāv citiem klientiem, un tie nevar iekļūt kāda cita VPN. Kad būvētāja izsaukums izmet izņēmumu, jo pakotni nevar atrisināt, saskarne nekad netiek izveidota, kas ir tīrs, nevis kluss neizdošanās gadījums.

Kāpēc izslēgšana izskatījās pēc bloķēšanas

Izslēgta lietotne tiek virzīta ap tavu tuneli uz apakšējo tīklu. Tas ir pretējs bloķēšanai: trafiks joprojām iziet no ierīces, tikai ārpus saskarnes, kuru tu kontrolē. Ugunsmūra stila lietotne dara pretējo. Tā ielaidīs lietotnes trafiku savā tunelī un pēc tam izmetīs paketes vai atteiksies tās pārsūtīt, tāpēc saskarne ir tā pati, bet politikas virziens ir apgriezts.

Darbs aiz šīs apgriešanas nav konfigurācijas karodziņš. Tu lasi IP paketes no tuneļa apraksta, izlem par plūsmu un pēc tam tās pārsūti caur aizsargātu ligzdu vai izmet. Viss, ko neapstrādā, vienkārši apstājas, un tāpēc pusgatavs tunelis izskatās pēc salauzta tīkla, nevis pēc strādājoša filtra. Ja mērķis ir bloķēšana, ieplāno pakešu apstrādi, priekšplāna pakalpojumu un rakstisku politiku trafikam, ko nevari klasificēt.

Kas salūzt, kad to būvē pats

Android parasti atļauj tikai vienu aktīvu VPN vienlaikus, tāpēc tavs filtrējošais tunelis un privātuma tunelis sacenšas par vienu un to pašu vietu, ja vien produkti neatbalsta ķēdēšanu. Vienmēr ieslēgts VPN ar savienojumu bloķēšanu maina neizdošanās veidu tā, kas šeit ir svarīgi: trafiks, kas nevar iekļūt tunelī, tiek izmests, nevis nosūtīts tieši, un to vēlas noplūdes novēršanas dizains un to atkļūdošanas sesija reti gaida.

Pakešu redzamība ir otrs slazds. Lietotnes pakotnes nosaukuma atrisināšana var neizdoties ar NameNotFoundException, un jaunākās Android versijās redzamo pakešu kopa ir atkarīga no vaicājumiem, ko esi deklarējis. Apstrādā izņēmumu, nevis pieņem, ka katrs nosaukums atrisinās, un pārlasi sarakstu, kad lietotnes tiek instalētas vai noņemtas, nevis glabā to kešatmiņā mūžīgi.

Pārvaldītās ierīces pievieno trešo īpašnieku. Uzņēmuma mobilitātes politika var iestatīt VPN pa lietotnēm vai vienmēr ieslēgtu profilu, un parasta lietotne to nevar ignorēt. Pirms atkļūdo savu kodu, pārbaudi, vai ierīce ir pārvaldīta, jo tādā gadījumā sarakstu, ko mēģini mainīt, var nespēt rediģēt neviens, kam telefonu rokās.

Pārbaudi to ar lietotni, kuru kontrolē

Nepārbaudi ar lietotni, kuru mēģini filtrēt. Izmanto otru lietotni, kuras tīkla uzvedību vari novērot, un pārbaudi, vai tās trafiks iziet caur tavu tuneli, kamēr mērķa trafiks neiziet. Ja abi paliek iekšā, politika darbojas un mērķis ir izslēgts; ja neviens neiziet, pats tunelis ir nepareizs un lietotņu saraksts nav problēma.

Tad izlem, kuru no trim lietām tu patiešām būvē. Tunelis pa lietotnēm ir būvētāja API, ar sarakstu kā tavas profila daļu. Ierīces ugunsmūris ir pakešu apstrāde plus dzīves cikls, ko vari aizstāvēt. Cita VPN maiņa nemaz nav atbalstīts ceļš, un godīgā atbilde tur ir, ka iestatījums pieder tam produktam.

Saistītie raksti