Сейчас я прохожу онлайн-курс по системному администратору Linux, и мне задали вопрос, который я просто не понимаю. Я знаю, как искать сервер имен, если я прав, по крайней мере, он использует команду dig для поиска адреса в дополнительной команде section, но я немного растерялся, когда задал следующий вопрос.
Если ваш настроенный сервер имен не имеет кэшированных результатов, сколько серверов имен должен запросить ваш сервер имен для разрешения maps.google.com? Какие команды вы бы использовали, чтобы найти все эти серверы имен? Перечислите по одному на каждом уровне и объясните, почему этот уровень необходим.
Я не хочу ответа, я просто хотел бы знать, что именно меня просят сделать.
dig +trace
, но я не уверен, что подразумевается под уровнями. Это может быть вопрос для сбоя сервера.Ответы:
Хорошо, давайте выберем это.
«Предполагая, что у настроенного сервера имен нет кэшированных результатов» - во-первых, если у него вообще нет кэшированных данных, то он ничего не может разрешить. Чтобы заполнить кэш резолвера, вам нужно иметь записи NS и адреса (A, AAAA) для зоны
.
(AKA root). Это корневые серверы имен, которые находятся вroot-servers.net.
зоне. В этой зоне или этих DNS-серверах нет ничего волшебного. Тем не менее, эти данные часто предоставляются «вне диапазона» для распознавателя DNS, именно для заполнения кеша преобразователя. Только для авторитетных серверов имен эти данные не нужны, а для разрешения серверов имен.Также «разрешить» на что? Любой тип RR на это имя?
A
RR? Или что-то другое? Какой класс (CH
/ Chaosnet,IN
/ Интернет, ...)? Точный процесс будет другим, но общая идея останется прежней.Если мы можем предположить, что мы знаем, как найти корневые серверы имен, но не более того, и что под «разрешением» мы подразумеваем получение содержимого любых
IN A
RR, связанных с именем, это становится намного более практичным.Чтобы разрешить DNS-имя, вы в основном делите имя на метки, а затем идете справа налево. Не забывайте
.
в конце; вы бы действительно решили,maps.google.com.
а неmaps.google.com
. Это оставляет нас с необходимостью разрешения (мы знаем это, но реализация DNS-преобразователя, вероятно, не будет):.
com.
google.com.
maps.google.com.
Начните с выяснения, где спросить содержание
.
. Это легко; у нас уже есть эта информация: имена корневых серверов имен и IP-адреса . Итак, у нас есть корневой сервер имен. Допустим, мы решили использовать 198.41.0.4 (a.root-servers.net
также 2001: 503: ba3e :: 2: 30) для продолжения разрешения имени. На практике одно из первых действий, выполняемых распознавателем, вероятно, будет заключаться в том, чтобы использовать предоставленные данные корневого сервера, чтобы запросить у одного из серверов корневой зоны точный список серверов имен для корневой зоны, таким образом гарантируя, что если какой-либо из имена и IP-адреса действительны и доступны, у них будет полный и полный набор данных для корневой зоны, когда начнется разрешение.maps.google.com. IN A
Отстрелить DNS-запрос на 198.41.0.4. В ответ он скажет: «Нет, не собираюсь этого делать, но вот кто-то, кто может знать»; это реферал. Он содержитNS
записи для ближайшей зоны, о которой знает рассматриваемый сервер, а также любые склеенные записи, которые сервер имеет в наличии. Если склеенные данные недоступны, вам сначала нужно разрешить хост, названный в выбранной вами записи NS, поэтому создайте отдельное разрешение имен, чтобы получить IP-адрес; если доступны клейкие данные, у вас будет IP-адрес сервера имен, который как минимум «ближе» к ответу. В этом случае это будет набор серверов дляcom.
зоны, а также предоставляются склеенные данные.Повторите процесс, задав один из
com.
серверов имен тот же вопрос. Они тоже не знают, но направят вас к авторитетным серверам имен Google. На этом этапе в общем случае будет удар или пропуск, независимо от того, предоставлены ли данные склеивания или нет; ничто не мешаетcom
домену иметь серверы имен толькоnl
, например, в этом случае склеенные данные вряд ли будут доступны с серверов рДВУ. Предоставленные данные клея также могут быть неполными, или, если вам действительно не повезло, это может быть даже неверно! Вы всегда должны быть готовы к появлению той отдельной резолюции имен, которую я упоминал выше.По сути, вы продолжаете, пока не получите ответ с установленным
aa
флагом (достоверный ответ). Этот ответ будет сказать вам , что вы просите, или что RR вы просили не существует (илиNXDOMAIN
, илиNOERROR
с нулевыми записями данных ответа). Продолжайте искать ответы типаSERVFAIL
(и отступите на один шаг и попробуйте другой сервер, если он у вас есть; если все именованные серверы вернутсяSERVFAIL
, не пройдут процедуру разрешения имен и вернутсяSERVFAIL
к клиенту).Альтернативой запросу полного имени RR с каждого сервера (что может считаться плохой практикой) является использование разделенного списка меток, который мы определили ранее, запросить серверы имен, заданные сервером, дальше к корню для
IN NS
иIN A
/IN AAAA
RR. для этой метки, и используйте их для дальнейшего процесса разрешения имен. Это лишь незначительно отличается на практике, и тот же процесс все еще применяется.Вы можете смоделировать весь этот процесс, используя
+trace
опциюdig
утилиты, которая входит в состав BIND илиset debug
вnslookup
.Стоит также помнить, что некоторые типы RR (в частности
NS
,MX
и некоторые другие; такжеA6
некоторое время довольно разумно использовались, но устарели) могут ссылаться и на другие RR. В этом случае вам может понадобиться запустить еще один процесс разрешения имен, чтобы дать полный и полезный ответ вашему клиенту.источник
dig
можете использовать имя ns1.google.com после получения на него реферала, который не содержит IP-адрес в предоставленных склеенных записях. Затем вы продолжите предыдущий процесс разрешения имен.Существует
dnstracer
команда (вам может потребоваться установить ее, по крайней мере, в Debian, это также имя пакета), которая отслеживает разрешение имен. Вы также можете (как указывает Koveras в комментарии) использоватьdig
.Вот с днстрачером.
-s .
значит начать с рута;-4
означает использовать IPv4 (v6 здесь не работает ...);-o
означает фактически показать разрешенные IP-адреса в конце (я опустил эту часть вывода, их много).Этот вывод продолжается, так как dnstracer отслеживает все пути (так что вы можете увидеть, например, что некоторые из серверов имен имеют устаревшую зону).
Итак, вы можете видеть, что он отправляет один запрос к корневому серверу имен, а затем один к gtld-серверам (серверу для зоны .com), и, наконец, к серверу имен Google.
С
dig
выходом получается намного более многословным (поэтому я буду много резать):dig
дополнительно показывает, что он выполнил запрос для получения текущего списка корневых серверов имен. Это то, что DNS-сервер обычно делает очень редко. Так что я не уверен, считаешь ли ты это в своем случае с кешем.Вы , конечно , можете также посмотреть фактические запросы на проволоке с, например,
wireshark
.источник
dig
если у вас нетdnstracer
(или если вам нравитсяdig
форматирование). IP-адреса, которые выводит dnstracer, являются IP-адресами серверов имен; их имена слева. a.root-servers.net - 198.41.0.4 и т. д. Это запрашиваемые серверы, и в квадратных скобках указывается, для какой зоны. Я подозреваю, что первый уровень - * .root-servers.net (для.
), второй - * .gtld-servers.net (для.com
) и т. Д.