Таны 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 портод хариулж буй бүхэн юм.