Ekkert í VpnService grípur umferð af sjálfu sér. Það biður kerfið um tun-viðmót, afhendir því viðmóti mengi af vistföngum og leiðum, og frá þeirri stundu afritar kjarninn hvern pakka sem passar við þessar leiðir í skráarlysingu sem appið getur lesið. Kóði appsins sér aldrei pakkana sem leiðirnar völdu ekki, svo umfang göngs er spurning um leiðatöflu áður en það er forritunarsurning. Þess vegna getur sama þjónustuútfærslan gleypt hvert flæði í einum síma og aðeins hluta í öðrum, og þess vegna lagar viðbót leiðar stundum göng sem virtust brotin. Það sem þú færð er það sem þú lýstir yfir, að frádregnu öllu sem smiðurinn neitaði þegjandi.

Leiðir ráða hvaða pakkar berast

Builder.addRoute(prefix, prefixLength) setur forskeyti í leiðatöflu VPN-netkerfisins. Kerfið meðhöndlar það net sem sjálfgefið fyrir appin í umfanginu, svo færslur þess eru skoðaðar áður en sjálfgefna leið líkamlega netsins kemur og samsvarandi forskeyti nægir til að beina flæði annað. Þess vegna tekur leið fyrir 0.0.0.0/0 IPv4 að fullu, þar á meðal prentarann, cast-markið og stjórnborð beinisins.

Viðskiptavinir sem vilja þá þekju án þess að eyða líkamlegu sjálfgefnu færslunni nota í staðinn parið 0.0.0.0/1 og 128.0.0.0/1. Tvær sértækari leiðir vinna sjálfgefna leið, saman spanna þær allt vistfangarýmið, og eigin sjálfgefna færsla símans verður eftir í töflunni fyrir sætin sem eru enn bundin líkamlega netinu.

Vistföng og DNS-færslur koma frá sama smiði og svara annarri spurningu. addAddress gefur viðmótinu vistfang með forskeytislengd, og addDnsServer setur upp leysi sem appin í umfanginu munu spyrja í gegnum viðmótið. Báðar fjölskyldur geta setið á einu viðmóti, svo mengi leiða aðeins fyrir IPv4 við hlið IPv6-vistfangs er stilling sem les rétt og lekur samt. Ef þú beinir fjölskyldu sem viðmótið hefur ekkert vistfang í hefur kjarninn ekkert upprunavistfang fyrir þá pakka og þeir birtast aldrei við lýsinguna.

Hvað skilar establish()

establish() skilar ParcelFileDescriptor, eða null þegar appið er ekki heimilað. Null er samþykkisástand en ekki netvilla: VpnService.prepare() hlýtur þegar að hafa skilað null, eða notandinn hlýtur að hafa samþykkt kerfisskilaboðin fyrir kallið. Hægt er að afturkalla samþykki meðan þjónustan keyrir, og viðmótið lokast undir þér án nokkurs bakkalls inn í lestrarlotuna þína.

Lýsingin er ekki blokkir nema þú segir annað, svo lestur snýr strax aftur án gagna í stað þess að parka þræðinum. Lota skrifuð fyrir blokkir sæti brennir einn kjarna, og lota sem lítur á tóman lestur sem banvænan rífur göngin í tómri sekúndu. Builder.setBlocking(true) breytir þeirri hegðun, og verðið er þráður sem bíður inni í lestrinum.

Leiðar- og vistfangsrök eru staðfest sem LinkAddress-gildi, og multicast-áfangastaðir eins og 224.0.0.0/4 eru hafnað beint. Punktur-til-punktur tun-viðmót hefur heldur ekkert broadcast-lén, svo multicast-uppgötvun í gegnum það krefst annarrar hönnunar en einnar leiðar til viðbótar. Tilvísunin VpnService.Builder er listinn sem þarf að athuga áður en þú ályktar að kalli hafi verið hunsað.

Umfangið á hverja app þrengir mengið, ekki göngin

