Даването на адрес на резолвер на клиент определя накъде се изпращат заявките, а не кой източник ще види резолвер. Маршрутизацията, препращането и транслацията получават своя ред между двата края. Ръководството за въпроси за източника проследява заявката стъпка по стъпка и записва какво е видял всеки наблюдател в действителност. Редът е важен, защото твърдение, направено преди наблюдението, е само догадка в по-добро оформление.

Запишете подредбата, преди да събирате доказателства

Четири места могат да ви кажат нещо за DNS източник и не всички казват едно и също. Ядрото на клиента знае кой източник би използвало, препращачът знае какво е изпратил нагоре, устройството, което транслира, знае какво е презаписало, а приемащият резолвер знае какво е пристигнало. Запишете до кои от тях наистина можете да стигнете, преди да съберете каквото и да е.

Observation pointWhat it can proveWhat it cannot proveHow to read it
client kernelwhich source address it would use for that resolveranything a device in between rewroteip route get against the resolver address
forwarderthat it sent an upstream query, and from which sourcewhat the client originally asked forits own log and its cache state
translating devicethat a source was rewritten, and to whatwhether the query was legitimateNAT policy and its counters
receiving resolverthe address that actually arrivedwhich client behind that address askeda scoped capture on port 53

Запишете и очакването си, включително резолвера, който смятате, че се използва. Разделен маршрут може да изпрати заявка съвсем другаде, а кешът може да отговори без никакъв обмен нагоре, затова предположение, държано само в паметта, няма да преживее първата изненада. Дръжте заявената схема и наблюдавания път в отделни колони на една и съща бележка; когато двете не съвпадат, намерили сте въпроса, който си заслужава да бъде проследен.

Проверете кой процес в действителност е изпратил заявката

Започнете от клиента: запишете адреса на резолвера, името на заявката и времето, после потвърдете кой процес я е изпратил. Първият ред по-долу назовава процеса, който държи UDP сокета, и това е проверката, която обещава това заглавие. Ако този процес е помощник на браузъра или среда за изпълнение на контейнер вместо системния резолвер, остатъкът от следата описва път, който никой не е поискал.

ss -tunp 'dport = :53'
dig @10.20.30.53 host.corp.example +noall +answer
ip route get 10.20.30.53

На хост с няколко интерфейса първо разберете кой адрес на източника избира ядрото за тази дестинация, преди да гледате другаде. Това е последната точка, в която пътят е напълно под ваш контрол, и това е стойността, която ще сравните с онова, което съобщава резолверът. Разминаването е сигнал, че нещо по средата е презаписало пакета или че са изпратени две различни заявки.

Дръжте тестовите имена вътрешни, защото вътрешно име, изпратено до публичен резолвер, не доказва нищо за вътрешния път и публикува име, което не е трябвало да публикувате. Браузър с включен защитен DNS изобщо няма да се появи в този списък със сокети, и самото това отсъствие е отговорът.

Препращачът прави втора, отделна заявка

Препращачът превръща един обмен в два. Заявката отдолу пристига, а след това препращачът изпраща своята собствена заявка нагоре от адрес, който избира. Неговата конфигурация, а не клиентът, решава какво вижда горният резолвер.

Ръководството на dnsmasq си заслужава четенето точно поради тази причина: то документира как препращачът избира сървъри нагоре и обвързва своята страна за слушане, и нищо в тази подредба не носи източника на клиента нагоре. Затова журнал на резолвер, който показва адрес на шлюз, е нормален, а не доказателство за повреда. Отсъствието е също толкова лесно да се прочете погрешно, защото попадение в кеша не създава никаква заявка нагоре и изглежда идентично на заявка, която никога не е пристигнала. Прочетете конфигурацията на препращача и състоянието на кеша му, преди да направите който и да е от двата извода. Два въпроса, две места за гледане.

Прочетете източника на приемащия резолвер

Единственото наблюдение, което решава това, се прави от страната на сървъра. Всичко, изведено от списъка с интерфейси на клиента, остава хипотеза, докато резолверът не съобщи какво в действителност е пристигнало.

tcpdump -ni any port 53 and host 10.20.30.53

Снимайте на хоста на резолвера, дръжте снимката кратка и ограничена и я съхранявайте там, където политиката позволява. Ако наблюдаваният източник е транслиран адрес, следващият въпрос е кое устройство е извършило транслацията и дали неговата политика е предвидената. Снимката отговаря какво е пристигнало; тя не обяснява защо политиката го е позволила. Назовете наблюдателя и стъпката в бележката, защото твърдение за поверителност относно шлюз се отнася до тази стъпка, а не до целия път.

Запишете находката като път, а не като адрес

Запишете клиента, резолвера, всеки препращач, наблюдавания източник на всяка стъпка и политиката, която го управлява. Такъв запис отговаря на повечето бъдещи въпроси без нова снимка. Начертайте го като верига, защото списъкът с адреси скрива коя стъпка е дала кой.

Приложете към чертежа датата, версията на клиента и ревизията на конфигурацията, за да може по-късен читател да каже дали тя все още е в сила. Отделете транспортния източник от всичко останало, което услугата обработва, защото гледката на адрес на шлюз не казва нищо за това какво друго се съхранява. Нито местоположението на резолвера казва нещо за това кой клиент е питал. Именно разделянето на тези твърдения прави извода защитим при преглед.

Подобни статии