Il-lista tal-permessi ta' Android VpnService: għaliex il-paġni permessi xorta jiddendlu
Il-lista tal-permessi tiegħek x'aktarx hi tajba. Il-paġni jiddendlu minħabba r-risposta DNS, it-tabella tar-rotot, is-sokit tar-resolver jew l-MTU. Dan huwa l-ordni tal-verifika.
Żidt domin fil-lista tal-permessi, il-mistoqsija tasal fl-app tiegħek, il-qabbiel irodd lura permess, u l-paġna xorta qatt ma tgħabbi. F'dak il-punt il-biċċa l-kbira jibdew jiktbu mill-ġdid il-qabbiel u jżidu tqabbil bil-wildcard. Mill-esperjenza tiegħi il-qabbiel normalment ikun korrett, u l-ħsara tinsab saff iktar 'l isfel: fir-risposta DNS li sintetizzajt, fir-rotta li installajt, jew fis-sokit li użajt biex tgħaddi l-mistoqsija. Il-lista hija l-parti faċli; il-passaġġ tal-pakkett huwa fejn il-listi tal-permessi jinqasmu.
Il-qabbiel rari jkun il-ħati
L-ewwel ħaġa li trid tissepara hija mblukkat minn imkisser. Isem imblukkat għandu jonqos malajr u b'mod viżibbli, għax il-browser jirċievi risposta li l-isem ma jeżistix u jieqaf. Isem imkisser jiddendel, jerġa' jipprova fuq IPv6, jaqa' fuq trasport ieħor, u jħallik b'indikatur li jdur. Jekk tara indikatur li jdur, il-lista tal-permessi tiegħek x'aktarx qed twieġeb b'xi ħaġa li l-klijent ma jistax jaġixxi fuqha.
Rekord A vojt huwa l-iżball klassiku. Li tirritorna NOERROR b'żero risposti jidher bħala risposta valida, għalhekk ir-resolver stub jaċċettaha, il-browser jerġa' jipprova, jipprova AAAA, jipprova resolver ieħor u jċedi ħafna iktar tard. Kodiċi ta' risposta 3, jiġifieri NXDOMAIN, bit-taqsima tal-mistoqsija ripetuta u l-ID tat-transazzjoni kkupjata, itemm il-konversazzjoni minnufih. Użah għal kull isem li tirrifjuta deliberatament.
IPv6 ukoll jistħoqqlu l-istess deċiżjoni u mhux valur awtomatiku. Jekk twieġeb NXDOMAIN għal A u tħalli AAAA jgħaddi, il-klijent jista' jilħaq l-isem imblukkat fuq IPv6 u l-filtru joħroġ. Xi implimentazzjonijiet iwieġbu mistoqsijiet AAAA imblukkati b'indirizz loopback sabiex il-konnessjoni tonqos minnufih minflok ma taqa' fuq alternattiva. Agħżel politika waħda, applikaha għaż-żewġ tipi ta' rekords, u rreġistra t-tnejn.
Rotta li taqbad kollox tippossjedi kollox
Disinn b'DNS biss qatt ma jżid addRoute("0.0.0.0", 0), għalhekk biss il-mistoqsijiet jidħlu fl-interface TUN u kollox ieħor ikompli juża n-netwerk ta' taħt. Din hija l-forma sigura, u tispjega wkoll għaliex xi listi tal-permessi jidhru li jaħdmu fuq Wi-Fi u jonqsu fin-netwerk ċellulari.
Fil-mument li teżisti rotta awtomatika, kull fluss huwa tiegħek. Pakkett TCP li jasal fl-interface u li la jiġi mgħoddi u lanqas imwieġeb joqgħod fil-kju sakemm jiskadi l-ħin tal-klijent, u m'hemmx żball x' tirreġistra għax xejn ma falla. Rajt lil xi ħadd iqatta' nofs inhar fuq lista tal-permessi miksura li fil-verità kienet biss għodda tat-trasferiment nieqsa għall-port 443. Irreġistra l-protokoll u d-destinazzjoni ta' kull pakkett li tiddeċiedi li tarmi.
Is-sokit tar-resolver irid joħroġ mill-mina
It-trasferiment huwa fejn tinsab in-nassa li jmiss. Ir-resolvers tal-operatur spiss jgħixu fuq indirizz privat li l-mina ma tilħaqx, għalhekk il-mistoqsija li tgħaddi tmur x'imkien u l-app tirrapporta skadenza tal-qari. Ibgħat mistoqsijiet approvati lil resolver li taf li hu aċċessibbli, u għaddi dak is-sokit lill-VpnService.protect() l-ewwel. Sokit mhux protett jibgħat il-mistoqsija lura fil-mina tiegħek stess, fejn tasal mill-ġdid fl-app u ddur sakemm tiskatta l-iskadenza.
Il-ħsara tidher identika għal qtugħ tan-netwerk, u għalhekk tibqa' ħajja daqstant fil-konferma tal-iżbalji. Żomm counters għall-mistoqsijiet mibgħuta u r-risposti li waslu: jekk l-ewwel numru jitla' u t-tieni jibqa' żero, qed tħares lejn is-sokit, mhux lejn il-lista.
Id-daqs u l-checksums jonqsu mingħajr messaġġ
It-tarmi silenzjuż jiġi wkoll mid-daqs. Risposta DNS b'sett kbir ta' risposti, jew handshake TCP b'għażliet ġenerużi, tista' taqbeż MTU tal-passaġġ li qatt ma stabbilixxejt b'mod espliċitu; il-framment jisparixxi 'l fuq u l-klijent jew jipprova mill-ġdid iżgħar jew jieqaf jipprova. Li tistabbilixxi l-MTU tal-interface għal 1280 hija għażla konservattiva li tibqa' għaddejja fuq il-biċċa l-kbira tal-passaġġi ċellulari, u li tkun espliċitu huwa aħjar milli tirratta valur awtomatiku li ħadd ma kejjel.
Jekk tibni l-pakketti inti stess, il-checksum huwa l-qattiel silenzjuż l-ieħor. Checksum UDP ikkalkulat fuq pseudo-header li jħalli barra t-tul UDP jew il-qasam tal-protokoll jipproduċi pakkett li jidher iffurmat sew min-naħa tiegħek u jintrema mir-riċevitur mingħajr traċċa. Qabbel il-pseudo-header tiegħek ma' l-ispeċifikazzjoni qasam b'qasam, u ipprintja l-checksum ikkalkulat għal fluss magħruf waqt id-debugging.
X'ma jagħmilx VpnService għalik
Żewġ limiti jistħoqqilhom jingħarfu qabel ma tiddisinja madwarhom. Ebda app ordinarja ma tista' tinstallal proxy tas-sistema kollha jew fajl PAC barra mill-Wi-Fi, u dik il-parti ma nbidlitx. Il-passaġġ għal kull app inbidel: qabel l-API 29, VpnService.Builder ma setax iġorr proxy xejn, u mill-API 29 'l hawn setHttpProxy(ProxyInfo.buildPacProxy(uri)) jagħti lill-pjattaforma skritt PAC biex tevalwaha għan-netwerk VPN. Evalwa r-regoli fil-kodiċi tiegħek meta timmira lejn APIs eqdem jew meta l-mudell PAC ma jistax jesprimi r-regola. UDP lanqas mhu b'xejn: il-browsers jibagħtu biss TCP permezz ta' proxy SOCKS, u l-biċċa l-kbira tal-klijenti SOCKS5 qatt ma jimplimentaw UDP ASSOCIATE, għalhekk disinn ibbażat fuq proxy jarmi jew inixxi UDP waqt li TCP jidher f'saħħtu.
Dan it-tieni limitu huwa r-raġuni għaliex protokoll ibbażat fuq UDP jista' jaħdem fuq netwerk ordinarju u jonqos fil-mument li l-VPN tiegħek jikkonnettja. Jekk il-mina hija mistennija ġġorr UDP, l-għodda tat-trasferiment trid timplimenta l-passaġġ tat-trasferiment għalih, mhux biss il-passaġġ TCP b'tip ta' sokit differenti.
Ivverifika f'dan l-ordni
Ħu l-lista bl-ordni u waqaf fl-ewwel stadju li jonqos, għax kull verifika iktar tard hija storbju sakemm dik ta' qabel ma żżommx.
- Elenka r-rotot installati u kkonferma jekk pakketti li mhumiex DNS jidħlux xejn fl-interface TUN.
- Irreġistra l-isem tal-mistoqsija, id-deċiżjoni u l-kodiċi tar-risposta għal isem imblukkat u wieħed approvat.
- Ikkonferma li s-sokit tar-resolver hu protett u li r-resolver magħżul iwieġeb minn ġewwa l-mina.
- Ikkonferma l-MTU tal-interface u l-checksum ta' risposta waħda li bnejt bl-idejn.
- Irrepeti l-istess paġna fuq Wi-Fi u fuq netwerk ċellulari, għax ir-resolvers tal-operatur u l-MTU tal-passaġġ ivarjaw.
Jekk il-ħamsa jżommu u l-paġna xorta tiddendel, is-suspettat li jmiss huwa l-għodda tat-trasferiment stess: qabbel talba maqbuda ma' risposta maqbuda u fittex għadd ta' bytes nieqes jew sokit nofshu magħluq. Ir-referenza ta' VpnService.Builder tkopri l-kuntratti tar-rotta, DNS u MTU, u protect() hija sejħa VpnService separata u mhux għażla tal-builder; interface konnessa tfisser biss li l-ewwel kuntratt ġie sodisfatt.