App Android ma jirnexxilux isolvi isem intern waqt li l-brawżer tal-klijent VPN stess jilħqu, u l-istess build taħdem fuq telefon ieħor. L-URL mhuwiex il-varjabbli. Il-varjabbli huwa liema netwerk huwa permess li l-proċess tal-app juża għas-soluzzjoni, u Android ma jiggarantixxix li l-VPN attiva hija dik li jużaw is-sockets tiegħek. Agħmel dawn il-verifiki fl-ordni u waqaf meta l-istampa tar-resolver ma taqbilx mal-assunzjoni tiegħek.

Pass 1: ipprova liema netwerk qiegħed fih l-app

Aqra l-veduta tal-app stess, mhux il-bar tal-istat. Minn ConnectivityManager, ġib in-netwerk attiv, il-LinkProperties tiegħu, il-lista tas-servers DNS u s-setting tad-DNS privat. Jekk il-lista fiha r-resolver tal-VPN, l-app għandha triq lejh; jekk fiha r-resolver tal-Wi-Fi, it-tunnel mhuwiex in-netwerk awtoritarju għal dak il-proċess.

Ikona tal-VPN tgħid biss li teżisti tunnel. Ma tgħidx li l-proċess tal-app kien marbut miegħu, u Android mhux dejjem jgħaddi s-soluzzjoni tal-ismijiet min-netwerk li jidher attiv. Applikazzjonijiet VPN lokali li jgħaddu lil apparat ieħor, netwerks Wi-Fi mingħajr internet u builds tal-manifattur jistgħu kollha jħallu l-app tistaqsi lir-resolver awtoritarju minflok is-servers tat-tunnel.

Pass 2: itlob it-trasport VPN u rbot il-proċess

Meta l-app trid tuża r-resolver tat-tunnel, itlob netwerk bit-trasport VPN u rbot il-proċess fil-callback, sabiex il-kodiċi ma jaqsamx meta jidher in-netwerk:

val request = NetworkRequest.Builder()
    .addTransportType(NetworkCapabilities.TRANSPORT_VPN)
    .build()

connectivityManager.requestNetwork(request, object : NetworkCallback() {
    override fun onAvailable(network: Network) {
        val bound = connectivityManager.bindProcessToNetwork(network)
        Log.i(TAG, "bound to VPN network: " + bound)
    }
})

Is-sejħa tbiddel in-netwerk awtoritarju tal-proċess kollu, allura kull socket maħluq wara jużaha. Is-sockets li diġà jeżistu jżommu n-netwerk li fih inħolqu, u għalhekk pool ta' konnessjonijiet miftuħ qabel l-irbit jista' jkompli jsolvi mit-triq il-qadima. Il-valur li jintradd hija boolean, u riżultat falz ifisser li l-irbit ma seħħx; erġa' pprova b'dewmien qasir u illoggja ż-żewġ attentati.

Pass 3: illimita l-irbit għal dak li jeħtieġu

L-irbit tal-proċess kollu huwa goff. It-telemetrija, il-verifiki tal-aġġornament u l-SDK ta' partijiet terzi wkoll jiċċaqilqu lejn it-tunnel, u jekk it-tunnel m'għandux internet jibdew ifallu. Għal talba waħda, uża l-fabbrika tas-sockets tan-netwerk u ħalli l-awtoritarju tal-apparat għal kull ħaġa oħra. Agħżel mudell wieħed b'mod deliberat: irbit dejjaq għal kull konnessjoni, jew irbit tal-proċess bi tneħħija espliċita meta l-VPN tisparixxi.

Żewġ karatteristiċi tar-resolver jistgħu jegħlbu l-irbit mingħajr ebda żball. Id-DNS privat fil-modalità stretta jibgħat il-mistoqsijiet lil server DoT bl-isem minflok lir-resolver tan-netwerk, u app li ġġib il-klijent DNS-over-HTTPS tagħha stess tgħaddi għal kollox mir-resolver tas-sistema. Iċċekkja t-tnejn qabel ma tikkonkludi li l-irbit falla. Mistoqsija li qatt ma tasal għand is-server DNS tal-VPN ma tidhirx f'ebda log fuq in-naħa tat-tunnel.

Pass 4: tafdax restrizzjoni CONNECTED

NetworkType.CONNECTED f'WorkManager ifisser li netwerk huwa konness, u t-trasport VPN jissodisfaha anke meta l-link Wi-Fi jew ċellulari ta' taħt ikun mar. Ix-xogħol jitħaddem, kull talba tfalli, u l-politika ta' erġa' pprova tibdilha fi maltempata li tidher bħala bug ta' skedar. It-tunnel huwa netwerk; ir-restrizzjoni qatt ma kienet verifika tal-internet.

Iċċekkja l-kapaċità li x-xogħol tassew jeħtieġ, bħall-aċċess għall-internet validat, u żomm politika ta' erġa' pprova limitata b'backoff. Jekk ix-xogħol jeħtieġ isem privat, solvi dak l-isem fin-netwerk magħżul qabel ma tagħmel ix-xogħol, u falli malajr bi żball ċar minflok terġa' tipprova talba li ma tistax tirnexxi.

Pass 5: irreġistra l-evidenza u erġa' ttestja l-firxa

Illoggja t-tipi ta' trasport tan-netwerk magħżul, is-servers DNS minn LinkProperties, jekk l-irbit irritornax veru, u l-falliment eżatt tal-ewwel talba. Imbagħad ħaddem isem privat u isem pubbliku taħt l-istess irbit. Dak il-par juri jekk l-app użatx ir-resolver tat-tunnel jew waqgħet bil-kwiet għall-awtoritarju tal-apparat, u dik hija d-differenza li jesperjenza l-utent.

Errepeti fuq l-eqdem verżjoni Android li tappoġġja u fuq rilaxx wieħed attwali. L-imġiba tar-resolver li tagħmel it-triq awtoritarja tidher korretta hija eżattament fejn jiddifferixxu l-apparati u l-verżjonijiet, u build li jgħaddi biss fuq l-aktar apparat tat-test ġdid mhijiex verifikata għall-firxa li tibgħat. adb shell dumpsys connectivity hija mod mgħaġġel biex tikkonferma liema netwerks u kapaċitajiet jirrapporta l-apparat waqt li tkun qed tirriproduċi l-falliment.

Artikli relatati