Android DNS-ийг зөв уншина уу: сүлжээ тус бүрээр, resolv.conf-д биш
Таны Android апп дөнгөж уншсан resolv.conf-оор биш, сүлжээ тус бүрийн resolver-оор шийддэг. Эхлээд LinkProperties, socket холболт, Private DNS-ийг шалгана уу.
Төхөөрөмж дээр 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?.privateDnsServerNameactiveNetwork нь таны процессын үндсэн сүлжээ бөгөөд төхөөрөмж дээрх цорын ганц сүлжээ биш, дуудагчид ашиглах боломжтой үндсэн сүлжээ байхгүй үед 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 төлөвтэй холбогдсон нэг аппын хүсэлтийг хүснэ. Энэ гинжийг харуулж чадсаны дараа файл дахь танил хаяг ямар ч баталгаа биш болно.