Android колдонмосу VPN сыртында аттарды чечет: байлоону текшерүү тизмеси
VPN күйүк турганда да Android демейки тармак аркылуу аттарды чече алат. Процессти VPN тармагына байлап, колдонмо кайсы resolver-ды колдонгонун текшериңиз.
Android колдонмосу ички атты чече албайт, ал эми VPN кардарынын өз браузери ага жетет жана ошол эле куруу башка телефондо иштейт. URL — өзгөрмө эмес. Өзгөрмө — колдонмо процессине чечүү үчүн кайсы тармакты колдонууга уруксат берилгени, жана Android активдүү VPN сиздин сокеттериңиз колдонгон тармак экенине кепилдик бербейт. Бул текшерүүлөрдү тартиби менен аткарыңыз жана resolver сүрөтү болжолуңузга туура келбегенде токтоңуз.
1-кадам: колдонмо кайсы тармакта экенин далилдеңиз
Статус тилкесин эмес, колдонмонун өз көрүнүшүн окуңуз. ConnectivityManager аркылуу активдүү тармакты, анын LinkProperties, DNS серверлер тизмесин жана жеке DNS жөндөөсүн алыңыз. Эгер тизмеде VPNдин resolverи болсо, колдонмонун ага жолу бар; эгер анда Wi-Fiдин resolverи болсо, туннель ошол процесс үчүн демейки тармак эмес.
VPN белгиси туннель бар экенин гана айтат. Ал колдонмо процесси ага байланганын айтпайт, жана Android аттарды чечүүнү дайыма активдүү көрүнгөн тармак аркылуу багыттай бербейт. Башка түзмөккө жиберүүчү жергиликтүү VPN колдонмолору, интернети жок Wi-Fi тармактары жана өндүрүүчүнүн куруулары колдонмону туннелдин серверлеринин ордуна демейки resolverден сурап калтырышы мүмкүн.
2-кадам: VPN транспортун сурап, процессти байлаңыз
Колдонмо туннелдин resolverин сөзсүз колдонушу керек болгондо, VPN транспорту бар тармакты сураңыз жана callbackте процессти байлаңыз, ошондо код тармак качан пайда болорун болжолдобойт:
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)
}
})
Бул чакыруу бүт процесстин демейки тармагын өзгөртөт, ошондуктан андан кийин түзүлгөн ар бир сокет аны колдонот. Мурунтан бар сокеттер түзүлгөн тармагын сактайт, ошондуктан байлоого чейин ачылган туташуулар пулу эски жол менен чечүүнү улантышы мүмкүн. Кайтарылган маани boolean, ал эми false жыйынтык байлоо болбогонун билдирет; кыска кечигүү менен кайра аракет кылыңыз жана эки аракетти тең журналга жазыңыз.
3-кадам: байлоону керектүү нерсе менен чектеңиз
Бүт процессти байлоо орой. Телеметрия, жаңыртууларды текшерүү жана үчүнчү тараптын SDKлары да туннелге өтөт, ал эми туннелде интернет болбосо, алар иштен чыга баштайт. Бир суроо үчүн тармактын сокет фабрикасын колдонуңуз, калганынын баарын түзмөктүн демейкисинде калтырыңыз. Бир моделди атайын тандаңыз: ар бир туташуу үчүн кууш байлоо, же VPN жоголгондо ачык ажыратуу менен процесс байлоосу.
Resolverдин эки өзгөчөлүгү байлоону эч кандай катасыз жеңиши мүмкүн. Катуу режимдеги жеке DNS суроолорду тармак resolverинин ордуна аталган DoT серверине жиберет, ал эми өз DNS-over-HTTPS кардары менен келген колдонмо системанын resolverин толугу менен айланып өтөт. Байлоо ишке ашпады деп жыйынтык чыгарардан мурун экөөнү тең текшериңиз. VPNдин DNS серверине эч качан жетпеген суроо туннел тараптагы эч бир журналда көрүнбөйт.
4-кадам: CONNECTED чектөөсүнө ишенбеңиз
WorkManagerдеги NetworkType.CONNECTED тармак туташканын билдирет, жана VPN транспорту астындагы Wi-Fi же уюлдук байланыш жоголгондо да аны канааттандырат. Тапшырма аткарылат, ар бир суроо ишке ашпайт, ал эми кайталоо саясаты аны пландоо катасына окшош бороонго айландырат. Туннель — тармак; чектөө эч качан интернет текшерүү болгон эмес.
Жумушка чындап керектүү мүмкүнчүлүктү текшериңиз, мисалы ырасталган интернет жеткиликтүүлүгүн, жана артка чегинүү менен чектелген кайталоо саясатын кармаңыз. Эгер тапшырмага жеке ат керек болсо, жумушту аткарардан мурун ошол атты тандалган тармакта чечиңиз, жана ийгиликтүү боло албаган суроону кайталоонун ордуна так ката менен тез токтоңуз.
5-кадам: далилдерди жазып, диапазонду кайра текшериңиз
Тандалган тармактын транспорт түрлөрүн, LinkPropertiesтен алынган DNS серверлерди, байлоо true кайтардыбы, жана биринчи суроонун так ишке ашпаганын журналга жазыңыз. Анан ошол эле байлоо астында жеке атты жана ачык атты иштетиңиз. Бул жуп колдонмо туннелдин resolverин колдондубу же үнсүз түрдө түзмөктүн демейкисине кайттыбы, ошону көрсөтөт, жана бул колдонуучу сезген айырма.
Колдогон эң эски Android версиясында жана бир учурдагы чыгарылышта кайталаңыз. Демейки жолду туура көрсөткөн resolver жүрүм-туруму — түзмөктөр жана версиялар айырмаланган так ошол жер, ал эми эң жаңы сыноо түзмөгүндө гана өткөн куруу сиз жеткирген диапазон үчүн текшерилген эмес. adb shell dumpsys connectivity — бузулушту кайра жаратып жатканда түзмөк кайсы тармактарды жана мүмкүнчүлүктөрдү билдирерин тез ырастоонун жолу.