scutil --dns macOS haqiqatan murojaat qiladigan hal qiluvchi konfiguratsiyasini chop etadi, sozlamalar panelida yozgan yagona DNS serverini emas. Chiqish ko‘pchilik kutganidan uzun, chunki tizim standart yo‘l, doirasi cheklangan interfeyslar va domenga xos yo‘naltirish uchun alohida hal qiluvchi bloklarini saqlaydi. Chiqishning yuqoridagi bloki so‘rovga javob beradigan blok bo‘lishi shart emas. Agar maxfiy ism ofisda hal bo‘lib, VPN ko‘tarilgan lahzada muvaffaqiyatsiz bo‘lsa, nomuvofiqlik moslashtirish qoidalari va marshrutlarda, server manzilida emas. Avval tartibni o‘qing, keyin javobni haqiqiy qidiruv bilan isbotlang.

Manzillardan oldin blok tartibini o‘qing

Har bir yozuv resolver #N bilan ochiladi va nameserver[0], ba’zan if_index, flags satri, reach hamda blok oddiy standart bo‘lmaganda domain va search domain ro‘yxatini ko‘rsatadi. Domeni yo‘q 1-raqamli hal qiluvchi — ommaviy ismlarga xizmat qiladigan standart. Belgilarida Scoped bo‘lgan har qanday narsa if_index nomlaydigan interfeysga bog‘langan, va Supplemental bilan belgilangan har qanday narsa faqat uning ostida sanab o‘tilgan domenlarga tegishli.

Tanlov — qo‘shimchani moslashtirish. intranet.corp.example kabi ism uchun macOS domain yozuvi eng uzun mos keladigan qo‘shimcha bo‘lgan hal qiluvchini afzal ko‘radi, shu sababli domain : corp.example bor blok chiqishning ancha pastida turgan bo‘lsa ham standartni yengadi. Bir xil uzunlikdagi domenlar orasidagi tenglikni order hal qiladi. Birinchi qarashga bundan ortig‘i kamdan-kam kerak: bitta blokni boshidan oxirigacha o‘qimoqchi bo‘lganda butun chiqish, bloklar tartibini bilish uchun boshlang‘ich satrlar va maydon satrlari yonida blok sarlavhalarini chop etadigan filtrlangan aylanish. Doirasi cheklangan bloklar o‘z sarlavhasi ostida ko‘rinadi va yuqoridagi ro‘yxatning davomi kabi o‘qiladi, shuning uchun chiqishdan iqtibos keltirganda sarlavhani ko‘z oldingizda tuting.

scutil --dns
scutil --dns | sed -n '1,45p'
scutil --dns | grep -nE '^resolver #|^DNS configuration'
scutil --dns | grep -nE 'resolver #[0-9]+|if_index|domain|flags|nameserver'

if_index ni tunnel interfeysi bilan bog‘lang

Indeks faqat uning orqasidagi interfeysni nomlay olganingizda foydali. scutil --nwi tizim saqlaydigan tarmoq ma’lumotlarini sanab o‘tadi, jumladan asosiy interfeys va yetib borish, ifconfig -l esa sizga nomlarni beradi, bu yerda utun0 dan utun9 gacha klient odatda yaratadigan tunnel nomzodlari. Apple scutil --dns ni o‘zining tekshiruv namunasi sifatida joylashtirish qo‘llanmasida ishlatadi va Network Extension tanlangan domenlarni tanlangan hal qiluvchilarga qanday yo‘naltira olishini hujjatlashtiradi; o‘sha cheklangan bloklar ochib beradigan mexanizm aynan shu.

Masalani hal qiladigan tekshiruv — hal qiluvchi tunnel o‘rnatgan yo‘lda o‘tiribdimi:

scutil --nwi
ifconfig utun4
route -n get 10.20.0.53
netstat -rn | grep -m5 utun

Agar route -n get hal qiluvchi yozuviga to‘g‘ri kelmaydigan shlyuz va interfeys qaytarsa, manzil butunlay to‘g‘ri bo‘lib, baribir yetib bo‘lmasligi mumkin. Faqat korporativ quyi tarmoqlarni tashuvchi bo‘lingan tunnel ulardan tashqaridagi DNS serveriga qaratilgan so‘rovlarni tashlab yuboradi, nosozlik esa vaqt tugashi sifatida ko‘rinadi, shuning uchun konfiguratsiya chiqishi toza ko‘rinishda qolaveradi.

Tizim hal qiluvchisidan so‘rang, keyin serverdan

Uch asbob uch xil savolga javob beradi, ularni aralashtirish bu sohadagi noto‘g‘ri xulosalarning ko‘pini keltirib chiqaradi. dscacheutil -q host -a name oddiy ilovalar ishlatadigan o‘sha tizim hal qiluvchisi orqali o‘tadi, shuning uchun cheklangan va qo‘shimcha bloklar amal qiladi. Server argumentisiz dig /etc/resolv.conf ni o‘qiydi, bu macOS’da cheklangan hal qilish uchun haqiqat manbasi emas, va domen bo‘yicha qoidalarni butunlay chetlab o‘tadi. dig @address roppa-rosa bitta serverga yetadi va tanlov haqida hech narsa aytmaydi.

