Bí a ṣe lè yọ abẹ́nú kan kúrò nínú ọ̀nà VPN Android
VpnService kò lè yọ ipa-ọ̀nà kan kúrò, nítorí náà o fi àfikún kún un: àwọn ìpilẹ̀ mẹ́jọ tí a ṣẹ̀dá fún /8, pẹ̀lú àwọn àyẹ̀wò IPv6, DNS àti wíwá tí ó mú ìyókù.
VpnService Android kò ní ipa-ọ̀nà ìyọkúrò, kò sì sí ìwọ̀n kíkà API tí yóò ṣẹ̀dá ọ̀kan. Builder.addRoute() máa ń fi àwọn ibi-àfọ̀mọ́ kún ọ̀nà VPN nìkan, nítorí náà pípa ẹ̀ka LAN mọ́ níbílẹ̀ túmọ̀ sí pé ẹ̀ka yẹn kò ní wọ inú àkọsílẹ̀ ipa-ọ̀nà rárá. Ohun tí o fi kún un ní ààyè ni àfikún ẹ̀ka náà, tí a fi àwọn ìpilẹ̀ déédé hàn. Iṣẹ́ náà jẹ́ ìṣirò, ó sì kùnà ní àwọn ibi mélòó kan tí a lè fojú sọ́nà.
Tẹ̀síwájú nínú àwọn àyẹ̀wò tí ó wà nísàlẹ̀ lẹ́sẹẹsẹ. Ọ̀kọ̀ọ̀kan gbà pé èyí tí ó ṣáájú dúró, nítorí náà dúró ní ìkùnà àkọ́kọ́ dípò kíkún àwọn àmì ní sísàlẹ̀.
Bẹ̀rẹ̀ ní ohun tí ọ̀nà VPN ń sọ
Fífi 0.0.0.0/0 fún addRoute() sọ fún Android pé gbogbo ibi-àfọ̀mọ́ IPv4 jẹ́ ti ọ̀nà VPN. Ìdí nìyẹn tí ọ̀pọ̀ olùṣàmúlò fi dàbí ẹni tí kò lè ṣe ìpín ọ̀nà VPN: wọ́n ń béèrè gbogbo ààyè àdírẹ́sì, lẹ́yìn náà wọ́n gbìyànjú láti yọ kúrò nínú rẹ̀. Kò sí ohun tí ó ń yọ kúrò nínú olùkọ́. Ọ̀nà kan tí ó ṣe pàtó fún nẹ́tíwọ́kì tí o fẹ́ pa mọ́ níbílẹ̀ ń ṣe ìdíkejì ohun tí àwọn ènìyàn retí, nítorí ìpilẹ̀ tí ó gùn jùlọ tí ó bá mu ni ó ń borí, nẹ́tíwọ́kì yẹn sì wọ inú ọ̀nà VPN.
Àkọsílẹ̀ ipa-ọ̀nà ni gbogbo ìlànà. Kò sí ìdìbò fún ibi-àfọ̀mọ́ kọ̀ọ̀kan lẹ́yìn rẹ̀, àti ìtọ́kasí Builder kò tọ́ka ọ̀nà kankan tí yóò pèsè ọ̀kan.
Ṣẹ̀dá àfikún náà láti ìṣirò ìpilẹ̀
Àfikún ìpilẹ̀ tí a yọ kúrò ni àkójọ àwọn ẹ̀gbọ́n rẹ̀ lórí ọ̀nà sí gbòǹgbò igi àdírẹ́sì. Fún gbogbo gígùn láti 1 dé gígùn tí a yọ kúrò, mú bulọ́ọ̀kù gígùn yẹn tí ó ní ìpilẹ̀ rẹ, yí bítì tí ó wà ní ìsàlẹ̀ ìpilẹ̀ náà padà, kí o sì jáde èsì náà. Ó dàbí ohun àìlóye títí tí o fi ṣe é.
Yíyọ 10.0.0.0/8 kúrò ń fúnni ní ọ̀nà mẹ́jọ: 128.0.0.0/1, 64.0.0.0/2, 32.0.0.0/3, 16.0.0.0/4, 0.0.0.0/5, 12.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8. Kò sí ọ̀kan nínú wọn tí ó ní 10.0.0.0/8, gbogbo wọn sì ń bo gbogbo ohun mìíràn.
Ìlà mẹ́jọ ń ṣẹ̀dá àkọsílẹ̀ yẹn fún ìpilẹ̀ kankan:
import ipaddress
def complement(addr, length):
base = int(ipaddress.IPv4Address(addr))
out = []
for k in range(1, length + 1):
block = base & (0xFFFFFFFF << (32 - k))
sibling = block ^ (1 << (32 - k))
out.append(f"{ipaddress.IPv4Address(sibling)}/{k}")
return out
print(complement("10.0.0.0", 8))
Iye ipa-ọ̀nà dọ́gba pẹ̀lú gígùn ìpilẹ̀, ìyẹn sì ni iye tí ó yẹ kí a máa wò. Ìyọkúrò /21 kan ń ná ipa-ọ̀nà 21, ó sì wà ní ṣíṣeé kà. Ìyọkúrò mẹ́wàá lè ná ọgọ́rùn-ún mélòó kan, èyí tí ó sábà túmọ̀ sí pé àpẹẹrẹ nẹ́tíwọ́kì ni ó yẹ kí ó yí padà, kì í ṣe olùṣẹ̀dá.
Ṣàyẹ̀wò ẹbí àdírẹ́sì àti ìwọ̀n ọ̀nà VPN
Àwọn ipa-ọ̀nà IPv4 kò ṣe nkankan fún IPv6. Bí ọ̀nà VPN bá béèrè àdírẹ́sì IPv6, ìpilẹ̀ LAN IPv6 nílò àfikún tirẹ̀, tí a ṣẹ̀dá pẹ̀lú ìṣirò kan náà lórí 128 bítì. Ìdí tí ó wọ́pọ̀ tí ìyọkúrò fi ń ṣiṣẹ́ lórí bébà nígbà tí ẹ̀rọ àdúgbò ṣì wà láìsí àbájáde ni èyí: a dé ọ̀dọ̀ ẹ̀rọ ìpamọ́ nípasẹ̀ IPv6, IPv4 nìkan ni a gé kúrò. Ṣàyẹ̀wò ẹbí méjèèjì kí o tó pinnu pé ìṣirò náà kò tọ́.
Ìwọ̀n ni ìdajì kejì àyẹ̀wò náà. Android ń tọpinpin ìtọ́sọ́nà fún nẹ́tíwọ́kì kọ̀ọ̀kan àti fún àpèlì kọ̀ọ̀kan, nítorí náà ìpilẹ̀ kan náà lè gba ọ̀nà VPN fún àpèlì kan, ó sì lè tààrà fún òmíràn, ní ìbámu pẹ̀lú bí a ṣe kéde VPN.
Gbe àwọn ìlànà DNS àti ti àpèlì kọ̀ọ̀kan sí ibi tí ó yẹ
Ìyọkúrò ipa-ọ̀nà kò yí olùyẹ́jú padà. Orúkọ ẹ̀rọ ìpamọ́ àdúgbò ṣì lè gba ìdáhùn láti ọ̀dọ̀ sáfà DNS ti ọ̀nà VPN nígbà tí a ń tọ́sọ́nà àdírẹ́sì rẹ̀ níbílẹ̀, àìbámu náà sì farahàn gẹ́gẹ́ bí orúkọ tí ó yẹ́jú sí ohun tí LAN kò lè dé. Ṣètò ìlànà olùyẹ́jú pẹ̀lú ìmọ̀, pẹ̀lú ìkànpamọ́ wíwá tàbí ìlànà DNS pínpín. Má ṣe rò pé àwọn ipa-ọ̀nà ti pinnu rẹ̀ fún ọ.
addDisallowedApplication() ń pa àpèlì kan mọ́ síta ọ̀nà VPN; kò pa ibi-àfọ̀mọ́ mọ́ síta fún àwọn àpèlì tí ó wà nínú. protect() ń jẹ́ kí sọ́kẹ́tì tí o ṣí yọ ọ̀nà VPN kúrò, àti pé ọ̀nà VPN yẹn yẹra fún mímú ìgbékalẹ̀ tirẹ̀. Kò sí ọ̀kan nínú wọn tí ó rọ́pò àfikún náà.
Ṣàyẹ̀wò pẹ̀lú wíwá, kì í ṣe pẹ̀lú àkọsílẹ̀ tirẹ̀
Nígbà tí ọ̀nà VPN bá ti dìde, béèrè lọ́wọ́ ẹ̀rọ náà níbi tí àdírẹ́sì kan ń lọ gan-an dípò kíkà àkọsílẹ̀ tí o kọ́ lẹ́ẹ̀kan sí i. Nínú bíílídì tí ó ní iproute2, adb shell ip route get 10.1.2.3 ń dárúkọ ètò tí kọ́mputà àárín yàn. Ṣe ìtọ́nà kan náà fún àdírẹ́sì gbogbogbò, kí o sì jẹ́rìí pé ó dárúkọ ọ̀nà VPN.
Àyẹ̀wò méjì mìíràn ń ti ìyí náà. Kọ́kọ́ yẹ́jú orúkọ àdúgbò kan, lẹ́yìn náà ṣe adb shell ip route get lórí àdírẹ́sì tí a yẹ́jú, kí o sì béèrè ètò tí kì í ṣe ọ̀nà VPN, nítorí adb shell ping -c 1 host.lan tí ó ṣàṣeyọrí ń fi ìdánilójú pé a lè dé ibi, kì í ṣe ọ̀nà náà. Tún àyẹ̀wò ẹbí àdírẹ́sì ṣe lórí IPv6 bí ọ̀nà VPN bá béèrè ọ̀kan. Dánwò ní ìpele API tí o ń fi ránṣẹ́, nítorí bí a ṣe ń fi àwọn nẹ́tíwọ́kì VPN hàn sí tábìlì ìtọ́sọ́nà ti yí padà láàrín àwọn ìtúsílẹ̀. Àkọsílẹ̀ ipa-ọ̀nà tí ó dàbí ẹni tí ó tọ́ lórí bébà àti wíwá tí ó yan ètò tí kò tọ́ jẹ́ àṣìṣe ọ̀tọ̀ọ̀tọ̀, èyí tí ó kẹ́yìn nìkan ni ó ń dé ọ̀dọ̀ àwọn olùṣàmúlò.
Bí àkọsílẹ̀ ìyọkúrò bá ń tẹ̀síwájú láti dàgbà, dá ṣíṣe àwọn ipa-ọ̀nà dúró, kí o sì tún nọ́mbà nẹ́tíwọ́kì tí ó jìnnà, tàbí dín ọ̀nà VPN kù ní ààyè rẹ̀. Olùṣẹ̀dá jẹ́ ọ̀nà àyídá fún API tí ó sọnù, kì í ṣe irinṣẹ́ àpẹẹrẹ.