Briseann tollán scoilte in aip VpnService ag cúpla áit ar leith, agus tá an deisiú difriúil do gach ceann. Ní thaispeánann an cliant ach aon cheann amháin a mhainneann, mar sin is é an chéad obair ná a fháil amach cén teorainn a bhuailfidh tú: na róid a fuair an builder, an proxy nach féidir leat a fhíordheimhniú, an réiteoir nár fhógair tú ach amháin, nó an liosta aipeanna a chuireann an t-ardán i bhfeidhm in aghaidh an úsáideora. Sin go díreach an fáth a gcoinním seiceáil ceithre chéim. Ritheann sé san ord thíos agus stopann sé ag an gcéad mhainneachtain.

Deimhnigh cad a thug an builder don ardán

Is liosta dearbhuithe é VpnService.Builder. Filleann establish() ParcelFileDescriptor d'idirphlé bhréige, agus ní sheolann an t-ardán chuig an tuairisceoir sin ach an trácht a thagann le réimíreanna addAddress agus addRoute; insíonn addDnsServer do chliaint cén réiteoir le ceistiú. Ní shroicheann ceann scríbe lasmuigh de gach réimír a chuireas tú riamh d'aip, cibé rud a gheallann an t-idirphlé. Míníonn an t-aon fhíric sin an chuid is mó de na tuairiscí faoi thollán scoilte briste sula n-athraítear aon chód.

Logáil na liostaí seoladh, ród agus DNS a chuir do builder le chéile, agus cuir iad i gcomparáid leis na cinn scríbe a mhainneann. Is minicí go mór /32 ar iarraidh d'óstach bainistíochta ná tollán briste. Má tá an liosta ceart, téigh ar aghaidh; mura bhfuil, is saothar amú an chuid eile den tseicliosta.

Níl excludeRoute ann ach ó API 33

Is é an t-eisiamh bunaithe ar cheann scríbe an t-iarratas is minicí a chríochnaíonn mar shnáithe tacaíochta. Tháinig builder.excludeRoute(IpPrefix) in API 33; roimhe sin, is é an t-aon chomhfhogasacht a fhaigheann tacaíocht róid a chur le gach rud seachas an réimír eisiata, rud a chiallaíonn go gcaithfidh tú na réimíreanna comhlántacha a ríomh tú féin. Níl an dá ghlao ina n-íomhánna scátháin: baineann ceann amháin den tacar ród idirphlé, tógann an ceann eile an tacar ón tús, agus caithfidh nó neamhshuimeoidh gléas níos sine glao nach aithníonn sé. Déan brainse ar Build.VERSION.SDK_INT agus tástáil an dá chonair ar chrua-earraí fíor.

Nuair a ríomhann tú comhlántach, féach ar ailíniú na réimíreach. Teastaíonn ó eisiamh /24 laistigh de ród /16 na réimíreanna clúdacha a chuireann síos i ndáiríre ar an gcuid atá fágtha, ní /8 amháin atá míchumtha. Logáil an liosta deiridh agus deimhnigh go réitítear an t-óstach eisiata fós trí chonair lasmuigh den tollán.

Ní féidir dintiúir an proxy a chur in iúl

Treoraíonn setHttpProxy(ProxyInfo) an t-idirphlé chuig proxy HTTP nó SOCKS, agus is féidir le URL PAC roghnú eatarthu de réir ceann scríbe. Ní iompraíonn ProxyInfo ná formáid PAC ainm úsáideora agus focal faire, mar sin fanann proxy a éilíonn fíordheimhniú lasmuigh d'API an ardáin. Ionchorpraíonn aipeanna a dteastaíonn ceann uathu cruach spáis úsáideora, tun2socks nó inneall den sórt sin, agus freagraíonn siad féin don dúshlán 407.

Tá iarmhairtí ag an rogha sin. Ní fheiceann cruach spáis úsáideora ach an trácht a sheolann tú chuici, mar sin caithfidh sí maireachtáil laistigh den teorainn tuairisceora chéanna, agus faigheann sí an riachtanas protect() céanna dá soicéad uplink féin. Fág protect() ar lár agus gabhann an tollán a iompar féin, rud a fheictear mar chroitheadh láimhe a theipíonn tar éis an chéad phaicéid. Tástáil i gcoinne proxy a éilíonn dintiúir, mar go n-éiríonn le proxy oscailte ar chonair an ardáin agus ní chruthaíonn sé aon rud.

Is dearbhuithe freisin liostaí in aghaidh an aip agus DNS

Tá addAllowedApplication agus addDisallowedApplication araon ag Builder, agus easaontaíonn siad lena chéile: caitheann glao ar an dá rud eisceacht. Cibé acu, cuirtear an liosta i bhfeidhm in aghaidh an úsáideora ag socrú an idirphlé, mar sin rialaítear aip de phróifíl oibre ag tollán na próifíle oibre seachas do cheannsa. Rud nach dtugann aon API duit is ea smacht ar chinneadh aip eile: ní féidir leat pacáiste a bhrú isteach i do thollán ón taobh amuigh, agus ní féidir leat VPN atá gníomhach cheana a dhúnadh ná a athchumrú.

Leanann DNS an patrún céanna. Fógraíonn addDnsServer seoladh réiteora; ní ligeann sé d'aip freagraí a thabhairt ar cheisteanna. Más mian leat ainmneacha a réiteach tú féin, rith réiteoir agus seol a sheoladh isteach sa tollán. Is féidir le haipeanna a úsáideann DoT nó DoH chuig óstainm seasta an seoladh a d'fhógair tú a sheachaint, mar sin caith le réiteach ainmneacha mar iarracht is fearr mura ngabhann tú an chonair cheiste freisin.

Manifest, always-on agus an tástáil ceithre chéim

Dearbhaítear incháilitheacht sa mhanifest: BIND_VPN_SERVICE, an scagaire intent android.net.VpnService agus seirbhís tulra má chaithfidh an tollán maireachtáil sa chúlra. Éilíonn always-on VPN onRevoke glan freisin, mar go nglaonn an córas air nuair a athraíonn an t-úsáideoir socruithe nó nuair a ghlacann aip eile smacht.

Rith na seiceálacha in ord agus stop ag an gcéad mhainneachtain. Ar dtús, dumpáil na liostaí seoladh, ród agus DNS a tugadh don builder. Ar an dara dul síos, deimhnigh gur fhill establish() tuairisceoir agus go bhfuil an soicéad iompair cosanta. Ar an tríú dul síos, iarr ceann scríbe amháin laistigh de réimír atá san áireamh agus ceann eile laistigh de réimír eisiata. Ar an gceathrú dul síos, seiceáil cén réiteoir a d'fhreagair i ndáiríre trí óstainm a cheistiú nach féidir ach le do réiteoir féin a réiteach.

Ní chruthaíonn croitheadh láimhe críochnaithe aon cheann de na céimeanna níos déanaí. Déanann gach seiceáil ciseal amháin a leithlisiú, mar sin ní deir rath ag céim a dó aon rud faoi chéim a ceathair.

Liostaíonn tagairt VpnService.Builder dromchla iomlán an builder. Is é aon rud a theastaíonn uait thairis sin API eile, aip eile nó do chruach spáis úsáideora féin, agus is cinneadh dearaidh é sin seachas fabht tolláin scoilte.

Ailt ghaolmhara