VPN lori Android ń ṣiṣẹ́ pẹ̀lú IPv6, ṣùgbọ́n aṣàwákiri ṣì ń yan IPv4
Tẹ̀lé àwọn ìpele mẹ́rin tí àdírẹ́sì IPv6 àdáni ń pàdánù: olùyọjá, ìkéde VpnService, àyẹ̀wò olùdíje aṣàwákiri àti ìfi ojú-ọ̀nà dé.
VPN wà ní ọ̀nà, ojú-èwé wẹ́ẹ̀bù àdáni ń dáhùn nípasẹ̀ IPv6 láti kọ̀mpútà, ṣùgbọ́n fọ́nù Android ṣì ń ṣí ojú-ìwé kan náà nípasẹ̀ IPv4 tàbí kọ̀ láti gbé e wọlé pátápátá. Àkọsílẹ̀ AAAA wà. Òjú-ọ̀nà náà ń ròyìn àdírẹ́sì IPv6. Kò sí ohun tí ó dàbí àṣìṣe nínú alákọsílẹ̀. Ìpinnu mẹ́rin ọ̀tọ̀ọ̀tọ̀ ni ó ń pinnu èsì: olùyọjá wo ni ó dáhùn, kí ni VpnService kéde fún Android, ìdílé àdírẹ́sì wo ni aṣàwákiri ṣetán láti dán wò, àti bóyá pákẹ́ẹ̀tì kan lè ṣe ìrìn àjò lọ àti padà. Ṣiṣẹ́ lórí wọn ní ọ̀nà yẹn dípò fífi ojú-ọ̀nà àìsí kún un kí o sì retí pé àmì àìsàn yóò yí padà.
Ìgbésẹ̀ 1: fi hàn olùyọjá wo ni ó dáhùn ìbéèrè AAAA
Android kò ní ojú-ọ̀nà DNS kan ṣoṣo. VPN lè ti ọ̀nà ìsokọ́ra DNS fún nẹ́tíwọ́kì rẹ̀, ẹ̀rọ náà lè lo Private DNS fún àwọn orúkọ olùgbàlejò tí ó kà sí yẹ, Chrome sì lè ṣiṣẹ́ olùyọjá tí ó ti di ààtò rẹ̀ láti chrome://settings/security. Ní fọ́nù tí òjú-ọ̀nà náà ti ń ti 10.61.0.1 ṣùgbọ́n Private DNS ń tọ́ka sí olùpèsè gbangba, orúkọ inú agbègbè àdáni rẹ kò ní jẹ́ yíyanjú nípasẹ̀ ẹ̀rọ tí ó ni agbègbè náà. Aṣàwákiri ń gba èsì láti ọ̀dọ̀ olùyọjá kan tí kò ní àṣẹ lórí orúkọ yẹn, ó sì kà á sí ohun tí kò sí, àti pé ọ̀rọ̀ àṣìṣe kò darukọ DNS rárá.
Bèèrè lọ́wọ́ olùyọjá òjú-ọ̀nà náà ní tààrà kí o tó yí ohunkóhun mìíràn padà. Àwọn àṣẹ méjì àkọ́kọ́ fi hàn àwọn olùpèsè DNS tí Android so mọ́ nẹ́tíwọ́kì tí ń ṣiṣẹ́ àti bóyá Private DNS wà ní ipò aládàáṣiṣẹ́ tàbí líle; ẹ̀kẹta ń ṣiṣẹ́ láti ọ̀dọ̀ alákọsílẹ̀ kankan nínú òjú-ọ̀nà náà, kì í ṣe láti fọ́nù.
adb shell dumpsys connectivity | grep -A3 "DnsAddresses"
adb shell settings get global private_dns_mode
nslookup -type=AAAA nas.lan 10.61.0.1
Ìgbésẹ̀ 2: kà ohun tí VpnService kéde ní tòótọ́
Ẹ̀gbẹ́ Android já fáfá, kì í ṣe àfirò. VpnService.Builder ń fi àwọn àdírẹ́sì kún pẹ̀lú addAddress, ojú-ọ̀nà pẹ̀lú addRoute, olùpèsè DNS pẹ̀lú addDnsServer, ó sì lè dín gbogbo òjú-ọ̀nà kù sí ìdílé àdírẹ́sì kan pẹ̀lú allowFamily. Olùkọ́ tí ó pe allowFamily(AF_INET) tí ó sì fi ojú-ọ̀nà IPv6 kún un lẹ́yìn ti sọ ohun méjì tí ó tako ara wọn fún ẹ̀rọ náà, ìdíwọ́ ìdílé sì ni ohun tí ẹ̀rọ náà ń pa mọ́. Ojú-ọ̀nà tí ó bo fd00:61::/64 papọ̀ pẹ̀lú àdírẹ́sì ìsokọ́ra ní ìpilẹ̀ mìíràn yóò kùnà fún ìdí kan náà: àdírẹ́sì wà, ṣùgbọ́n kò sí on-link fún ojú-ọ̀nà yẹn.
Ka ìkéde náà dípò gbẹ́kẹ̀lé ìfọwọ́kan nínú áàpù náà. dumpsys netd ń tẹ àwọn àdírẹ́sì àti ojú-ọ̀nà tí ó so mọ́ ìsokọ́ra tun jáde, LinkProperties fún nẹ́tíwọ́kì kọ̀ọ̀kan nínú dumpsys connectivity sì ń fi àkójọ DNS hàn lẹ́gbẹ̀ẹ́ àwọn ìdílé tí nẹ́tíwọ́kì náà ń sọ pé ó ní.
adb shell ip -6 addr show tun0
adb shell ip -6 route show table all | grep tun0
adb shell dumpsys connectivity | grep -E "LinkAddresses|Routes"
Tí ìsokọ́ra tun bá ní àdírẹ́sì IPv6 ṣùgbọ́n kò sí ojú-ọ̀nà tí ó bá ìpilẹ̀ iṣẹ́ náà mu, ìfi IPv6 dé ti bàjẹ́ kí aṣàwákiri tó kópa. Èyí jẹ́ àṣìṣe tí ó yàtọ̀ sí ti aṣàwákiri tí ó kọ̀ láti dán wò, ó sì nílò àtúnṣe mìíràn.
Ìgbésẹ̀ 3: aṣàwákiri ni ó ń pinnu bóyá yóò dán IPv6 wò rárá
Chromium kì í lo gbogbo àkọsílẹ̀ AAAA tí ó ń gbà. Olùyọjá olùgbàlejò rẹ̀ ń gbé àwọn àyẹ̀wò ìwọlé IPv6 àti àtọ́jú olùdíje tí ó lè sọ IPv6 nù tàbí dín ipò rẹ̀ kù nígbà tí a bá kà nẹ́tíwọ́kì sí aláìlè gbé e, orísun olùyọjá sì ń fi àyẹ̀wò yẹn hàn pẹ̀lú àwọn ipò tí ó yí i ká. Ọ̀rọ̀ ìrònú náà sinmi lórí ẹ̀dà àti àwọn àsíá, ìdí náà sì ni fọ́nù méjì lórí òjú-ọ̀nà kan lè hu ìwà yàtọ̀. Nígbà tí àwọn olùdíje bá wà, Happy Eyeballs ń jẹ́ kí àwọn ìdílé díje fún ìsopọ̀ kọ̀ọ̀kan, nítorí náà ojú-ọ̀nà IPv6 tí ń dáhùn jẹ́jẹ́ lè ṣì pàdánù sí IPv4 tí ń dáhùn kíákíá.
Ṣàkíyèsí ìpinnu náà dípò díwọ̀n rẹ̀. Àpéjọ tí a gbà sílẹ̀ nípasẹ̀ chrome://net-export tí a sì tún ṣiṣẹ́ rẹ̀ nínú olùwò netlog ń fi gbogbo ìyọjá àti ìdílé tí a yàn hàn; chrome://net-internals/#dns ń fi àwọn èsì tí ó wà nínú káṣì hàn. Ìyọjá tí ó ń dá àwọn àkọsílẹ̀ A padà nìkan fún orúkọ tí ó ní AAAA ní olùyọjá rẹ fúnra rẹ ń tọ́ka tààrà sí ìpele yìí.
Ìgbésẹ̀ 4: rí i dájú pé pákẹ́ẹ̀tì kan lè ṣe ìrìn àjò lọ àti padà
Yíyan àdírẹ́sì kì í ṣe ìfidélọ́wọ́. Android ń pa àwọn tábìlì ìtọ́sọ́nà àti àwọn òfin ìlànà fún nẹ́tíwọ́kì kọ̀ọ̀kan mọ́, tí wọ́n ń yan tábìlì nípasẹ̀ fwmark, nítorí náà ojú-ọ̀nà tí ó hàn nínú tábìlì àkọ́kọ́ kì í ṣe ojú-ọ̀nà tí socket ń lò lọ́nà àìsí. Kíkà àwọn òfin àti bíbèèrè lọ́wọ́ kẹ́nẹ̀lì láti yanjú ibi-ìlọ fún àdírẹ́sì orísun ń ya àwọn méjèèjì sọ́tọ̀.
adb shell ip -6 rule show
adb shell ip -6 route get fd00:61::20 from fd00:61::10
Ìjáde route get ni ó ń dáhùn ìbéèrè náà. Tí ó bá dárúkọ tun0 tí àwọn pákẹ́ẹ̀tì sì ń kú síbẹ̀, lọ sí MTU òjú-ọ̀nà náà àti ìfiránṣẹ́ IPv6 ẹnubodè dípò padà sí fọ́nù.
Ìdí tí fífi ::/0 kún un fi ń sábà mú kí ó burú sí i
Fífi ::/0 kún un ń yí ẹ̀tọ́ òjú-ọ̀nà náà padà láti ìpilẹ̀ kan sí gbogbo ibi-ìlọ IPv6. Ní fọ́nù, èyí lè tẹ́ àyẹ̀wò ìwọlé lọ́rùn, nítorí àdírẹ́sì ìdánwò tí ó wà ní ìta ìpilẹ̀ rẹ yóò dàbí ẹni tí a lè tọ́sọ́nà. Ṣùgbọ́n kì í dá agbára IPv6 ìsọfúnni-òkè sílẹ̀ ní ẹnubodè, ọ̀pọ̀ ẹnubodè ilé kò sì ní ìsopọ̀ òkè IPv6 tí ń ṣiṣẹ́ rárá. Èsì náà jẹ́ ihò dúdú fún IPv6 gbogbogbò: àwọn orúkọ tí wọ́n ti ń ṣubú padà sí IPv4 nígbà kan ń gbéra nísinsìnyí, ojú-ìwé àdáni sì lè dàbí ẹni tí ó dára sí i kìkì nítorí pé àyẹ̀wò náà ń díwọ̀n ohun mìíràn.
Ìnáwó ìlànà wà pẹ̀lú. Pẹ̀lú ::/0 nínú òjú-ọ̀nà náà, gbogbo ìrìnàjò IPv6 ń jáde nípasẹ̀ VPN, pẹ̀lú ìrìnàjò tí ẹni tí ó ni nẹ́tíwọ́kì kò tí ì gbà láti gbé e. Ka èyí sí ìpinnu ìfilọ́lẹ̀ pẹ̀lú olùní tí a dárúkọ, kì í ṣe ìgbésẹ̀ àtúnṣe tí o ń ṣe ní agogo 1 òru.
Ìtẹ̀lé iṣẹ́ tí ó parí èyí
Jẹ́rìí pé èsì AAAA wá láti ọ̀dọ̀ olùyọjá tí ó ni agbègbè náà, ka ipò VpnService àti netd fún ìsokọ́ra tun, gba àmì net-export láti rí i bóyá Chromium sọ olùdíje náà nù, lẹ́yìn náà dán ìrìn lọ àti padà wò pẹ̀lú ip -6 route get. Tún ìpele tí ó kùnà ní tòótọ́ ṣe, kí o sì fi ìlànà ìpín sílẹ̀ bẹ́ẹ̀. Tí àwọn orúkọ àdáni bá nílò àwọn èsì tí ó yàtọ̀ sí ti àwọn orúkọ gbangba, split tunneling wà fún ìyẹn.
Kọ build fọ́nù, ẹ̀dà aṣàwákiri àti olùyọjá tí o béèrè sílẹ̀. Àwọn òtítọ́ mẹ́ta yẹn ń sọ "IPv6 is broken" di ohun tí ẹni tí ó kàn lè tún ṣe.