Is féidir le dhá chonair comhéadan IP a chur os comhair aip Android, agus críochnaíonn an dá cheann ag an gcineál céanna tuairisceora comhaid le húinéirí an-difriúla. Téann ceann trí VpnService agus a thógálaí, agus téann an ceann eile trí bhlaosc root agus /dev/net/tun. Is paicéad amach gach léamh ar an tuairisceoir sin agus is paicéad isteach gach scríobh. Is é a dhealaíonn na conairí cé a bhfuil an pholasaí aige, cé a mhaireann nuashonrú OS, agus cé mhéad den tábla ródaithe is féidir leat a bhaint.

Tóg conair an ardáin mura féidir leat an rud sonrach a ainmniú a dhiúltaíonn sé a dhéanamh. Is gnách gurb é TAP an diúltú sin, gabháil lasmuigh de do thacair aipeanna féin, nó riail ródaithe nach nochtann an creat go deo.

Ar chonair an ardáin dearbhaíonn tú rún in ionad orduithe. Soláthraíonn tú ar a laghad seoladh amháin, na róid a theastaíonn uait, freastalaithe DNS agus liosta aipeanna roghnach, agus ansin déanann seirbhís chórais Android an socrú pribhléideach faoina féiniúlacht féin. Ní fhoghlaimíonn tú ainm an chomhéadain roimh ré agus ní eisíonn tú an ioctl a chruthaíonn é, agus sin é an pointe.

Dhá bhealach chun comhéadan IP a fháil

Is é conair root an t-oideas is sine. Osclaíonn tú /dev/net/tun, glaonn tú TUNSETIFF le IFF_TUN, ardaíonn tú an comhéadan le ip link, agus cuireann tú seoltaí agus róid leis de láimh. Is ort féin gach céim a dhéanamh i gceart, lena n-áirítear na cinn a láimhseálfadh an creat go ciúin. Tugann ród amháin atá ar iarraidh an tuarascáil úsáideora chéanna le freastalaí marbh.

Ní bhíonn an dífhabhtú difriúil ar chor ar bith ón socrú. Ar chonair root bíonn an comhéadan ann nó thug do ioctl earráid ar ais ar féidir leat í a léamh go díreach. Ar chonair an ardáin ní bhíonn an comhéadan ann ach amháin tar éis d'establish() éirí go maith, mar sin tagann teip mar eisceacht nó mar thuairisceoir null seachas mar nód gléis ar féidir leat póiréad a dhéanamh ann.

Cad a thugann establish() ar ais i ndáiríre

Tá trí thoradh ar Builder.establish() agus teastaíonn trí fhreagra éagsúla uathu. Ciallaíonn tuairisceoir go bhfuil an comhéadan cumraithe agus gur leatsa é le húsáid, ciallaíonn null nár éirigh leis an iarratas, agus ciallaíonn eisceacht a caitheadh gur dhiúltaigh seirbhís an chórais é. Is é null agus rath a chur le chéile in aon boolean an bealach is coitianta a thuairiscíonn aip tollán atá ag obair nach n-iompraíonn paicéad riamh. Luann tagairt Builder an ceanglas seolta, agus is fiú í a léamh sula gcuireann tú an locht ar an bhfreastalaí.

Is é an tuairisceoir a shocraíonn na treoracha, ní do phrótacal. Tugann léamha duit paicéid amach atá roghnaithe cheana don VPN, agus insteallann scríbhinní paicéid isteach ar ais sa chomhéadan. Is é do iompróir féin a chriptíonn, a fhíoraíonn agus a chuireann fráma ar na paicéid sin, mar stopann an t-ardán ag teorainn an phaicéid.

Is léim amháin é Binder, is ais eile é JNI

Téann iarratas tógálaí isteach sa chóras trí Binder, agus áit éigin faoi bhun sin glaonn an t-ardán ar chód dúchasach chun an gléas a chumrú. Is dhá mheicníocht éagsúla iad seo atá cruachta taobh istigh d'aon ghlao amháin. Is cumarsáid idirphróiseas é Binder idir d'aip agus seirbhís chórais, agus is droichead Java-go-dúchasach laistigh de phróiseas é JNI. Déanann crann AOSP de chuid Android 9 an chruach a fheiceáil go litriúil, agus is fiú cuimhneamh go mbogann ainmneacha ranga inmheánacha agus cosáin comhaid idir eisiúintí.

An rud nach mbogann is ea an conradh ar féidir leat brath air: an tógálaí, an tuairisceoir a thugann sé ar ais, agus saolré na seirbhíse timpeall air. Níor cheart d'aon aip idirbheart seirbhíse inmheánach a ghlao ná nód gléis a athchruthú chun comhéadan a fháil. Má bhíonn do chód ag brath ar ainm ranga AOSP, brisfidh sé ar eisiúint nár thástáil tú.

Iompraíonn TUN IP, iompraíonn TAP Ethernet

Is comhéadan IP é TUN. Is comhéadan Ethernet é TAP, agus socraíonn an difríocht sin an bhfuil droicheadú indéanta ar chor ar bith. Níl aon seoladh MAC ag gléas TUN agus níl aon cheanntásc Ethernet le seoladh ar aghaidh, mar sin ní féidir le cliant TUN dul isteach i ndroichead ciseal 2, cibé conas a scríobhtar na róid.

Tugann VpnService an t-athrú IP duit, arb é atá ag teastáil ó VPN ag leibhéal an aip agus ar féidir leis tacú leis gan chruach Ethernet amh. Má theastaíonn droicheadú ó do dhearadh, ní thabharfaidh conair an ardáin ann thú, agus ní dhéanfaidh conair root é ach amháin má chomhoibríonn an t-eithne agus ceadanna an ghléis.

Áit a ngnóthaíonn conair root fós

Cuireann trí phost daoine den chonair ardáin. Teastaíonn TAP ó dhroicheadú ciseal 2. Teastaíonn infheictheacht nach dtugann an creat chun trácht ó aipeanna lasmuigh de do raon VPN féin a ghabháil. Teastaíonn rialacha a shuiteálann tú féin ó ródú polasaí nach nochtann an tógálaí go deo, mar shampla tábla ar leith do cheann scríbe amháin.

Tagann na costais níos déanaí: tosaitheoir gan ghlas nó íomhá rootáilte, polasaí SELinux a bhogann fút, agus gléas a stopann ag iompar i gceart tar éis OTA. Ní féidir oideas rootáilte a sheoladh trí dháileadh aipeanna rialta ach an oiread, mar sin coinníonn formhór na bhfoirne é mar chonair dhiagnóiseach inmheánach seachas mar tháirge.

Rogha idir an dá

Cuir tús leis an gcomhéadan a theastaíonn uait, ní leis an gcód atá agat. Más gléas TUN le róid teoranta don aip an freagra, tá conair an ardáin níos giorra agus maireann sé nuashonruithe. Má chuimsíonn an freagra frámaí Ethernet, gabháil aipeanna eile nó rialacha ródaithe a dhiúltaíonn an tógálaí, tá tú i gcríoch root agus ba cheart duit buiséad a dhéanamh dó mar chostas oibriúcháin.

Seiceáil a réitíonn an chuid is mó de na díospóireachtaí: tóg conair an ardáin ar dtús, taifead toradh establish() ar leithligh ó staid an tseisiúin chianoil, agus deimhnigh paicéad amháin i ngach treo. Ná socraigh ach ansin an bhfuil an cumas atá ar iarraidh ina údar maith le conair thacaithe a fhágáil.

Ailt ghaolmhara