Kako provjeriti DNS razrješivače koje vaš Mac koristi na VPN-u
scutil --dns ispisuje stanje razrješivača koje je macOS stvarno izgradio. Uparite svaki blok sa sučeljem, pošaljite upit za stvarno ime i dokažite koji je poslužitelj odgovorio.
scutil --dns ispisuje konfiguraciju razrješivača koju macOS stvarno koristi, a ne onaj jedini DNS poslužitelj koji ste upisali u ploču postavki. Ispis je dulji nego što većina ljudi očekuje, jer sustav drži odvojene blokove razrješivača za zadani put, za sučelja s dosegom i za prosljeđivanje specifično za domene. Blok na vrhu ispisa nije nužno onaj koji odgovara na upit. Ako se privatno ime razriješi u uredu i prestane raditi u trenutku kad se VPN podigne, nesklad je u pravilima uparivanja i rutama, a ne u adresi poslužitelja. Prvo pročitajte redoslijed, a zatim dokažite odgovor stvarnim upitom.
Pročitajte redoslijed blokova prije adresa
Svaki zapis počinje s resolver #N i navodi nameserver[0], ponekad if_index, redak flags, reach, a kad blok nije obična zadana vrijednost, domain i popis search domain. Razrješivač broj 1 bez domene je zadani koji obrađuje javna imena. Sve što u zastavicama nosi Scoped vezano je uz sučelje koje imenuje if_index, a sve označeno s Supplemental primjenjuje se samo na domene navedene ispod njega.
Odabir je uparivanje sufiksa. Za ime poput intranet.corp.example macOS preferira razrješivač čiji je zapis domain najdulji odgovarajući sufiks, pa blok sa domain : corp.example pobjeđuje zadani čak i kad stoji duboko u ispisu. order razrješava izjednačenja između domena iste duljine. Prvi pogled rijetko treba više: cijeli ispis kad želite pročitati jedan blok od početka do kraja, početne retke da naučite redoslijed blokova i filtrirani prolaz koji ispisuje zaglavlja blokova uz retke polja. Blokovi s dosegom pojavljuju se pod vlastitim naslovom i čitaju se kao nastavak popisa iznad njih, pa držite naslov na vidiku kad god citirate ispis.
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'
Uparite if_index sa sučeljem tunela
Indeks je koristan samo ako možete imenovati sučelje iza njega. scutil --nwi navodi mrežne podatke koje sustav drži, uključujući primarno sučelje i dosegljivost, dok ifconfig -l daje imena, gdje su utun0 do utun9 kandidati za tunel koje klijent obično stvara. Apple koristi scutil --dns kao vlastiti primjer provjere u vodiču za implementaciju, i dokumentira kako Network Extension može usmjeriti odabrane domene na odabrane razrješivače, što je mehanizam koji ti blokovi s dosegom otkrivaju.
Provjera koja rješava pitanje jest sjedi li razrješivač na putu koji je tunel instalirao:
scutil --nwi
ifconfig utun4
route -n get 10.20.0.53
netstat -rn | grep -m5 utun
Ako route -n get vrati pristupnik i sučelje koji se ne podudaraju sa zapisom razrješivača, adresa može biti posve ispravna i ipak nedostupna. Podijeljeni tunel koji nosi samo korporativne podmreže odbacuje upite usmjerene na DNS poslužitelj izvan njih, a kvar se očituje kao istek vremena, zato ispis konfiguracije i dalje izgleda čisto.
Pitajte sustavski razrješivač, pa poslužitelj
Tri alata odgovaraju na tri različita pitanja, a njihovo miješanje stvara većinu pogrešnih zaključaka u ovom području. dscacheutil -q host -a name prolazi kroz isti sustavski razrješivač koji koriste obične aplikacije, pa vrijede blokovi s dosegom i dopunski blokovi. dig bez argumenta poslužitelja čita /etc/resolv.conf, što nije izvor istine za razrješavanje s dosegom na macOS-u, i potpuno preskače pravila po domeni. dig @address doseže točno jedan poslužitelj i ne govori ništa o odabiru.
dscacheutil -q host -a name intranet.corp.example
dig intranet.corp.example
dig @10.20.0.53 intranet.corp.example
nslookup intranet.corp.example
Kad prva naredba odgovori, a druga vrati NXDOMAIN, pronašli ste podjelu koju ste tražili i ništa nije pokvareno. Kad prva istekne, dok dig @10.20.0.53 odgovara, razrješivač radi, ali nije dostupan na putu koji je tunel odabrao, pa je sljedeći korak route -n get, a ne izmjena DNS postavki. Držite privatna imena izvan svega što zalijepite u tiket ili zajedničku bilješku.
Što vam ispis ne može pokazati
Nekoliko slojeva sjedi iznad ili uz popis razrješivača, i svaki može poslati upit negdje što ispis nikad ne spominje. Preglednik s uključenim sigurnim DNS-om može razrješavati preko vlastitog šifriranog kanala, pa stranica koja se učita dok dscacheutil istječe nije proturječje. DNS proxy koji instalira sigurnosni softver radi kao pružatelj Network Extensiona i sam prosljeđuje upite, a scutil --dns pokazuje što je konfigurirano, a ne adresu uzvodno koju je proxy na kraju upotrijebio. Domene pretraživanja dodaju treći nabor: na nekvalificirano ime dodaje se svaki navedeni sufiks po redu, pa blok koji je odgovorio može biti onaj koji nikad niste ni slutili.
Zastarjeli odgovori najjeftinije se isključuju i najčešće se preskaču:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
scutil --dns | head -20
Ako se ispis promijeni nakon čišćenja, stanje je bilo u predmemoriji i raniji je ispis opisivao tunel koji više nije postojao. Ako se ne promijeni, konfiguracija je takva kakva jest i pitanje se seli na rute i na politiku aplikacija.
Kratki priručnik za prije i poslije
Snimite osnovno stanje samo tamo gdje politika dopušta i držite datoteke izvan svake sinkronizirane mape. Slijed u nastavku je ono što pokrećem na klijentskim strojevima: snimite osnovno stanje, povežite se, snimite ponovno, zatim usporedite i pretražite.
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
Čitajte razliku po blokovima, a ne po recima. Novi razrješivač s dosegom koji nosi indeks sučelja tunela i zapis domain za privatni sufiks očekivani je oblik. Novi zadani razrješivač koji pokazuje na javnu adresu nalaz je koji vrijedi iznijeti onome tko posjeduje profil klijenta. Zatim ponovite upit unutar aplikacije koja je stvarno zakazala, ne samo u ljusci, i zabilježite sučelje iz route -n get uz rezultat.
Da poništite promjenu, prekinite vezu i ponovite snimanje osnovnog stanja. Ako je blok s dosegom nestao, klijent je počistio za sobom. Ako je blok još naveden uz sučelje koje više ne postoji, stanje je zastarjelo, a čišćenje plus ponovno povezivanje najnježniji je popravak prije nego što itko dotakne profil.
Četiri provjere ovim redom: odgovara li koji blok razrješivača najduljem sufiksu imena; je li taj blok vezan uz sučelje koje je tunel instalirao; koristi li ruta do njegova poslužitelja imena tunel; i vraća li odgovor sustavski razrješivač, a ne dig. Prva provjera koja padne kaže vam treba li promijeniti DNS politiku, rute tunela ili aplikaciju. Ako sve četiri prođu, a ime i dalje ne uspijeva, problem je iznad DNS-a i sljedeće što treba pregledati je sve što ispred njega odgovara na port 53.