Две лица го поставуваат истото прашање и добиваат некомпатибилни одговори, затоа што стојат на различни места. Едниот има отворен екранот со системски 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, а на понови верзии на Android множеството пакети што ги гледате зависи од барањата што сте ги изјавиле. Обработете го исклучокот наместо да претпоставите дека секое име се решава, и прочитајте го списокот повторно кога апликации се инсталираат или отстрануваат, наместо да го чувате во кеш засекогаш.

Управуваните уреди додаваат трет сопственик. Политика за корпоративна мобилност може да постави VPN по апликација или профил што е секогаш вклучен, а обична апликација не може да го надмине тоа. Проверете дали уредот е управуван пред да ги отстранувате грешките во сопствениот код, зашто во тој случај списокот што се обидувате да го смените можеби не е уредлив за никого што го држи телефонот.

Тестирајте со апликација што ја контролирате

Не тестирајте со апликацијата што се обидувате да ја филтрирате. Користете втора апликација чие мрежно однесување можете да го набљудувате и проверете дали нејзиниот сообраќај излегува низ вашиот тунел, додека сообраќајот на целта не излегува. Ако двете останат внатре, политиката работи и целта е исклучена; ако ниту една не излезе, самиот тунел е погрешен и списокот апликации не е проблемот.

Потоа одлучете кое од трите нешта навистина го градите. Тунелот по апликација е API на градителот, со списокот како дел од вашиот профил. Огнениот ѕид на уредот е обработка на пакети плус животен циклус што можете да го одбраните. Менувањето туѓ VPN воопшто не е поддржан пат, а чесниот одговор таму е дека поставката му припаѓа на тој производ.

Поврзани статии