Kaksi ihmistä esittää saman kysymyksen ja saa yhteensopimattomat vastaukset, koska he seisovat eri paikoissa. Yhdellä on auki järjestelmän VPN-asetukset ja hän muokkaa sovellusluetteloa. Toinen kirjoittaa VpnService.Builder.addDisallowedApplication() editorissa. Molemmat kutsuvat sitä sovelluskohtaiseksi VPN-suodattimeksi. Vain toinen heistä omistaa kuvaamansa hallinnan, eikä kumpikaan estä mitään.

Aloita näytöstä, jonka käyttäjä näkee

Avaa Asetukset, etsi VPN-kohta ja katso yhteyttä, joka on todella aktiivinen. Jos asiakas tarjoaa sovelluskohtaisen luettelon, luettelo kuuluu asiakkaan omaan tunneliin. Alusta ei julkaise yleistä API:a, jonka kautta vieras sovellus voisi lukea tai muokata toisen VPN:n sovellusvalintaa, joten toinen sovellus ei voi korjata luetteloa käyttäjän puolesta.

Tämä on läpikäynnin ensimmäinen haarautuma. Jos asennetulla VPN:llä ei ole tällaista asetusta, mitään ei ole kierrettävä koodilla: ominaisuus puuttuu tuotteesta, joka omistaa tunnelin. Jos se on, oikea korjaus tehdään siinä näytössä, ja sen tekee henkilö, joka voi avata sen.

Seuraa paketti tunneliin

Kun oma sovelluksesi rakentaa tunnelia, se luo TUN-rajapinnan ja ilmoittaa, minkä sovellusten liikenne tulee siihen. Jäsenyyskutsut tehdään ennen rajapinnan muodostamista, ja sen jälkeen sääntöjoukko on kiinteä kyseiselle istunnolle:

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

Nuo kutsut koskevat tunnelia, jonka sovelluksesi juuri loi, eivätkä mitään muuta. Ne eivät ole koko laitteen käytäntö, ne eivät säily muille asiakkaille, eivätkä ne voi ulottua toisen VPN:hen. Kun rakentajan kutsu epäonnistuu, koska pakettia ei voi selvittää, rajapintaa ei koskaan muodosteta, mikä on puhdas eikä hiljainen epäonnistuminen.

Miksi pois jättäminen näytti estämiseltä

Pois jätetty sovellus ohjataan tunnelisi ohi taustaverkkoon. Se on estämisen vastakohta: liikenne lähtee yhä laitteesta, vain sinun hallitsemasi rajapinnan ulkopuolella. Palomuurin tapainen sovellus tekee päinvastoin. Se päästää sovelluksen liikenteen tunneliinsa ja sitten hylkää paketit tai kieltäytyy välittämästä niitä, joten rajapinta on sama ja käytännön suunta on käännetty.

Tuon kääntämisen takana oleva työ ei ole asetuslippu. Luet IP-paketteja tunnelin kuvaajasta, päätät virtaa kohden ja joko välität ne suojatun pistokkeen kautta tai pudotat ne. Kaikki, mitä et käsittele, yksinkertaisesti pysähtyy, ja siksi puolivalmis tunneli näyttää rikkinäiseltä verkolta eikä toimivalta suodattimelta. Jos tavoitteesi on estäminen, varaa resursseja pakettien käsittelyyn, etualapalveluun ja kirjalliseen käytäntöön liikenteelle, jota et osaa luokitella.

Mikä hajoaa, kun rakennat sen itse

Android sallii yleensä vain yhden aktiivisen VPN:n kerrallaan, joten suodatustunnelisi ja yksityisyystunneli kilpailevat samasta paikasta, elleivät tuotteet tue ketjutusta. Aina päällä oleva VPN ja yhteyksien estäminen muuttavat epäonnistumisen tapaa tavalla, joka merkitsee tässä: liikenne, joka ei voi päästä tunneliin, pudotetaan sen sijaan, että se lähetettäisiin suoraan, mitä vuotojen estävä suunnittelu haluaa ja mitä virheenjäljitysistunto harvoin odottaa.

Pakettien näkyvyys on toinen ansa. Sovelluksen paketin nimen selvittäminen voi epäonnistua virheeseen NameNotFoundException, ja uudemmissa Android-versioissa näkyvien pakettien joukko riippuu ilmoittamistasi kyselyistä. Käsittele poikkeus sen sijaan, että oletat jokaisen nimen selviävän, ja lue luettelo uudelleen, kun sovelluksia asennetaan tai poistetaan, sen sijaan että välimuistittaisit sen ikuisesti.

Hallitut laitteet lisäävät kolmannen omistajan. Yrityksen liikkuvuuskäytäntö voi asettaa sovelluskohtaisen VPN:n tai aina päällä olevan profiilin, eikä tavallinen sovellus voi ohittaa sitä. Tarkista, onko laite hallittu, ennen kuin alat virheenjäljittää omaa koodiasi, sillä siinä tapauksessa luettelo, jota yrität muuttaa, ei ehkä ole kenenkään puhelinta pitävän muokattavissa.

Testaa sovelluksella, jota hallitset

Älä testaa sovelluksella, jota yrität suodattaa. Käytä toista sovellusta, jonka verkkokäyttäytymistä voit havainnoida, ja tarkista, lähteekö sen liikenne tunnelisi kautta, kun kohteen liikenne ei lähde. Jos molemmat pysyvät sisällä, käytäntö toimii ja kohde on jätetty pois; jos kumpikaan ei lähde, tunneli itse on väärin eikä sovellusluettelo ole ongelma.

Päätä sitten, mitä kolmesta asiasta oikeastaan rakennat. Sovelluskohtainen tunneli on rakentajan API, ja luettelo on osa profiiliasi. Laitekohtainen palomuuri on pakettien käsittelyä plus elinkaari, jonka voit puolustaa. Jonkun toisen VPN:n muuttaminen ei ole tuettu polku lainkaan, ja rehellinen vastaus siihen on, että asetus kuuluu sille tuotteelle.

Aiheeseen liittyvät artikkelit