Құрылғыда shell аласыз, /etc/resolv.conf оқисыз немесе ескі net.dns1 мәнін қазып аласыз, және бір мекенжай аласыз. Алдыңыздағы қолданба мүлдем басқа нәрсе арқылы шешеді. Ағымдағы Android шығарылымында resolver желі бойынша: жүйе әр Network үшін саясат ұстайды және оны сұранысты жіберген socket-ке қолданады. Файл мен ескі қасиет қалдықтар, және екеуі де сұранысыңыздың шын мәнінде жүрген жолын сипаттамайды.

Бұл алшақтық split-tunnel және Private DNS енгізу кезінде көрінеді, мұнда бір телефондағы екі қолданба заңды түрде әртүрлі жауаптар көре алады. Бұл нұсқаулық қате немесе жоқ шешуден басталып, оған тиесілі конфигурацияға қарай кері жүреді.

Resolver желіге тиесілі, құрылғыға емес

Android 9 және одан кейінгі нұсқаларда атауларды шешу socket байланған Network-ке негізделетін жүйелік resolver арқылы жүреді. Әр желі өз LinkProperties мәліметтерін алып жүреді, және бұл қасиеттер тек сол желі үшін DNS серверлер тізімін, іздеу домендерін және Private DNS күйін сақтайды. Бұл модельде файлдан оқуға болатын біртұтас құрылғылық тізімге сәйкес келетін ештеңе жоқ.

VPN бөлінуді айқын етеді. Туннель көтерілгенде, VPN қолданбасы VPN-нің өз желісінде тіркелген DNS серверлерін береді, сондықтан ол арқылы бағытталған қолданбалар сол серверлерде шешеді, ал шығарылған қолданбалар астындағы желіні пайдалануды жалғастырады. Бір құрылғы, екі жауап жолы, қайшылық жоқ.

Суретті зардап шеккен қолданбаның ішінен оқыңыз

Қолданбаның өзінен сұраңыз. Context және кәдімгі android.permission.ACCESS_NETWORK_STATE рұқсаты бар әдіс жүйелік қасиеттерге тимей суретті оқи алады:

val cm = getSystemService(ConnectivityManager::class.java) ?: return
val network = cm.activeNetwork
val links = network?.let { cm.getLinkProperties(it) }

val dnsServers = links?.dnsServers
val privateDnsActive = links?.isPrivateDnsActive
val privateDnsName = links?.privateDnsServerName

activeNetwork — процесіңіздің әдепкі желісі, құрылғыдағы жалғыз желі емес, және шақырушының жарамды әдепкісі болмаса null болуы мүмкін. Блокталған әдепкі VPN — әдеттегі себеп. isPrivateDnsActive сол желідегі сұраныстардың TLS арқылы аталған resolver-ге баратынын айтады, бұл қарапайым UDP 53 сынағы нені көрсететінін өзгертеді. API беті LinkProperties астында құжатталған, және ондағы әрбір мән конфигурация суреті, нақты сұраныстың нақты серверге жеткенінің дәлелі емес.

Әдепкі желі жұмысты жасайтын желі болмаған кезде

Сурет тек әдепкі желі үшін жауап береді. Қолданба өз процесін немесе бір socket-ті басқа желіге байлай алады, сонда шешу сол таңдауды ұстанады, ал диагностикаңыз әлі де әдепкіні хабарлайды. Өз DNS-over-HTTPS resolver-ін әкелетін браузер жүйелік тізімге мүлдем жүгінбейді, сондықтан оның жауаптары құрылғының қалған бөлігі туралы ештеңе айтпайды. Жұмыс профилінің қолданбасы өз саясаты бар бөлек пайдаланушы астында жұмыс істейді. Серверлерді кінәламас бұрын байланысты тексеріңіз.

VPN интеграциясы — екінші жарты. dhcp-option DNS жолын OpenVPN профилінде қабылдау және сол мекенжайды Android VPN желісінде тіркеу — екі бөлек қадам, ал серверге жетпейтін маршрут қате мекенжай сияқты тыныш сәтсіздікке ұшырайды. Әзірлеу машинасынан adb shell dumpsys connectivity build рұқсат еткенде бірдей байланыс қасиеттерін желі бойынша басып шығарады, бұл код жазбай-ақ тізімді растайды.

Конфигурацияны өзіңізге рұқсат етілген бір шешіммен салыстырыңыз

Жеке атау кеңістігінде шешілуі керек атауды және бір жария атауды таңдап, екі нәтижені де суреттің қасына жазыңыз: желі, конфигурацияланған серверлер, Private DNS күйі және қатенің нақты мәтіні. Аталған серверге тікелей сұраныс сол сервердің сізге жауап беретінін дәлелдейді; ол қарапайым қолданба шешімінің оны таңдағанын дәлелдемейді. Кэштегі жауап жаңа тест емес, сондықтан кэшті тазалаңыз немесе бүгін ешкім сұрамаған атауды пайдаланыңыз.

Егер resolver тек белгілі бір кіру желісінің клиенттеріне қызмет етсе, оның VPN шығысынан кейін көретіні нәтижені шеше алады, және бұл оны басқаратын адам үшін саясат мәселесі, операторлардың UDP 53-ті блоктайтынының дәлелі емес. Private DNS белсенді жерде біліксіз хост атауы дизайн бойынша қабылданбауы мүмкін, ал сол сервер жария атауларға қалыпты жауап береді. Қасиеттерді оқу қай режимнің күшінде екенін айтады, сондықтан пакет сүзгілері туралы болжауды тоқтатасыз.

Сәйкессіздікке тиесілі қабатты түзетіңіз

Ғаламдық күйді өңдеудің орнына жоғары қарай жұмыс істеңіз. Қолданба қате желіге байланған болса, байланысты түзетіңіз. Профиль қате DNS опциясын берсе, профильді түзетіңіз. Private DNS resolver-і жеке аймағыңызға қызмет ете алмайтын желіде қатал болса, бұл құрылғыны басқару шешімі, функцияны барлық жерде өшіруге себеп емес.

Жария resolver-лерді DHCP ілгегіне немесе жүйелік қасиетке тығу — үнемі оқиғалар тудыратын түзету: жеке атаулар шешілуді тоқтатады, өзгеріс VPN сессиясынан асып түседі, және құрылғыдағы келесі адам иесіз ескірген мекенжай табады. Өзгерісті сәйкессіздікке тиесілі VPN, қолданба немесе басқару қабатының ішінде ұстаңыз, содан кейін серверлер тізімі шынымен өзгергенін растау үшін суретті қайта оқыңыз.

Соңында сіз бір желіге, resolver тізіміне және Private DNS күйіне байланған бір қолданба сұранысын қалайсыз. Осы тізбекті көрсете алған кезде, файлдағы таныс мекенжай енді ештеңенің дәлелі емес.

Қатысты мақалалар