Získate shell na zariadení, prečítate /etc/resolv.conf alebo vyhrabete starú hodnotu net.dns1, a dostanete jednu adresu. Aplikácia pred vami prekladá cez niečo úplne iné. V aktuálnej verzii Androidu je resolver pre každú sieť: systém drží zásadu pre každú Network a uplatňuje ju na socket, ktorý požiadavku odoslal. Súbor a stará vlastnosť sú pozostatky a ani jedno z nich neopisuje cestu, ktorou váš dotaz skutočne prešiel.

Táto medzera sa ukáže pri zavádzaní split-tunnelu a Private DNS, kde dve aplikácie na tom istom telefóne môžu legitímne vidieť rôzne odpovede. Tento sprievodca začína pri chybnom alebo chýbajúcom preklade a ide späť ku konfigurácii, ktorej patrí.

Resolver patrí sieti, nie zariadeniu

Preklad názvov na Androide 9 a novšom prechádza systémovým resolverom, ktorý sa riadi Network, ku ktorej je socket pripojený. Každá sieť nesie vlastné LinkProperties a tieto vlastnosti obsahujú zoznam serverov DNS, vyhľadávacie domény a stav Private DNS iba pre túto sieť. Nič v tomto modeli nezodpovedá jednému zoznamu pre celé zariadenie, ktorý by ste mohli prečítať zo súboru.

VPN rozdelenie zviditeľní. Keď tunel vstane, aplikácia VPN dodá servery DNS registrované na vlastnej sieti VPN, takže aplikácie smerované cez ňu prekladajú cez tieto servery, zatiaľ čo vylúčené aplikácie ďalej používajú podkladovú sieť. Jedno zariadenie, dve cesty odpovede, žiadny rozpor.

Prečítajte snímku zvnútra postihnutej aplikácie

Opýtajte sa samotnej aplikácie. Metóda, ktorá má Context a bežné povolenie android.permission.ACCESS_NETWORK_STATE, môže snímku prečítať bez toho, aby sa dotkla systémových vlastností:

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 je predvolená sieť vášho procesu, nie jediná sieť v zariadení, a môže byť null, keď volajúci nemá použiteľnú predvolenú sieť. Zablokovaná predvolená VPN je obvyklý dôvod. isPrivateDnsActive vám povie, či dotazy v tejto sieti idú cez TLS k pomenovanému resolveru, čo mení, čo vám ukáže prostá sonda UDP 53. Povrch API je zdokumentovaný pod LinkProperties a každá hodnota v ňom je snímka konfigurácie, nie dôkaz, že konkrétny dotaz dorazil na konkrétny server.

Keď predvolená sieť nie je tá, ktorá robí prácu

Snímka odpovedá len za predvolenú sieť. Aplikácia môže proces alebo jediný socket pripojiť k inej sieti a preklad potom nasleduje túto voľbu, zatiaľ čo vaša diagnostika stále hlási predvolenú sieť. Prehliadač s vlastným resolverom DNS-over-HTTPS systémový zoznam vôbec nekonzultuje, takže jeho odpovede nič nehovoria o zvyšku zariadenia. Aplikácia pracovného profilu beží pod samostatným používateľom s vlastnou zásadou. Skontrolujte väzbu, skôr než obviníte servery.

Integrácia VPN je druhá polovica. Prijať riadok dhcp-option DNS v profile OpenVPN a zaregistrovať túto adresu v sieti VPN Androidu sú dva samostatné kroky a chýbajúca trasa k serveru zlyháva rovnako ticho ako zlá adresa. Z vývojového stroja vypíše adb shell dumpsys connectivity rovnaké vlastnosti prepojenia pre každú sieť, keď to zostavenie dovolí, čo zoznam potvrdí bez písania kódu.

Porovnajte konfiguráciu s jedným prekladom, ktorý smiete vykonať

Vyberte názov, ktorý sa musí preložiť v súkromnom mennom priestore, a jeden verejný názov, a zapíšte oba výsledky vedľa snímky: sieť, nakonfigurované servery, stav Private DNS a presný text chyby. Priamy dotaz na pomenovaný server dokazuje, že tento server vám odpovedá; nedokazuje, že ho zvolil bežný preklad aplikácie. Odpoveď z medzipamäte nie je čerstvý test, takže medzipamäť vyprázdnite alebo použite názov, na ktorý sa dnes nikto nepýtal.

Ak resolver obsluhuje len klientov z určitej prístupovej siete, môže to, čo vidí po odchode z VPN, rozhodnúť o výsledku, a to je otázka zásad pre toho, kto ho prevádzkuje, nie dôkaz, že operátori blokujú UDP 53. Tam, kde je Private DNS aktívny, môže byť nekvalifikovaný názov hostiteľa odmietnutý zámerne, zatiaľ čo ten istý server verejné názvy normálne zodpovedá. Čítanie vlastností vám povie, ktorý režim platí, takže prestanete hádať filtre paketov.

Opravte vrstvu, ktorej nezhoda patrí

Postupujte nahor namiesto úprav globálneho stavu. Ak je aplikácia pripojená k zlej sieti, opravte väzbu. Ak profil dodáva zlú voľbu DNS, opravte profil. Ak je Private DNS striktný v sieti, ktorej resolver nedokáže obslúžiť vašu súkromnú zónu, je to rozhodnutie správy zariadenia, nie dôvod funkciu všade vypnúť.

Pretláčať verejné resolvery do háku DHCP alebo systémovej vlastnosti je oprava, ktorá neustále spôsobuje incidenty: súkromné názvy prestanú prekladať, zmena prežije reláciu VPN a ďalší človek na zariadení nájde zastaranú adresu bez vlastníka. Držte zmenu vnútri VPN, aplikácie alebo vrstvy správy, ktorej nezhoda patrí, a potom snímku znova prečítajte, aby ste potvrdili, že sa zoznam serverov skutočne zmenil.

Na konci chcete jedinú požiadavku aplikácie zviazanú s jednou sieťou, zoznamom resolverov a stavom Private DNS. Keď dokážete ten reťaz ukázať, známa adresa v súbore prestáva byť dôkazom čohokoľvek.

Súvisiace články