Mac компьютеріңіз VPN-де қолданатын DNS шешушілерін қалай тексеруге болады
scutil --dns macOS шынымен құрған шешуші күйін шығарады. Әр блокты интерфейспен сәйкестендіріп, нақты атауды сұрап, қай сервер жауап бергенін дәлелдеңіз.
scutil --dns macOS шынымен жүгінетін шешуші конфигурациясын шығарады, параметрлер панеліне енгізген жалғыз DNS серверін емес. Шығыс көпшілік күткеннен ұзағырақ, себебі жүйе әдепкі жол, шектелген интерфейстер және доменге тән қайта бағыттау үшін бөлек шешуші блоктарын ұстайды. Шығыстың басындағы блок сұранысқа жауап беретін блок бола бермейді. Жеке атау кеңседе шешіліп, VPN көтерілген сәтте сәтсіз болса, сәйкессіздік сәйкестендіру ережелері мен маршруттарда, сервер мекенжайында емес. Алдымен ретті оқыңыз, содан кейін жауапты нақты іздеумен дәлелдеңіз.
Мекенжайлардан бұрын блоктардың ретін оқыңыз
Әр жазба resolver #N-мен ашылады және nameserver[0], кейде if_index, flags жолын, reach және блок қарапайым әдепкі болмағанда domain мен search domain тізімін көрсетеді. Доменті жоқ 1-ші шешуші — жария атауларды өңдейтін әдепкі шешуші. Туларында Scoped бар кез келген нәрсе if_index атайтын интерфейске байланған, ал Supplemental деп белгіленген кез келген нәрсе тек оның астында тізілген домендерге қатысты.
Таңдау — жұрнақты сәйкестендіру. intranet.corp.example тәрізді атау үшін macOS domain жазбасы ең ұзын сәйкес жұрнақ болып табылатын шешушіні қалайды, сондықтан domain : corp.example бар блок шығыстың тым төменінде тұрса да әдепкіден басым түседі. Бірдей ұзындықтағы домендер арасындағы теңдікті order шешеді. Алғашқы қарауға бұдан артық сирек қажет: бір блокты басынан аяғына дейін оқығыңыз келсе бүкіл шығыс, блоктардың ретін білу үшін бастапқы жолдар және өріс жолдарының қасында блок тақырыптарын шығаратын сүзілген өту. Шектелген блоктар өз тақырыбының астында шығады және үстіндегі тізімнің жалғасындай оқылады, сондықтан шығысты дәйексөздегенде тақырыпты көз алдыңызда ұстаңыз.
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-ті туннель интерфейсімен сәйкестендіріңіз
Индекс оның артындағы интерфейсті атай алғанда ғана пайдалы. scutil --nwi жүйе ұстайтын желілік ақпаратты, оның ішінде негізгі интерфейс пен қолжетімділікті тізіп шығарады, ал ifconfig -l сізге атауларды береді, онда utun0-ден utun9-ға дейін клиент әдетте жасайтын туннель үміткерлері. Apple scutil --dns-ні өзінің тексеру үлгісі ретінде орналастыру нұсқаулығында қолданады және Network Extension таңдалған домендерді таңдалған шешушілерге қалай бағыттай алатынын құжаттайды, дәл осы механизмді сол шектелген блоктар ашады.
Мәселені шешетін тексеру — шешуші туннель орнатқан жолда отыр ма:
scutil --nwi
ifconfig utun4
route -n get 10.20.0.53
netstat -rn | grep -m5 utun
Егер route -n get шешуші жазбасына сәйкес келмейтін шлюз мен интерфейс қайтарса, мекенжай толық дұрыс болып, бірақ қолжетімсіз болуы мүмкін. Тек корпоративтік қосымша желілерді тасымалдайтын бөлінген туннель олардан тыс DNS серверіне бағытталған сұраныстарды тастап кетеді, ал ақау уақыттың бітуі ретінде көрінеді, сондықтан конфигурация шығысы таза болып көріне береді.
Жүйелік шешушіден, содан кейін серверден сұраңыз
Үш құрал үш түрлі сұраққа жауап береді, оларды шатастыру осы саладағы қате қорытындылардың көбін тудырады. dscacheutil -q host -a name қарапайым қолданбалар қолданатын сол жүйелік шешуші арқылы өтеді, сондықтан шектелген және қосымша блоктар қолданылады. Сервер аргументі жоқ dig /etc/resolv.conf-ті оқиды, ол macOS-те шектелген шешім үшін шынайылық көзі емес және домен бойынша ережелерді толығымен өткізіп жібереді. dig @address дәл бір серверге жетеді және таңдау туралы ештеңе айтпайды.
dscacheutil -q host -a name intranet.corp.example
dig intranet.corp.example
dig @10.20.0.53 intranet.corp.example
nslookup intranet.corp.example
Бірінші команда жауап беріп, екіншісі NXDOMAIN қайтарса, сіз іздеген бөлінуді таптыңыз және ештеңе бұзылмаған. Біріншісі уақыт бітуіне жеткенде, dig @10.20.0.53 жауап беріп жатса, шешуші жұмыс істейді, бірақ туннель таңдаған жолда қолжетімсіз, сондықтан келесі қадам DNS параметрлерін өзгерту емес, route -n get. Жеке атауларды билетке немесе ортақ жазбаға қоятын кез келген нәрседен тыс ұстаңыз.
Шығыс сізге нені көрсете алмайды
Шешушілер тізімінің үстінде немесе қасында бірнеше қабат отырады және әрқайсысы сұранысты шығыс ешқашан атамайтын жерге жібере алады. Қауіпсіз DNS қосылған браузер өзінің шифрланған арнасы арқылы шеше алады, сондықтан dscacheutil уақыты бітіп жатқанда беттің жүктелуі қайшылық емес. Қауіпсіздік бағдарламасы орнатқан DNS проксиі Network Extension жеткізушісі ретінде жұмыс істейді және сұраныстарды өзі жібереді, ал scutil --dns ненің конфигурацияланғанын көрсетеді, прокси соңында қолданған жоғарғы мекенжайды емес. Іздеу домендері үшінші бүктемені қосады: толық емес атауға тізілген әр жұрнақ ретімен қосылады, сондықтан жауап берген блок сіз ешқашан күдіктенбеген блок болуы мүмкін.
Ескірген жауаптарды алып тастау ең арзан және ең жиі назардан тыс қалатын нәрсе:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
scutil --dns | head -20
Тазалаудан кейін шығыс өзгерсе, күй кэште болды және бұрынғы шығыс енді жоқ туннельді сипаттаған. Өзгермесе, конфигурация қандай болса сол, ал сұрақ маршруттар мен қолданба саясатына ауысады.
Алдында және кейінге арналған қысқа нұсқаулық
Бастапқы сызықты саясат рұқсат еткен жерде ғана алыңыз және файлдарды кез келген синхрондалатын қалтадан тыс ұстаңыз. Төмендегі рет — клиент машиналарында мен іске қосатын әрекеттер: бастапқы сызықты алыңыз, қосылыңыз, қайта алыңыз, содан кейін салыстырып, іздеңіз.
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
Айырмашылықты жолдар бойынша емес, блоктар бойынша оқыңыз. Күтілетін пішін — туннель интерфейсінің индексін және жеке жұрнақ үшін domain жазбасын алып жүретін жаңа шектелген шешуші. Жария мекенжайға сілтейтін жаңа әдепкі шешуші — клиент профилінің иесіне жеткізуге тұрарлық табыс. Содан кейін іздеуді шын мәнінде сәтсіз болған қолданбаның ішінде қайталаңыз, тек қабықта емес, және нәтиженің қасына route -n get-тен алынған интерфейсті жазып қойыңыз.
Өзгерістерді қайтару үшін қосылымды үзіп, бастапқы сызықты алуды қайталаңыз. Егер шектелген блок жоғалса, клиент өзінің артын тазалаған. Егер блок енді жоқ интерфейске қарсы тізілген болса, күй ескірген, ал тазалау және қайта қосылу — біреу профильге қол тигізбес бұрынғы ең жұмсақ түзету.
Осы ретпен төрт тексеру: шешуші блогы атаудың ең ұзын жұрнағына сәйкес келе ме; сол блок туннель орнатқан интерфейске байланған ба; оның атау серверіне барар маршрут туннельді қолдана ма; және жауапты dig емес, жүйелік шешуші қайтара ма. Бірінші сәтсіз тексеру DNS саясатын, туннель маршруттарын немесе қолданбаны өзгерту керектігін айтады. Төртеуі де өтіп, атау әлі шешілмесе, мәселе DNS-тен жоғарыда, ал келесі тексерілетін нәрсе — оның алдында 53 портына жауап беретін кез келген нәрсе.