Android aplikazio batek ezin du barneko izen bat ebatzi VPN bezeroaren nabigatzaileak hara iristen duen bitartean, eta eraikin berak beste telefono batean funtzionatzen du. Aldagaia ez da URLa. Aldagaia aplikazioaren prozesuak ebazteko zein sare erabil dezakeen da, eta Android-ek ez du bermatzen VPN aktiboa zure socketek erabiltzen duten hura denik. Egin egiaztapen hauek ordenan eta gelditu ebazlearen argazkia zure ustearekin bat ez datorrenean.

1. urratsa: Egiaztatu zein saretan dagoen aplikazioa

Irakurri aplikazioaren beraren ikuspegia, ez egoera-barra. ConnectivityManager tik lortu sare aktiboa, haren LinkProperties , DNS zerbitzarien zerrenda eta DNS pribatuaren ezarpena. Zerrendak VPNaren ebazlea badu, aplikazioak bidea du hara; Wi-Fiaren ebazlea badu, tunela ez da prozesu horren lehenetsitako sarea.

VPN ikono batek tunel bat badagoela baino ez du esaten. Ez du esaten aplikazioaren prozesua hari lotu zitzaionik, eta Android-ek ez du izen-ebazpena beti aktibo dirudien saretik bideratzen. Beste gailu batera birbidaltzen duten VPN aplikazio lokalek, internetik gabeko Wi-Fi sareek eta fabrikatzaileen eraikinek aplikazioa lehenetsitako ebazlera joatera utz dezakete tunelaren zerbitzarietara joan beharrean.

2. urratsa: Eskatu VPN garraioa eta lotu prozesua

Aplikazioak tunelaren ebazlea erabili behar duenean, eskatu VPN garraioa duen sare bat eta lotu prozesua callback-ean, kodeak ez dezan asmatu sare noiz agertuko den:

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)
    }
})

Deiak prozesu osoaren lehenetsitako sarea aldatzen du, beraz geroago sortutako socket bakoitzak hura erabiltzen du. Dagoeneko existitzen diren socketek sortu ziren sarea gordetzen dute, eta horregatik loturaren aurretik irekitako konexio-pool batek bide zaharretik ebazten jarrai dezake. Itzultzen den balioa boolearra da, eta false emaitzak lotura ez zela gertatu esan nahi du; saiatu berriro atzerapen laburraren ondoren eta erregistratu bi saiakerak.

3. urratsa: Mugatu lotura behar duenari

Prozesu osoko lotura zakarra da. Telemetriak, eguneratze-egiaztapenek eta hirugarrenen SDKek ere tunelera pasatzen dute, eta tunelek internetik ez badu huts egiten hasten dira. Eskaera bakarrerako, erabili sarearen socket fabrika eta mantendu gailuaren lehenetsia gainerako guztiarentzat. Aukeratu eredu bat nahita: lotura estu bat konexio bakoitzeko, edo prozesuaren lotura deskonexio esplizituarekin VPN desagertzen denean.

Ebazlearen bi funtziok lotura gaindi dezakete errorerik gabe. DNS pribatuak modu zorrotzean izendatutako DoT zerbitzari bati bidaltzen dizkio kontsultak sarearen ebazleari beharrean, eta bere DNS-over-HTTPS bezeroa dakarren aplikazio batek sistemaren ebazlea erabat saihesten du. Egiaztatu biak loturak huts egin zuela ondorioztatu aurretik. VPNaren DNS zerbitzarira inoiz iristen ez den kontsulta ez da tunelaren aldeko erregistro batean ere agertuko.

4. urratsa: Ez konfiantzarik CONNECTED murrizketan

WorkManager-en NetworkType.CONNECTED ikurrak sare bat konektatuta dagoela esan nahi du, eta VPN garraioak betetzen du azpiko Wi-Fi edo mugikor esteka desagertu denean ere. Lana exekutatzen da, eskaera guztiek huts egiten dute, eta berriro saiatzeko politikak planifikazio-errore baten itxura duen ekaitz bihurtzen du. Tunela sare bat da; murrizketa ez zen inoiz interneterako egiaztapena izan.

Egiaztatu lanak benetan behar duen gaitasuna, adibidez balioztatutako internet sarbidea, eta mantendu muga bat duen berriro saiatzeko politika atzerapenez. Lanak barneko izen bat behar badu, ebatzi izen hori hautatutako sarean lana egin aurretik, eta huts egin azkar errore argi batekin arrakasta izan ezin duen eskaera bat errepikatu beharrean.

5. urratsa: Erregistratu frogak eta probatu berriro tartea

Erregistratu hautatutako sarearen garraio motak, LinkProperties tik DNS zerbitzariak, loturak true itzuli zuen eta lehen eskaeraren hutsegite zehatza. Gero exekutatu barneko izen bat eta izen publiko bat lotura beraren pean. Bikote horrek erakusten du aplikazioak tunelaren ebazlea erabili zuen ala isilik gailuaren lehenetsira erori zen, eta hori da erabiltzaileak bizi duen aldea.

Errepikatu onartzen duzun Android bertsio zaharrenean eta uneko bertsio batean. Lehenetsitako bidea zuzena dirudiela eragiten duen ebazle-portaera da gailuak eta bertsioak desberdintzen diren tokia, eta proba-gailu berrienean soilik pasatzen den eraikin bat ez dago bidaltzen duzun tarterako egiaztatuta. adb shell dumpsys connectivityhutsegitea erreproduzitzen duzun bitartean gailuak zein sare eta gaitasun jakinarazten dituen baieztatzeko modu azkarra da.

Erlazionatutako artikuluak