Kí ni Ìdí tí Android VpnService fi Ń Mú Apá Kan Ọ̀nà Ìsọ̀rọ̀
Àwọn ọ̀nà, àwọn àkọsílẹ̀ DNS àti ààlà fún ètò kọ̀ọ̀kan ló pinnu irú àwọn pákẹ́tì tó dé ẹ̀rọ tun, ìdí tí àwọn ẹ̀rọ àdúgbò fi ń pàdánù àti ohun tí olùkọ́ fi ń kọ̀.
Kò sí ohunkóhun nínú VpnService tó ń mú ìsọ̀rọ̀ ọ̀nà fúnra rẹ̀. Ó béèrè lọ́wọ́ ẹ̀rọ fún ìfarakanra tun, ó fi àkójọ àdírẹ́sì àti ọ̀nà fún ìfarakanra yẹn, àti láti àsìkò yẹn ni kókó ń ṣe àdàkọ gbogbo pákẹ́tì tó bá àwọn ọ̀nà yẹn mu sínú àpèjúwe fáìlì tí ètò lè kà. Kóòdù ètò kì í rí àwọn pákẹ́tì tí àwọn ọ̀nà kò yàn rí, nítorí náà ààyè ṣọ́ọ̀bù jẹ́ ìbéèrè nípa tábìlì ìdarí kí ó tó di ìbéèrè nípa ìṣètò. Ìdí nìyẹn tí ìmúṣẹ iṣẹ́ kan náà lè gbé gbogbo ṣíṣàn mì lórí fọ́nù kan tí ó sì gba apá kan lórí òmíràn, àti ìdí nìyẹn tí fífi ọ̀nà kún un fi ń tún ṣọ́ọ̀bù tó dàbí ẹni tó já ṣe. Ohun tí ẹ bá gbà ni ohun tí ẹ kédè, ìyọkúrò ohunkóhun tí olùkọ́ fi kọ̀ ní ìdákẹ́jẹ́.
Àwọn ọ̀nà ló pinnu irú àwọn pákẹ́tì tó ń dé
Builder.addRoute(prefix, prefixLength) ń fi ìpele àkọ́kọ́ sínú tábìlì ìdarí ti nẹ́tíwọ́kì VPN. Ẹ̀rọ ka nẹ́tíwọ́kì yẹn sí àkọ́kọ́ fún àwọn ètò tó wà nínú ààlà, nítorí náà àwọn àkọsílẹ̀ rẹ̀ ni a ń wò ṣáájú ọ̀nà àkọ́kọ́ ti nẹ́tíwọ́kì ara, ìpele tó bá mu sì tó láti yí ṣíṣàn padà. Ìdí nìyẹn tí ọ̀nà fún 0.0.0.0/0 fi ń gba IPv4 ní kíkún, pẹ̀lú ẹ̀rọ ìtẹ̀wé, àfojúsùn cast àti ojú-ìwé ìṣàkóso olùdarí.
Àwọn alábàárú tó fẹ́ ìbòjú yẹn láìpa àkọsílẹ̀ àkọ́kọ́ ti ara rẹ́ ni wọ́n ń lo bọ́ọ̀bù 0.0.0.0/1 àti 128.0.0.0/1 dípò. Ọ̀nà méjì tó ṣe pàtó ju borí ọ̀nà àkọ́kọ́, papọ̀ wọ́n bo gbogbo ààyè àdírẹ́sì, àkọsílẹ̀ àkọ́kọ́ ti fọ́nù fúnra rẹ̀ sì wà nínú tábìlì fún àwọn sọ́kẹ́tì tó ṣì so mọ́ nẹ́tíwọ́kì ara.
Àdírẹ́sì àti àkọsílẹ̀ DNS ń bọ̀ láti ọ̀dọ̀ olùkọ́ kan náà wọ́n sì ń dá ìbéèrè mìíràn lóhùn. addAddress ń fún ìfarakanra ní àdírẹ́sì pẹ̀lú gígùn ìpele, addDnsServer sì ń fi olùyọjáde tí àwọn ètò inú ààlà yóò béèrè nípasẹ̀ ìfarakanra sínú. Àwọn ìdílé méjèèjì lè jókòó lórí ìfarakanra kan, nítorí náà àkójọ ọ̀nà IPv4 nìkan lẹ́gbẹ̀ẹ́ àdírẹ́sì IPv6 jẹ́ ìṣètò tí a ń kà ní títọ́ tí ó sì ń sàn. Tí ẹ bá ń darí ìdílé tí ìfarakanra kò ní àdírẹ́sì nínú, kókó kò ní àdírẹ́sì orísun fún àwọn pákẹ́tì yẹn wọ́n kì í sì í farahàn ní àpèjúwe rárá.
Kí ni establish() ń dá padà
establish() ń dá ParcelFileDescriptor padà, tàbí null nígbà tí a kò fún ètò láṣẹ. null jẹ́ ipò ìfọwọ́sí kì í ṣe àṣìṣe nẹ́tíwọ́kì: VpnService.prepare() gbọ́dọ̀ ti dá null padà tẹ́lẹ̀, tàbí olùlò gbọ́dọ̀ ti fọwọ́ sí ọ̀rọ̀ ẹ̀rọ ṣáájú ìpè náà. A lè yọ ìfọwọ́sí kúrò nígbà tí iṣẹ́ ń ṣiṣẹ́, ìfarakanra sì ń ti lábẹ́ ẹsẹ̀ yín láìsí ìpèpadà kankan sínú ìyí kíkà yín.
Àpèjúwe kì í dí lọ́nà bí ẹ kò bá sọ bẹ́ẹ̀, nítorí náà kíkà ń pada wá lẹ́sẹ̀kẹsẹ̀ láìsí dátà dípò dídá ìtànná dúró. Ìyí tí a kọ fún sọ́kẹ́tì dídí ń sun ìpá kan, ìyí tó ka kíkà òfo sí apanirun sì ń ya ṣọ́ọ̀bù ní ìṣẹ́jú àáyá kan. Builder.setBlocking(true) ń yí ìhùwàsí yẹn padà, iye sì ni ìtànná tó ń dúró nínú kíkà.
Àwọn àríyànjiyàn ọ̀nà àti àdírẹ́sì ni a ń fọwọ́ sí gẹ́gẹ́ bi iye LinkAddress, àwọn àfojúsùn multicast bí 224.0.0.0/4 sì ni a ń kọ̀ tààràtà. Ìfarakanra tun tí ó jẹ́ ojú-ìkànnì-sí-ojú-ìkànnì kò ní ẹkùn ìgbóhùnsáfẹ́fẹ́ pẹ̀lú, nítorí náà wíwá multicast nípasẹ̀ rẹ̀ nílò àpẹẹrẹ mìíràn kì í ṣe ọ̀nà mìíràn. Àkójọ tí a gbọ́dọ̀ yẹ̀wò ni VpnService.Builder, kí ẹ tó pinnu pé a kò kọbi ara sí ìpè kan.
Ààlà fún ètò kọ̀ọ̀kan ń dín àkójọ kù, kì í dín ṣọ́ọ̀bù kù
Láti API 21 olùkọ́ ń gba addAllowedApplication àti addDisallowedApplication, àwọn àkójọ méjèèjì sì ń yọ ara wọn kúrò nínú olùkọ́ kan. Àkójọ ìyọ̀ǹda ń jẹ́ kí ṣọ́ọ̀bù wà fún àwọn pákẹ́tì yẹn nígbà tí gbogbo ohun mìíràn ń pa nẹ́tíwọ́kì ara mọ́; àkójọ ìdíwọ́ ń mú gbogbo ohun àfi àwọn pákẹ́tì tí a dárúkọ, èyí tí alábàárú ń pèsè gẹ́gẹ́ bí ìdààmú ṣọ́ọ̀bù. Kí API 21 tó dé kò sí ọ̀nà pẹpẹ rárá, ìhùwàsí fún ètò kọ̀ọ̀kan sì ń bọ̀ láti ọ̀dọ̀ àwọn alábàárú ẹlẹ́ẹ̀kẹta tí ń ṣe àtọ́ nípasẹ̀ UID nínú olùtẹ̀síwájú wọn fúnra wọn. Ìyàtọ̀ yìí ṣe pàtàkì nígbà àwárí àṣìṣe, nítorí ṣọ́ọ̀bù fún ètò kọ̀ọ̀kan pẹ̀lú àkójọ ìyọ̀ǹda pákẹ́tì kan kì í í dá ìsọ̀rọ̀ ọ̀nà jáde, ìhùwàsí tó tọ́ niyẹn, kì í ṣe ọ̀nà tó já.
Ààlà yóò wù kí ó jẹ́, sọ́kẹ́tì tí ètò yín ń ṣí sí olùpèsè VPN kò gbọ́dọ̀ gba inú ṣọ́ọ̀bù tí ó ń kọ́ kọjá. VpnService.protect(socket) ń so sọ́kẹ́tì yẹn mọ́ nẹ́tíwọ́kì ìsàlẹ̀ kí àwọn pákẹ́tì rẹ̀ lè forí kọjá ẹ̀rọ tun. Tí ẹ bá forí kọjá ìpè náà, ìfarakanra ọwọ́ ni yóò gbé nípasẹ̀ ìfarakanra tí ó yẹ kí ó ti gbé e.
VpnService.setUnderlyingNetworks ń ti ìyí nípa sísọ fún ẹ̀rọ irú nẹ́tíwọ́kì ara tó ń gbé ṣọ́ọ̀bù. Iye yẹn ń pinnu bí VPN ṣe ń ròyìn ìsopọ̀ fún àwọn ètò mìíràn, iye null tàbí ti já sì jẹ́ ìdí tó wọ́pọ̀ fún ṣọ́ọ̀bù tó so mọ́ tí ìyókù fọ́nù ka sí àìsí lórí ẹ̀rọ. Ṣe àtúnṣe rẹ̀ nígbà tí nẹ́tíwọ́kì ìsàlẹ̀ bá yí padà, kì í ṣe nígbà ìbẹ̀rẹ̀ nìkan.
Àwọn àkópọ̀ àyẹ̀wò àti MTU: ibi tí ọ̀nà tó tọ́ ṣì ń kùnà
Nígbà tí àwọn pákẹ́tì bá dé, àlàyé méjì ní ìpele pákẹ́tì ń pinnu bóyá ohun kan ń ṣiṣẹ́ láti òpin dé òpin. Èkíní ni àdírẹ́sì orísun: pẹ̀lú àwọn àdírẹ́sì ìfarakanra bíi mélòó kan, kókó lè gbé àwọn pákẹ́tì tó gbé èkíní jáde, nítorí náà olùtẹ̀síwájú tó ń tún àwọn àkọlé kọ gbọ́dọ̀ tún àdírẹ́sì àti àkópọ̀ àyẹ̀wò tó bo ó ṣe.
Èkejì ni ààyè àkópọ̀ àyẹ̀wò. Nígbà tí ètò bá kọ́ pákẹ́tì TCP tàbí UDP fúnra rẹ̀, àkópọ̀ àyẹ̀wò ń bo àkọlé àròtẹ́lẹ̀ tó ní àdírẹ́sì orísun, àdírẹ́sì àfojúsùn, nọ́mbà ìlànà àti gígùn ìgbé, yíyọ ọ̀kan nínú wọn sì ń fúnni ní àwọn pákẹ́tì tó ń dé tí a sì ń dà nù. Ìkùnà yẹn dàbí àkókò tó parí lẹ́yìn ìdáhùn tí kì í dé rárá, èyí tí ń sọ ọ̀pọ̀ ènìyàn padà sọ́dọ̀ àwọn ọ̀nà. setMtu ń fi MTU ìfarakanra múlẹ̀, kíkà kọ̀ọ̀kan sì ń dá pákẹ́tì IP kíkún kan péré padà, nítorí náà bọ́ọ̀bù tí a kọ fún ṣíṣàn báìtì yóò fọ́ ìtúpalẹ̀ yín, kì í ṣe pákẹ́tì.
Ìyí àyẹ̀wò tó ń ya àwọn ìpele kúrò
Láti wá ibi tí ààlà ti ṣe àṣìṣe, dán àwọn ìpele wò ní tẹ̀léntẹ̀lén. Béèrè lọ́wọ́ ẹ̀rọ irú àwọn ọ̀nà tí nẹ́tíwọ́kì VPN ń gbé ní ti gidi, lẹ́yìn náà yẹ̀wò bóyá ṣíṣàn sí àdírẹ́sì tí a mọ̀ ń farahàn gẹ́gẹ́ bí kíkà ní àpèjúwe, lẹ́yìn náà yẹ̀wò bóyá pákẹ́tì tí olùtẹ̀síwájú yín ń gbé jáde ní ìrísí tó dára. Ìṣòro ọ̀nà kì í fi ohunkóhun hàn ní àpèjúwe, nígbà tí ìṣòro àkópọ̀ àyẹ̀wò ń fi pákẹ́tì tó ń dé tí ó sì ń pàdánù hàn.
Tí ohunkóhun kò bá dé àpèjúwe, ẹni tí a fẹ̀sùn kàn kì í ṣe olùkà bí kò ṣe àkójọ ọ̀nà: jẹ́rìí àwọn ìpele, jẹ́rìí pé àdírẹ́sì wà nínú ìdílé kan náà, kí ẹ sì jẹ́rìí pé ètò wà nínú ààlà tí ẹ gbé kalẹ̀. Tí àwọn pákẹ́tì bá dé àpèjúwe ṣùgbọ́n tí ohunkóhun kò padà, yẹ̀wò protect() àti iye nẹ́tíwọ́kì ìsàlẹ̀ kí ẹ tó tún kan ọ̀nà. Tí ẹ̀gbẹ́ jínjìn bá ròyìn àwọn pákẹ́tì tí kò dára, àkópọ̀ àyẹ̀wò àti MTU ni ibi tí a gbọ́dọ̀ wò. Àyẹ̀wò kan fún ìpele kọ̀ọ̀kan ń fi ọ̀sán ààárọ̀ àròsọ pamọ́.