dscacheutil -q host -a name intranet.corp.example
dig intranet.corp.example
dig @10.20.0.53 intranet.corp.example
nslookup intranet.corp.example

Birinchi buyruq javob berib, ikkinchisi NXDOMAIN qaytarsa, siz izlagan bo‘linish topildi va hech narsa buzilmagan. Birinchisi vaqt tugashi bilan tugasa, dig @10.20.0.53 javob bersa, hal qiluvchi ishlaydi, lekin tunnel tanlagan yo‘lda yetib bo‘lmaydi, shuning uchun keyingi qadam DNS sozlamalarini o‘zgartirish emas, route -n get. Maxfiy ismlarni chipta yoki umumiy eslatmaga yopishtirgan har qanday narsadan uzoq tuting.

Chiqish sizga nimani ko‘rsata olmaydi

Hal qiluvchilar ro‘yxati ustida yoki yonida bir necha qatlam o‘tiradi va har biri so‘rovni chiqish hech qachon tilga olmaydigan joyga yuborishi mumkin. Xavfsiz DNS yoqilgan brauzer o‘zining shifrlangan kanali orqali hal qilishi mumkin, shuning uchun dscacheutil vaqti tugayotganda sahifaning yuklanishi qarama-qarshilik emas. Xavfsizlik dasturi o‘rnatgan DNS proksisi Network Extension ta’minotchisi sifatida ishlaydi va so‘rovlarni o‘zi uzatadi, scutil --dns esa nima sozlanganini ko‘rsatadi, proksis oxirida ishlatgan yuqori manzilni emas. Qidiruv domenlari uchinchi burmani qo‘shadi: to‘liq bo‘lmagan ismga sanab o‘tilgan har bir qo‘shimcha tartib bilan qo‘shiladi, shuning uchun javob bergan blok siz hech qachon shubhalanmagan blok bo‘lishi mumkin.

Eskirgan javoblarni chiqarib tashlash eng arzon va eng ko‘p o‘tkazib yuboriladigan narsa:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
scutil --dns | head -20

Tozalashdan keyin chiqish o‘zgarsa, holat keshda edi va oldingi chiqish endi mavjud bo‘lmagan tunnelni tasvirlagan. O‘zgarmasa, konfiguratsiya qanday bo‘lsa shunday, va savol marshrutlar hamda ilova siyosatiga o‘tadi.

Oldin va keyin uchun qisqa qo‘llanma

Asosiy chiziqni faqat siyosat ruxsat bergan joyda oling va fayllarni har qanday sinxronlangan papkadan tashqarida tuting. Quyidagi ketma-ketlik men mijoz mashinalarida bajaradigan ishlar: asosiy chiziqni oling, ulanib, yana oling, so‘ngra solishtiring va qidiring.

scutil --dns > ~/dns-before.txt
# connect the VPN, then:
scutil --dns > ~/dns-after.txt
diff -u ~/dns-before.txt ~/dns-after.txt
dscacheutil -q host -a name intranet.corp.example

Farqni satrlar bo‘yicha emas, bloklar bo‘yicha o‘qing. Tunnel interfeysi indeksini va maxfiy qo‘shimcha uchun domain yozuvini olib yuruvchi yangi cheklangan hal qiluvchi — kutilgan shakl. Ommaviy manzilga ishora qiluvchi yangi standart hal qiluvchi — mijoz profili egasiga yetkazishga arziydigan topilma. So‘ngra qidiruvni haqiqatan muvaffaqiyatsiz bo‘lgan ilova ichida takrorlang, faqat qobiqda emas, va natija yonida route -n get interfeysini yozib qo‘ying.

O‘zgarishni bekor qilish uchun uzilib, asosiy chiziq olishni takrorlang. Agar cheklangan blok ketgan bo‘lsa, mijoz o‘zini tozalagan. Agar blok endi mavjud bo‘lmagan interfeysga qarshi sanab o‘tilgan bo‘lsa, holat eskrigan, va kimdir profilga tegmazdan oldin tozalash va qayta ulanish eng yumshoq tuzatishdir.

Shu tartibda to‘rt tekshiruv: hal qiluvchi bloki ismning eng uzun qo‘shimchasiga mos keladimi; o‘sha blok tunnel o‘rnatgan interfeysga bog‘langanmi; uning ism serveriga boradigan marshrut tunneldan foydalanadimi; va javobni dig emas, tizim hal qiluvchisi qaytaradimi. Birinchi muvaffaqiyatsiz tekshiruv DNS siyosatini, tunnel marshrutlarini yoki ilovani o‘zgartirish kerakligini aytadi. To‘rttasi ham o‘tib, ism hali ham hal bo‘lmasa, muammo DNS dan yuqorida, va keyingi tekshiriladigan narsa — uning oldida 53 portga javob beradigan har qanday narsa.

O'xshash maqolalar