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 жазуусун алып жүргөн жаңы чектелген чечүүчү — күтүлгөн форма. Коомдук дарекке көрсөткөн жаңы демейки чечүүчү — клиент профилинин ээсине жеткирүүгө татыктуу табылга. Анан издөөнү чындап ишке ашпаган колдонмонун ичинде кайталаңыз, shell'де гана эмес, жана жыйынтыктын жанына route -n get-тен алынган интерфейсти жазып коюңуз.
Өзгөртүүнү кайтаруу үчүн туташууну үзүп, базалык сызыкты алууну кайталаңыз. Эгер чектелген блок жоголсо, клиент өзүнүн артын тазалаган. Эгер блок эми жок интерфейске каршы тизилип турса, абал эскирген, ал эми тазалоо жана кайра туташуу — бирөө профилге кол тийгизээрден мурунку эң жумшак оңдоо.
Ушул тартипте төрт текшерүү: чечүүчү блогу аттын эң узун уландысына дал келеби; ошол блок туннель орноткон интерфейске байланганбы; анын ат серверине барган маршрут туннелди колдонобу; жана жоопту dig эмес, системалык чечүүчү кайтарабы. Биринчи ишке ашпаган текшерүү DNS саясатын, туннелдин маршруттарын же колдонмону өзгөртүү керектигин айтат. Төртөө тең өтүп, ат дагы эле чечилбесе, маселе DNS'тен жогору, ал эми кийинки текшериле турган нерсе — анын алдында 53 портуна жооп берген нерсе.