Android VPN по апликацији: искључивање апликације није њено блокирање
Листа по апликацији на екрану припада једном власнику тунела, а искључивање апликације је усмерава око тог тунела, а не ван мреже. Почните ту.
Две особе постављају исто питање и добијају одговоре који се не слажу, јер стоје на различитим местима. Једна има отворен екран системских подешавања VPN-а и уређује листу апликација. Друга пише VpnService.Builder.addDisallowedApplication() у едитору. Обе то називају VPN филтером по апликацији. Само једна од њих поседује контролу коју описује, и ниједна ништа не блокира.
Почните на екрану који корисник види
Отворите Подешавања, пронађите ставку VPN и погледајте везу која је заиста активна. Ако клијент нуди листу по апликацији, та листа припада клијентовом сопственом тунелу. Платформа не објављује општи API преко ког неповезана апликација може да чита или мења избор апликација другог VPN-а, па други програм не може да поправи ту листу за корисника.
Ово је прва рачва у обиласку. Ако инсталирани VPN нема то подешавање, нема шта да се заобиђе кодом: функција недостаје у производу који поседује тунел. Ако га има, исправка је на том екрану и чини је особа која може да га отвори.
Пратите пакет у тунел
Када ваша апликација гради тунел, ствара TUN интерфејс и изјављује чији саобраћај у њега улази. Позиви чланства се дешавају пре успостављања интерфејса, а после тога је скуп правила фиксиран за ту сесију:
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Ти позиви важе само за тунел који је ваша апликација управо створила и ни за шта друго. Нису политика на нивоу уређаја, не трају за друге клијенте и не могу да зађу у туђи VPN. Када позив градитеља баци изузетак јер пакет не може да се разреши, интерфејс се никада не успостави, што је чист, а не тих неуспех.
Зашто је искључивање изгледало као блокада
Искључена апликација се усмерава око вашег тунела на мрежу испод. То је супротно од блокирања: саобраћај и даље напушта уређај, само изван интерфејса који контролишете. Апликација у стилу заштитног зида ради обрнуто. Она пропушта саобраћај апликације у свој тунел и затим одбацује пакете или одбија да их проследи, па је интерфејс исти, а смер политике је обрнут.
Рад иза тог обртања није конфигурациона заставица. Читате IP пакете из дескриптора тунела, одлучујете по току и затим их прослеђујете кроз заштићени сокет или их одбацујете. Све што не обрадите једноставно стане, и зато полудувршен тунел изгледа као покварена мрежа, а не као филтер који ради. Ако је циљ блокада, предвидите обраду пакета, услугу у првом плану и писану политику за саобраћај који не можете да разврстате.
Шта пуца када то градите сами
Android у правилу дозвољава само један активан VPN истовремено, па се ваш тунел за филтрирање и тунел за приватност такмиче за исто место, осим ако производи подржавају уланчавање. VPN који је увек укључен уз блокирање веза мења начин неуспеха на начин који је овде важан: саобраћај који не може да уђе у тунел одбацује се уместо да се пошаље директно, што дизајн за спречавање цурења жели, а сесија отклањања грешака ретко очекује.
Видљивост пакета је друга замка. Разрешавање назива пакета апликације може да падне са NameNotFoundException, а на новијим верзијама Андроида скуп пакета које видите зависи од упита које сте декларисали. Обрадите изузетак уместо да претпоставите да се сваки назив разрешава, и поново прочитајте листу када се апликације инсталирају или уклањају, уместо да је заувек држите у кешу.
Управљани уређаји додају трећег власника. Политика пословне мобилности може да постави VPN по апликацији или профил који је увек укључен, а обична апликација то не може да заобиђе. Проверите да ли је уређај под управљањем пре него што почнете да отклањате грешке у сопственом коду, јер у том случају листу коју покушавате да промените можда не може да уреди нико ко држи телефон.
Тестирајте са апликацијом коју контролишете
Не тестирајте са апликацијом коју покушавате да филтрирате. Употребите другу апликацију чије мрежно понашање можете да посматрате и проверите да ли њен саобраћај излази кроз ваш тунел док саобраћај циља не излази. Ако обе остану унутра, политика ради и циљ је искључен, а ако ниједна не изађе, сам тунел није у реду и листа апликација није проблем.
Затим одлучите коју од три ствари заиста градите. Тунел по апликацији је API градитеља, са листом као делом вашег профила. Заштитни зид уређаја је обрада пакета плус животни циклус који можете да браните. Мењање туђег VPN-а уопште није подржан пут, а искрен одговор тамо је да подешавање припада том производу.