Frá API 21 tekur smiðurinn addAllowedApplication og addDisallowedApplication, og listarnir tveir útiloka hvorn annan innan eins smiðs. Heimildalisti lætur göngin vera til fyrir þá pakka á meðan allt annað heldur líkamlega netinu; bannlisti grípur allt nema tilgreindu pakkana, sem er það sem viðskiptavinur býður sem skipt göng. Fyrir API 21 er ekkert vettvangsferli yfirleitt, og hegðun á hverja app kom frá þriðja aðila viðskiptavinum sem sigtuðu eftir UID inni í eigin framsendingaraðila. Mismunurinn skiptir máli þegar þú kembir, því göng á hverja app með heimildalista upp á einn pakka framleiðir nánast enga umferð og það er rétt hegðun, ekki brotin leið.

Hvað sem umfangið er, má sætið sem appið þitt opnar að VPN-þjóninum ekki ferðast í gegnum göngin sem það er að byggja. VpnService.protect(socket) bindur það sæti við undirliggjandi netið svo pakkar þess sleppi tun-tækinu. Sleppir þú kallinu gleypir viðmótið, sem átti að reisa handabandið, það.

VpnService.setUnderlyingNetworks lokar hringnum með því að segja kerfinu hvaða líkamlega net ber göngin. Það gildi ræður því hvernig VPN tilkynnir tengingu til annarra appa, og null eða úrelt gildi er algeng orsök tengdra ganga sem afgangur símans meðhöndlar sem ótengd. Uppfærðu það þegar undirliggjandi net breytist, ekki aðeins við ræsingu.

Prófsummur og MTU: þar sem rétt leið mistekst samt

Þegar pakkar berast ráða tvö atriði á pakkastigi hvort eitthvað virki frá enda til enda. Það fyrra er upprunavistfangið: með nokkrum viðmótsvistföngum getur kjarninn sent pakka sem bera það fyrsta, svo framsendingaraðili sem endurskrifar hausa verður að laga vistfangið og prófsummuna sem nær yfir það.

Það síðara er umfang prófsummunnar. Þegar appið byggir TCP- eða UDP-pakka sjálft nær prófsumman yfir gervihaus sem heldur upprunavistfanginu, áfangavistfanginu, samskiptareglunúmerinu og lengd flutningsins, og að sleppa einhverju þeirra gefur pakka sem berast og er hent. Sú bilun lítur út eins og tímamörk eftir svar sem kemur aldrei, sem sendir flesta aftur að leiðunum. setMtu festir MTU viðmótsins, og hver lestur skilar nákvæmlega einum heilum IP-pakka, svo biðminni skrifuð fyrir bætastrauma mun sundra greiningunni þinni en ekki pakkanum.

Staðfestingarumferð sem aðgreinir lögin

Til að finna hvar umfangið fór úrskeiðis skaltu prófa lögin í röð. Spurðu tækið hvaða leiðir VPN-netið hefur í raun, athugaðu svo hvort flæði að þekktu vistfangi birtist sem lestur við lýsinguna, athugaðu svo hvort pakkinn sem framsendingaraðilinn þinn sendir sé vel mótaður. Leiðarvandamál sýnir ekkert við lýsinguna, á meðan prófsummuvandamál sýnir pakka sem berst og hverfur.

Ef ekkert nær lýsingunni er grunurinn leiðamengið en ekki lesarinn: staðfestu forskeytin, staðfestu að vistfang sé í sömu fjölskyldu, og staðfestu að appið sé innan umfangsins sem þú settir. Ef pakkar ná lýsingunni en ekkert kemur til baka skaltu skoða protect() og gildi undirliggjandi nets áður en þú snertir leið aftur. Ef fjarlæga hliðin tilkynnir gallaða pakka eru prófsumman og MTU-inn staðirnir til að skoða. Ein rannsókn á hvert lag sparar síðdegi af getgátum.

Tengdir greinar