Ìpadà-ọ̀nà VPN Android: àwọn òfin ètò ìṣèlú ṣáájú tábìlì main
Android ń yan tábìlì ìpadà-ọ̀nà pẹ̀lú àwọn òfin uid àti àmì ṣáájú ìwákiri ibi-àfojúsùn kankan, nítorí náà ọ̀nà tí a fi kún main lè máà ṣe àyẹ̀wò rárá.
Ọ̀nà tí a fi kún tábìlì main lórí Android dàbí ẹni tí ó tọ́ nínú gbogbo àkọsílẹ̀, síbẹ̀ kò gbé ìrìnàjò náà. Ìdí ni pé tábìlì main jẹ́ ọ̀kan nínú ọ̀pọ̀ àṣàyàn, a kì í kọ́kọ́ béèrè lọ́wọ́ rẹ̀. Iṣẹ́ nẹ́tíwọ́kì Android ń kọ àwọn òfin ètò ìṣèlú tí wọ́n ń yan tábìlì ìpadà-ọ̀nà pẹ̀lú ìsọfúnni tí àdírẹ́sì ibi-àfojúsùn kò ní — uid app, àmì lórí pákẹ́tì, interfaci tí ó ti wá — ìwákiri ibi-àfojúsùn sì ń ṣẹlẹ̀ lẹ́yìn náà, nínú tábìlì tí àwọn òfin yẹn yàn.
Ìpinnu mẹ́ta ní ìtẹ̀lẹ́ntẹ̀lẹ́ kan
Pákẹ́tì tí ń jáde ń ṣe ìpinnu mẹ́ta ọ̀tọ̀ọ̀tọ̀. Ní àkọ́kọ́, òfin ètò ìṣèlú ń pinnu tábìlì ìpadà-ọ̀nà wo ni ó wúlò. Ní èkejì, ọ̀nà kan nínú tábìlì yẹn ń pinnu ìgbésẹ̀ tó ń bọ̀ àti interfaci ìjáde. Ní ẹ̀kẹta, àwọn ìkọ̀ netfilter ń pinnu bóyá pákẹ́tì yóò yè, yóò yí padà, tàbí a ó darí rẹ̀.
Ìtẹ̀lẹ́ntẹ̀lẹ́ ṣe pàtàkì nítorí ìpele kọ̀ọ̀kan lè dáhùn ìbéèrè tirẹ̀ nìkan. Òfin ògiri iná tí ó gba pákẹ́tì kò yan tábìlì, ọ̀nà tí a fi kún tábìlì tí kò sí òfin tí ó yàn ú kò ní ipa. Ọ̀pọ̀ ìdàrúdàpọ̀ nípa VPN Android ń wá láti inú títún ọ̀kan nínú mẹ́ta ṣe àti àìrí ìyípadà, nítorí àṣìṣe wà nínú òmíràn.
| Stage | Selector | What it cannot decide |
|---|---|---|
| Policy rule | uid range, mark, incoming interface | Which route exists inside the table |
| Route lookup | Destination prefix, longest match | Whether the packet is allowed out |
| Netfilter hook | Chain position, match conditions | Which table was selected |
Àwọn àmì jẹ́ pápá tí a kó pọ̀, kì í ṣe àmì-ìdánimọ̀ tí ìwọ ní
Android ń kó ọ̀pọ̀ òtítọ́ pọ̀ sínú iye àmì kan náà: nẹ́tíwọ́kì wo ni a yàn, bóyá app yàn nẹ́tíwọ́kì ní gbangba, bóyá a dáàbò bo socket lọ́wọ́ VPN, àti àwọn bíìtì tó ní í ṣe pẹ̀lú àwọn àṣẹ. Àkọlé fwmark AOSP ń ṣàlàyé ìtò yẹn fún igi ìsinsìnyí, ìtò náà sì jẹ́ àlàyé inú pẹlẹbẹ tí ń yí padà láàrín àwọn ìtújáde.
Ìdí ni pé lórí Android ó léwu láti kọ gbogbo iye àmì pẹ̀lú iptables -j MARK --set-mark. Kò fi àmì kún; ó rọ́pò ìyàn nẹ́tíwọ́kì tí ẹ̀rọ náà ti ṣe. Pákẹ́tì yóò bá àwọn òfin mìíràn mu, èyí tí ó lè dàbí pé VPN bẹ̀rẹ̀ iṣẹ́, tàbí bí ẹni pé app tí kò ní í ṣe pẹ̀lú pàdánù ìsopọ̀, dá lórí àwọn bíìtì tí a tún kọ.
Bí ó bá pọn dandan láti fi ọwọ́ kan àwọn àmì, kọ́kọ́ ka iye ìsinsìnyí kí o sì lo ìbòjú kí àwọn bíìtì tí ìwọ yé lè yí padà nìkan:
ip rule show
ip route show table all | head -40
ip route get 10.20.4.11Àmì ìsopọ̀ jẹ́ ohun ọ̀tọ̀ sí àmì pákẹ́tì, kò sì sí èyí tí í ṣe ọ̀nà. Mímú àmì padà lórí àwọn pákẹ́tì ìdáhùn jẹ́ ìgbésẹ̀ ọ̀tọ̀ sí yíyan tábìlì nígbà ìjáde, ìdí ni pé àwọn àtúnṣe ọ̀nà kan ń dá àwọn ìsopọ̀ tí ó ṣí, tí ó sì di àré.
Ta ni ó ní àwọn òfin àti àwọn tábìlì
Iṣẹ́ nẹ́tíwọ́kì Android, netd, ń dá àwọn òfin àti àwọn tábìlì fún nẹ́tíwọ́kì kọ̀ọ̀kan. AOSP RouteController ni ibi tí a ti kó àwọn òfin yẹn fún VPN, nẹ́tíwọ́kì ti ara àti ìwọ̀n uid, ìgbà-ìgbé rẹ̀ sì so mọ́ àwọn ìṣẹ̀lẹ̀ nẹ́tíwọ́kì dípò fáìlì ìtòlẹ́sẹẹsẹ.
Àbájáde méjì tẹ̀lé. Ní àkọ́kọ́, àwọn ipò àti nọ́mbà tábìlì tí o bá lórí ẹ̀rọ kan jẹ́ kúlẹ̀kúlẹ̀ inú ìkọ́, kì í ṣe interfaci: àwọn nọ́mbà tí wọ́n dàbí ara wọn lórí ẹ̀yà Android mìíràn lè túmọ̀ sí ohun mìíràn pátápátá. Ní èkejì, a ń tún ipò kọ́ nígbà tí nẹ́tíwọ́kì bá yí padà, nítorí náà òfin tí a fi sí i lónìí láti shell root lè ti pòórá lẹ́yìn ìyípadà Wi-Fi tó ń bọ̀.
Ìpòórá yẹn ni a sábà máa ń ròyìn bí ẹni pé ẹ̀rọ ń kọ ojú sí ọ̀nà kan. Ohun tí ó ṣẹlẹ̀ gbáà ni pé òfin tí ó yan tábìlì kò sí mọ́, ọ̀nà inú tábìlì sì di aláìlèdé ní ojú pákẹ́tì. Ṣàyẹ̀wò àkọsílẹ̀ òfin, kì í ṣe àkọsílẹ̀ ọ̀nà, nígbà tí ìtòlẹ́sẹẹsẹ tí ń ṣiṣẹ́ bá dáwọ́ ṣiṣẹ́ lẹ́yìn ìsopọ̀ padà.
Ìbéèrè nípa ìtẹ̀lẹ́ntẹ̀lẹ́ àwọn ìkọ̀ kò ní ìdáhùn gbogbogbò
Ìbéèrè bóyá iptables ń ṣiṣẹ́ ṣáájú ìpadà-ọ̀nà VPN kò lè dáhùn láìdárúkọ ọ̀nà pákẹ́tì. Pákẹ́tì tí a dá níbílẹ̀ ń gba ìkọ̀ output kọjá, níbẹ̀ ni ìyípadà àmì ti ń ru ìṣàyẹ̀wò ìpadà-ọ̀nà padà — ìwákiri kejì, kì í ṣe àtúnṣe ẹ̀yìn ti èkínní. Pákẹ́tì tí ó ti ọ̀dọ̀ oníbàárà tether wá ń gba ọ̀nà prerouting kọjá a sì gbé e lọ dípò, àwọn ẹ̀wọ̀n tí ó rí i sì yàtọ̀.
Nítorí náà òfin kan náà lè lè ṣiṣẹ́ fún ìrìnàjò app kan tí kò sì hàn fún ìrìnàjò tether, kíkà tí ó dúró ní òdo sì sọ fún ọ ọ̀nà tí pákẹ́tì gbà, kì í ṣe bóyá òfin náà tọ́. Lo àwọn kíkà láti fi ọ̀nà múlẹ̀ kí o tó yí ipò ìbámu kankan padà.
Èyí tún ni ìpele tí àṣìṣe ìpadà-ọ̀nà ètò ìṣèlú ti ń ṣòro láti rí. Ìpadà-ọ̀nà sí tábìlì tí ó wà ṣùgbọ́n tí kò ní ibi-àfojúsùn ń mú nẹ́tíwọ́kì aláìlèdé jáde tí ó dàbí ìjákulẹ̀ ògiri iná, nígbà tí ìjákulẹ̀ ògiri iná ń mú àkókò parí tí ó dàbí ihò dúdú ìpadà-ọ̀nà.
Ṣàyẹ̀wò nínú ẹ̀rọ náà, tàbí fi í sílẹ̀
Fún àyẹ̀wò tí a fọwọ́ sí, fi òtítọ́ mẹ́rin múlẹ̀ kí o tó fi ọwọ́ kan ohunkóhun: uid àti profáìlì app, nẹ́tíwọ́kì tí Android yàn fún un, bóyá VPN ní app yẹn nínú rárá, àti bóyá ìṣòro wà fún àwọn ìdílé àdírẹ́sì méjèèjì. Ìyọkúrò fún app kọ̀ọ̀kan ń ṣàlàyé ọ̀pọ̀ ìròyìn VPN kò ṣiṣẹ́ láìsí àṣìṣe ìpadà-ọ̀nà kankan.
Lẹ́yìn náà ka àwọn òfin, ìbòjú àti àwọn tábìlì tí ó wà lóòótọ́ lágbára, kí o sì pa ìyípadà nẹ́tíwọ́kì mọ́ nínú fèrèsé àkíyèsí. Bí ìhùwàsí bá yí padà káàkiri ìsopọ̀ padà, ìwọ ń wo ìgbà-ìgbé tí a ń ṣàkóso, kì í ṣe ọ̀nà tí ó sọnù.
Fún àwọn àìní deede, lo àwọn ìṣàkóso tí a ṣètìlẹ́yìn fún: ìkójọpọ̀ àti ìyọkúrò fún app kọ̀ọ̀kan nínú ohun èlò VPN, àti yíyan nẹ́tíwọ́kì ti pẹlẹbẹ fúnra rẹ̀ fún ohunkóhun tí ó nílò ọ̀nà pàtó. Bí ìsopọ̀ àṣẹ-pàtàkì bá ní láti fọwọ́ sowọ́pọ̀ pẹ̀lú ẹ̀rọ ìpadà-ọ̀nà ní ti gidi, darí ìmúṣẹ ẹ̀yà Android gangan tí ìwọ ń ṣètìlẹ́yìn fún, kí o sì tọ́jú ìgbà-ìgbé rẹ̀ nípasẹ̀ ẹ̀ka tí ó ní í. Fífọ́ àwọn ẹ̀wọ̀n pẹlẹbẹ mọ́ tàbí fífi òfin ipò gíga sí i yóò yí ìṣàyẹ̀wò padà sí olùṣàkóso nẹ́tíwọ́kì kejì, fọ́nù yóò sì hùwà ní ìbámu pẹ̀lú.