Какая служба используется для получения ip адреса по имени хоста компьютера

Обновлено: 02.07.2024

9.2 Процесс получения IP-адреса по DHCP. DHCP-клиент и DHCP-сервер

9.2.1 Введение

9.2.2 Упрощенный алгоритм взаимодействия DHCP-сервера и DHCP-клиента.

Сразу скажу, что сейчас мы разберем упрощенный алгоритм взаимодействия между DHCP-сервером и клиентом, мы не будем рассматривать специфичные случаи, а прикинемся, что работаем в идеальной сети, где нет никаких конфликтов, дублирований и проблем. В дальнейшем этот алгоритм мы будем расширять.

Первое и важное условие нормальной работы DHCP-сервера заключается в том, что он должен находиться в одной подсети/канальной среде с клиентом, иначе ничего работать не будет. В дальнейшем мы убедимся, что это не всегда так и если сервер и клиент находятся в разных подсетях, то им необходим посредник, который называется DHCP Relay Agent. Ну а теперь перейдем к алгоритму взаимодействия между клиентом и сервером по DHCP.

9.2.3 DHCP-клиент и DHCP-сервер, базовая настройка.

Теперь нам нужно закрепить полученные знания о взаимодействие между DHCP-сервером и DHCP-клиентом на практике, для этого мы расчехлим Cisco Packet Tracer и соберем простую схему, которая показана ниже.

9.2.2 Схема сети для демонстрации взаимодействия между DHCP-клиентом и сервером

Вокруг этой схемы мы и будем плясать, в центре схемы находится обычный L2 коммутатор, в его настройки мы не лезем, поэтому можно смело утверждать, что все устройства в нашей сети находятся в одной канальной среде. К коммутатору подключен роутер, который будет выпускать наших клиентов в Интернет, его мы безбожно обозвали основной шлюз (про разницу между хабами, коммутаторами и роутерами можно почитать здесь). Также на схеме есть два DHCP-сервера, которые уже подключены к коммутатору и три клиента, из которых пока подключен только один.

Перед началом настройки схемы не забудьте переключить Cisco Packet Tracer в режим симуляции. Роутеру и двум серверам нужно будет назначить статический IP-адрес, так как здесь адреса ни при каких сбоях не должны измениться, роутер для клиентов является основным шлюзом, а DHCP-сервера источником настроек. Клиент должен получать настройки динамически.

9.2.3.1 Настройка протокола DHCP на сервере и клиенте в Cisco Packet Tracer

Покажу настройку только одного DHCP-сервера, на втором настройки должны быть идентичны, за исключением IP-адреса. Для начала назначим серверу IP-адрес вручную, сам себе сервер выдавать IP-адреса не умеет.

9.2.3 Настройки протокола IP на DHCP сервере

Серверу я не стал давать адрес шлюза по умолчанию, так как серверу не нужен доступ в Интернет, где найти IP настройки для устройств в Cisco Packet Tracer, вы уже должны знать, показывал и не один раз. Следующим пунктом нашей программы будет настройка DHCP на сервере. Для этого перейдите на вкладку Services и в левом меню выберете DHCP.

9.2.4 Настройки DHCP на сервере

Обратите внимание, здесь уже заполнены поля Start IP Address и Subnet Mask, мы же еще помним, что и клиент, и сервер должны находиться в одной канальной среде, чтобы было всё гуд. Когда мы назначили IP-адрес на интерфейс сервера, Cisco Packet Tracer сам назначил значения в эти поля за нас, если IP-адрес не назначать, то в этих полях будут унылые нули.

Предлагаю пока не трогать эти поля, а изменить значения у полей Pool Name и Default Gateway. Мои настройки показаны ниже.

9.2.5 Продолжаем настраивать DHCP сервер

9.2.5 Продолжаем настраивать DHCP сервер

Все изменения я выделил, для начала был включен DHCP при помощи чекбокса, затем я дал имя новому пулу IP-адресов, который сервер будет использовать для выдачи клиентам, а также была указана дополнительная опция в виде адреса шлюза по умолчанию. Чтобы пул был добавлен, следует нажать кнопку Add, после чего внизу у нас появится два пула IP-адресов: один – этот тот, что создали мы, второй – это тот, что был создан Cisco Packet Tracer автоматически. Чтобы не было проблем, удалите второй, для этого его нужно выделить и нажать на кнопку Remove, если не получится удалить автоматический пул, настройте его так, как я показал и удалите свой собственный. На втором сервере настройки нужно сделать аналогичными, разница будет только в IP-адресе, который вы назначите серверу.

Итак, что мы сделали, чтобы настроить DHCP-сервер, а сделали мы следующее:

  1. Настроили IP-адрес на интерфейсе сервера.
  2. Создали пул IP-адресов, из которого сервер будет выдавать настройки клиенту.
  3. Дали этому пулу имя, так как пулов у DHCP-сервера может быть несколько.
  4. Указали начальный IP-адрес пула (поле Start IP Address), это означает, что сервер будет пытаться выдавать IP-адреса, начиная с 192.168.0.1 (а не с 192.168.0.0, ведь сервер понимает, что это номер сети, а также он немного в курсе о том, что в 21 веке мы все используем маску подсети переменной длины, а про классовые сети мы все уже забыли).
  5. Также мы дали указание серверу выдавать две опции: маску подсети и IP-адрес шлюза по умолчанию.

Собственно, это всё, что нам сейчас необходимо. Сейчас мы сконфигурировали DHCP-сервер в режиме автоматической выдачи динамических IP-адресов, для нас этот режим самый интересный.

9.2.3.2 Настройки DHCP на клиенте

Настройка DHCP на клиенте гораздо проще, нужно только поставить галочку напротив «Получать IP-адрес по DHCP» и забыть про утомительный ручной труд.

9.2.6 Настройка протокола DHCP на клиенте

9.2.6 Настройка протокола DHCP на клиенте

Фразы «Гибкая настройка» и Cisco Packet Tracer плохо совместимы, в реальных операционных системах вы сможете задать: какие параметры рабочая станция должна получить по DHCP, а какие параметры вы можете ввести своими руками. Но это нам сейчас не интересно, нам важно разобраться с тем, как клиент получает IP-адрес от DHCP сервера и это мы сделаем. Настройка протокола DHCP на клиенте на этом закончена.

9.2.4 Как клиент получает IP-адрес по DHCP

Схема собрана и настроена, теперь нам надо понять, как клиент получает IP-адрес по DHCP от сервера. В тот момент, когда вы завершите настройку DHCP на клиенте, машина поймет, что она не имеет IP-адрес, а также увидеть указание о том, что она должна получить этот IP-адрес по DHCP. Поэтому первое, что сделает DHCP-клиент – это сформирует запрос DHCPDISCOVER, которым попытается найти сервер.

На зеленый пакет, сформированный сервером, не обращайте внимание. Нас интересует желтый пакет, который сформировал клиент, это и есть DHCPDISCOVER, давайте на него посмотрим.

Здесь сразу видно, что пртокол DHCP работает на прикладном уровне моделей OSI 7 и TCP/IP. Также тут видно, что клиент еще не разу не получал IP-адрес от сервера и даже не знает, где этот сервер находится. На транспортном уровне протокол DHCP инкапсулируется в UDP дейтаграммы, когда клиент делает запрос серверу, то в качестве порта источника он выбирает 68 порт, а в качестве порта назначения используется 67 порт.

Клиент не знает IP-адрес сервера, да и своего у него еще нет, поэтому на сетевом уровне в качестве IP-адреса источника он использует IP-адрес 0.0.0.0, а в качестве IP-адреса назначения используется 255.255.255.255. Мы видим, что это широковещательный запрос.

На канальном уровне клиент указывает свой мак-адрес в качестве источника и широковещательный мак-адрес в качестве назначения. Ниже показана структура пакета DHCPDISCOVER, но с ней мы будем разбираться на примере дампа Wireshark.

9.2.9 Структура пакета DHCPDISCOVER в Cisco Packet Tracer

9.2.9 Структура пакета DHCPDISCOVER в Cisco Packet Tracer

А сейчас продолжим разбираться и посмотрим, что будет, когда запрос DHCPDISCOVER дойдет до серверов.

9.2.10 Запрос DHCPDISCOVER дошел до всех участников канальной среды

9.2.10 Запрос DHCPDISCOVER дошел до всех участников канальной среды

Здесь мы видим, что DHCPDISCOVER, посланный клиентом, дошел до всех участников канальной среды, что и не мудрено, ведь он широковещательный, но этот запрос оказался интересным только двум нашим DHCP-серверам. Когда сервер получил DHCPDISCOVER он понял, что в сети появился клиент, которому нужно выдать IP-адрес, сервер смотрит на пул IP-адресов, который у него есть и ищет свободный адрес, обычно это процесс упорядоченный и клиенту будет выдан первый свободный адрес из пула.

Но тут всё не так просто, дело в том, что компьютерная сеть – это то место, где изменения происходят очень быстро, поэтому прежде чем сформировать DHCPOFFER, сервер должен убедиться, что в сети еще не появился какой-нибудь негодяй, который уже начал использовать IP-адрес, который сервер решил выдать этому клиенту, а может случиться так, что другой сервер выдал выбранный адрес клиенту чуть раньше, это надо проверить.

Поскольку у нас канальная среда Ethernet, то для проверки будет идеальным протокол ARP, он позволяет опросить все устройства в канальной среде. Вы же знаете, что при помощи ARP-запроса машины узнают мак-адреса по известному IP-адресу. И дело тут в том, что серверу известен IP-адрес, который он хочет выдать клиенту, он его и использует в ARP-запросе и кричит на всю канальную среду: кто использует IP-адрес такой-то?

ARP-запрос – это зеленый пакет, на котором нет значка паузы. Наши сервера настроены одинаково, базы данных у них сейчас одинаковые, поэтому и ARP-запросы они делают одинаковые, сам запрос показан ниже.

9.2.11 DHCP-сервер делает ARP запрос, чтобы проверить занятость IP-адреса

9.2.11 DHCP-сервер делает ARP запрос, чтобы проверить занятость IP-адреса

Тут мы видим, что наш первый сервер спрашивает всех соседей по канальной среде: у кого IP-адрес 192.168.0.1, я сервер с IP-адресом 192.168.0.2? Но, как мы помним, адрес 192.168.0.1 мы настроили на роутере, он уже занят. И ничего страшного, что этот адрес занят нашим маршрутизатором, маршрутизатор получит ARP-запрос и любезно на него ответит своим ARP-ответом, получив ответ, наши сервера поймут, что адрес 192.168.0.1 занят и нужно искать следующий адрес для выдачи.

В зависимости от реализации, после ARP-запроса, сервер может еще попробовать и попинговать IP-адрес 192.168.0.1, чтобы окончательно убедиться в том, что он занят. Такие проверки будут продолжаться до тех пор, пока DHCP-сервера не доберутся до IP-адрес 192.168.0.4 в своем пуле, ведь это первый адрес, который еще не используется в нашей сети, для этого адреса будет сформирован ARP-запрос, на который никто не ответит.

9.2.13 ARP-запрос от DHCP сервера, на который никто не ответит

9.2.13 ARP-запрос от DHCP сервера, на который никто не ответит

9.2.16 Внутренности пакета DHCPOFFER

Во-первых, сервер понимает, что у клиента еще нет IP-адреса, понимает сервер это потому, что в его базе данных еще нет мак-адреса клиента и нет сопоставления этого мак-адреса с IP-адресом, который был выдан. Во-вторых, мы видим, что сервер предлагает клиенту получить IP-адрес 192.168.0.4. В-третьих, в пакете DHCPOFFER сервер указывает свой IP-адрес, чтобы клиент знал, кто ему это всё предложил.

Получив DHCPOFFER клиент не забирает себе IP-адрес, сперва он должен убедиться, что этот адрес еще никто не использует, для этого он делает ARP-запрос в сеть, в данном случае ему был предложен адрес 192.168.0.4, значит и спрашивать клиент будет: кто в сети использует адрес 192.168.0.4? Клиенты не используют ICMP для проверки, им это не надо, а вот серверам надо, в дальнейшем мы поймем – в каких ситуациях это действительно необходимо.

  1. С каким сервером клиент захотел работать.
  2. На какой IP-адрес клиент согласился.

В процессе написания я столкнулся с еще одной странностью в Cisco Packet Tracer: после ARP-запроса клиент получил IP-адрес и на этом всё закончилось. Поэтому дальше только словесное описание, а потом мы его дополним дампами из Wireshark.

Если в командной строке клиента сейчас выполнить команду ipconfig, то можно будет увидеть настройки, которые клиент получил от сервера.

DNS (англ. DomainNameSystem — система доменных имён) — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства), получения информации о маршрутизации почты, обслуживающих узлах для протоколов в домене (SRV-запись).

Распределённая база данных DNS поддерживается с помощью иерархии DNS-серверов, взаимодействующих по определённому протоколу.Основой DNS является представление об иерархической структуре доменного имени и зонах. Каждый сервер, отвечающий за имя, может делегировать ответственность за дальнейшую часть домена другому серверу (с административной точки зрения — другой организации или человеку), что позволяет возложить ответственность за актуальность информации на серверы различных организаций (людей), отвечающих только за «свою» часть доменного имени.

DNS обладает следующими характеристиками:

1. Распределённостьадминистрирования. Ответственность за разные части иерархической структуры несут разные люди или организации.

2. Распределённость хранения информации. Каждый узел сети в обязательном порядке должен хранить только те данные, которые входят в его зону ответственности и (возможно) адреса корневых DNS-серверов.

3. Кеширование информации. Узел может хранить некоторое количество данных не из своей зоны ответственности для уменьшения нагрузки на сеть.

4. Иерархическая структура, в которой все узлы объединены в дерево, и каждый узел может или самостоятельно определять работу нижестоящих узлов, или делегировать (передавать) их другим узлам.

5. Резервирование. За хранение и обслуживание своих узлов (зон) отвечают (обычно) несколько серверов, разделённые как физически, так и логически, что обеспечивает сохранность данных и продолжение работы даже в случае сбоя одного из узлов.

Ключевыми понятиями DNS являются:

Ресурсная запись — единица хранения и передачи информации в DNS. Каждая ресурсная запись имеет имя (то есть привязана к определенному Доменному имени, узлу в дереве имен), тип и поле данных, формат и содержание которого зависит от типа.

Зона — часть дерева доменных имен (включая ресурсные записи), размещаемая как единое целое на некотором сервере доменных имен (DNS-сервере, см. ниже), а чаще — одновременно на нескольких серверах (см. ниже). Целью выделения части дерева в отдельную зону является передача ответственности (см. ниже) за соответствующий домен другому лицу или организации. Это называется делегированием (см. ниже). Как связная часть дерева, зона внутри тоже представляет собой дерево. Если рассматривать пространство имен DNS как структуру из зон, а не отдельных узлов/имен, тоже получается дерево; оправданно говорить о родительских и дочерних зонах, о старших и подчиненных. На практике, большинство зон 0-го и 1-го уровня ('.', ru, com, …) состоят из единственного узла, которому непосредственно подчиняются дочерние зоны. В больших корпоративных доменах (2-го и более уровней) иногда встречается образование дополнительных подчиненных уровней без выделения их в дочерние зоны.

Делегирование — операция передачи ответственности за часть дерева доменных имен другому лицу или организации. За счет делегирования в DNS обеспечивается распределенность администрирования и хранения. Технически делегирование выражается в выделении этой части дерева в отдельную зону, и размещении этой зоны на DNS-сервере (см. ниже), управляемом этим лицом или организацией. При этом в родительскую зону включаются «склеивающие» ресурсные записи (NS и А), содержащие указатели на DNS-сервера дочерней зоны, а вся остальная информация, относящаяся к дочерней зоне, хранится уже на DNS-серверах дочерней зоны.

DNS-сервер — специализированное ПО для обслуживания DNS, а также компьютер, на котором это ПО выполняется. DNS-сервер может быть ответственным за некоторые зоны и/или может перенаправлять запросы вышестоящим серверам.

DNS-клиент — специализированная библиотека (или программа) для работы с DNS. В ряде случаев DNS-сервер выступает в роли DNS-клиента.

Авторитетность (англ. authoritative) — признак размещения зоны на DNS-сервере. Ответы DNS-сервера могут быть двух типов: авторитетные (когда сервер заявляет, что сам отвечает за зону) и неавторитетные (англ. Non-authoritative), когда сервер обрабатывает запрос, и возвращает ответ других серверов. В некоторых случаях вместо передачи запроса дальше DNS-сервер может вернуть уже известное ему (по запросам ранее) значение (режим кеширования).

DNS-запрос (англ. DNS query) — запрос от клиента (или сервера) серверу. Запрос может быть рекурсивным или нерекурсивным (см. Рекурсия).

Система DNS содержит иерархию DNS-серверов, соответствующую иерархии зон. Каждая зона поддерживается как минимум одним авторитетным сервером DNS (от англ. authoritative — авторитетный), на котором расположена информация о домене.

Имя и IP-адрес не тождественны — один IP-адрес может иметь множество имён, что позволяет поддерживать на одном компьютере множество веб-сайтов (это называется виртуальный хостинг). Обратное тоже справедливо — одному имени может быть сопоставлено множество IP-адресов: это позволяет создавать балансировку нагрузки. Для повышения устойчивости системы используется множество серверов, содержащих идентичную информацию, а в протоколе есть средства, позволяющие поддерживать синхронность информации, расположенной на разных серверах. Существует 13 корневых серверов, их адреса практически не изменяются.

Имя хоста и IP-адрес не тождественны — хост с одним IP-адресом может иметь множество имён, что позволяет поддерживать на одном компьютере множество веб-сайтов (это называется виртуальный хостинг). Обратное тоже справедливо — одному имени может быть сопоставлено множество хостов: это позволяет создавать балансировку нагрузки.

Запрос на определение имени обычно не идёт дальше кеша DNS, который помнит (ограниченное время) ответы на запросы, проходившие через него ранее. Организации или провайдеры могут по своему усмотрению организовывать кэш DNS. Вместе с ответом приходит информация о том, сколько времени следует хранить эту запись в кэше.

Для повышения устойчивости системы используется множество серверов, содержащих идентичную информацию. Существует 13 корневых серверов, расположенных по всему миру и привязанных к своему региону, их адреса никогда не меняются, а информация о них есть в любой операционной системе.

Обратный DNS-запрос

DNS используется в первую очередь для преобразования символьных имён в IP-адреса, но он также может выполнять обратный процесс. Для этого используются уже имеющиеся средства DNS. Дело в том, что с записью DNS могут быть сопоставлены различные данные, в том числе и какое-либо символьное имя. Существует специальный домен in-addr.arpa, записи в котором используются для преобразования IP-адресов в символьные имена. Например, для получения DNS-имени для адреса 11.22.33.44 можно запросить у DNS-сервера запись 44.33.22.11.in-addr.arpa, и тот вернёт соответствующее символьное имя. Обратный порядок записи частей IP-адреса объясняется тем, что в IP-адресах старшие биты расположены в начале, а в символьных DNS-именах старшие (находящиеся ближе к корню) части расположены в конце.

Записи DNS

Наиболее важные категории DNS записей:

· Запись CNAME (canonicalnamerecord) или каноническая запись имени (псевдоним) используется для перенаправления на другое имя

· Запись MX (mailexchange) или почтовый обменник указывает сервер(а) обмена почтой для данного домена.

· Запись NS (nameserver) указывает на DNS-серверы для данного домена.

· Запись SOA (StartofAuthority) указывает, на каком сервере хранится эталонная информация о данном домене.


В очередном «конспекте админа» остановимся на еще одной фундаментальной вещи – механизме разрешения имен в IP-сетях. Кстати, знаете почему в доменной сети nslookup на все запросы может отвечать одним адресом? И это при том, что сайты исправно открываются. Если задумались – добро пожаловать под кат. .

Для преобразования имени в IP-адрес в операционных системах Windows традиционно используются две технологии – NetBIOS и более известная DNS.

NetBIOS (Network Basic Input/Output System) – технология, пришедшая к нам в 1983 году. Она обеспечивает такие возможности как:

регистрация и проверка сетевых имен;

установление и разрыв соединений;

связь с гарантированной доставкой информации;

связь с негарантированной доставкой информации;

В рамках этого материала нас интересует только первый пункт. При использовании NetBIOS имя ограниченно 16 байтами – 15 символов и спец-символ, обозначающий тип узла. Процедура преобразования имени в адрес реализована широковещательными запросами.

Небольшая памятка о сути широковещательных запросов.

Широковещательным называют такой запрос, который предназначен для получения всеми компьютерами сети. Для этого запрос посылается на специальный IP или MAC-адрес для работы на третьем или втором уровне модели OSI.

Для работы на втором уровне используется MAC-адрес FF:FF:FF:FF:FF:FF, для третьего уровня в IP-сетях адрес, являющимся последним адресом в подсети. Например, в подсети 192.168.0.0/24 этим адресом будет 192.168.0.255

Естественно, постоянно рассылать широковещательные запросы не эффективно, поэтому существует кэш NetBIOS – временная таблица соответствий имен и IP-адреса. Таблица находится в оперативной памяти, по умолчанию количество записей ограничено шестнадцатью, а срок жизни каждой – десять минут. Посмотреть его содержимое можно с помощью команды nbtstat -c, а очистить – nbtstat -R.


Пример работы кэша для разрешения имени узла «хр».


Что происходило при этом с точки зрения сниффера.

В крупных сетях из-за ограничения на количество записей и срока их жизни кэш уже не спасает. Да и большое количество широковещательных запросов запросто может замедлить быстродействие сети. Для того чтобы этого избежать, используется сервер WINS (Windows Internet Name Service). Адрес сервера администратор может прописать сам либо его назначит DHCP сервер. Компьютеры при включении регистрируют NetBIOS имена на сервере, к нему же обращаются и для разрешения имен.

В сетях с *nix серверами можно использовать пакет программ Samba в качестве замены WINS. Для этого достаточно добавить в конфигурационный файл строку «wins support = yes». Подробнее – в документации.

В отсутствие службы WINS можно использовать файл lmhosts, в который система будет «заглядывать» при невозможности разрешить имя другими способами. В современных системах по умолчанию он отсутствует. Есть только файл-пример-документация по адресу %systemroot%\System32\drivers\etc\lmhost.sam. Если lmhosts понадобится, его можно создать рядом с lmhosts.sam.

Сейчас технология NetBIOS не на слуху, но по умолчанию она включена. Стоит иметь это ввиду при диагностике проблем.

если в кэше резолвера адреса нет, система запрашивает указанный в сетевых настройках интерфейса сервер DNS;


Наглядная схема прохождения запроса DNS.

Разумеется, DNS не ограничивается просто соответствием «имя – адрес»: здесь поддерживаются разные виды записей, описанные стандартами RFC. Оставлю их список соответствующим статьям.

Сам сервис DNS работает на UDP порту 53, в редких случаях используя TCP.

DNS переключается на TCP с тем же 53 портом для переноса DNS-зоны и для запросов размером более 512 байт. Последнее встречается довольно редко, но на собеседованиях потенциальные работодатели любят задавать вопрос про порт DNS с хитрым прищуром.

Также как и у NetBIOS, у DNS существует кэш, чтобы не обращаться к серверу при каждом запросе, и файл, где можно вручную сопоставить адрес и имя – известный многим %Systemroot%\System32\drivers\etc\hosts.

В отличие от кэша NetBIOS в кэш DNS сразу считывается содержимое файла hosts. Помимо этого, интересное отличие заключается в том, что в кэше DNS хранятся не только соответствия доменов и адресов, но и неудачные попытки разрешения имен. Посмотреть содержимое кэша можно в командной строке с помощью команды ipconfig /displaydns, а очистить – ipconfig /flushdns. За работу кэша отвечает служба dnscache.


На скриншоте видно, что сразу после чистки кэша в него добавляется содержимое файла hosts, и иллюстрировано наличие в кэше неудачных попыток распознавания имени.

При попытке разрешения имени обычно используются сервера DNS, настроенные на сетевом адаптере. Но в ряде случаев, например, при подключении к корпоративному VPN, нужно отправлять запросы разрешения определенных имен на другие DNS. Для этого в системах Windows, начиная с 7\2008 R2, появилась таблица политик разрешения имен (Name Resolution Policy Table, NRPT). Настраивается она через реестр, в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DnsClient\DnsPolicyConfig или групповыми политиками.


Настройка политики разрешения имен через GPO.

При наличии в одной сети нескольких технологий, где еще и каждая – со своим кэшем, важен порядок их использования.

Операционная система Windows пытается разрешить имена в следующем порядке:

проверяет, не совпадает ли имя с локальным именем хоста;

смотрит в кэш DNS распознавателя;

если в кэше соответствие не найдено, идет запрос к серверу DNS;

если не получилось разрешить имя на этом этапе – происходит запрос на сервер WINS;

если постигла неудача, то система пытается получить имя широковещательным запросом, но не более трех попыток;

Для удобства проиллюстрирую алгоритм блок-схемой:


Алгоритм разрешения имен в Windows.

Выполнение второго пинга происходит на несколько секунд дольше, а сниффер покажет широковещательные запросы.


Сниффер показывает запросы DNS для длинного имени и широковещательные запросы NetBIOS для короткого.

Отдельного упоминания заслуживают доменные сети – в них запрос с коротким именем отработает чуть по-другому.

Для того чтоб при работе не нужно было вводить FQDN, система автоматически добавляет часть имени домена к хосту при различных операциях – будь то регистрация в DNS или получение IP адреса по имени. Сначала добавляется имя домена целиком, потом следующая часть до точки.

При попытке запуска команды ping servername система проделает следующее:


Настройка добавления суффиксов DNS через групповые политики.

Настраивать DNS суффиксы можно также групповыми политиками или на вкладке DNS дополнительных свойств TCP\IP сетевого адаптера. Просмотреть текущие настройки удобно командой ipconfig /all.


Суффиксы DNS и их порядок в выводе ipconfig /all.

Из-за суффиксов утилита nslookup выдала совсем не тот результат, который выдаст например пинг:

Это поведение иногда приводит в замешательство начинающих системных администраторов.

При диагностике стоит помнить, что утилита nslookup работает напрямую с сервером DNS, в отличие от обычного распознавателя имен. Если вывести компьютер из домена и расположить его в другой подсети, nslookup будет показывать, что всё в порядке, но без настройки суффиксов DNS система не сможет обращаться к серверам по коротким именам.

Отсюда частые вопросы – почему ping не работает, а nslookup работает.

В плане поиска и устранения ошибок разрешения имен могу порекомендовать не бояться использовать инструмент для анализа трафика – сниффер. С ним весь трафик как на ладони, и если добавляются лишние суффиксы, то это отразится в запросах DNS. Если запросов DNS и NetBIOS нет, некорректный ответ берется из кэша.

Если же нет возможности запустить сниффер, рекомендую сравнить вывод ping и nslookup, очистить кэши, проверить работу с другим сервером DNS.

Кстати, если вспомните любопытные DNS-курьезы из собственной практики – поделитесь в комментариях.

Этичный хакинг и тестирование на проникновение, информационная безопасность

У каждого компьютера Windows есть Имя компьютера. Если даже вы его не устанавливали, то значит там записано сгенерированное при установке операционной системы имя.

Это имя компьютера в локальной сети можно использовать как полную альтернативу локальному IP адресу:

  • обращаться к совместным ресурсам (сетевые папки и принтеры)
  • обращаться к запущенным сетевым службам (веб-сервер, FTP и др.)

При этом не требуется какая-либо настройка DNS или файла hosts, поскольку такое распознавание имён обеспечивается NetBIOS. Мы уже сталкивались с NetBIOS, а точнее с одной из трёх его служб — NBT-NS — в статье «Взлом сетевой аутентификации Windows». Это одна из служб, которая эксплуатировалась для выполнения атаки.

То есть, NetBIOS имеет важное значение для Windows, а также для изучения устройства Windows, анализа сетевой активности Windows и в вопросах безопасности локальных сетей и компьютеров с Windows.

Что такое NetBIOS

NetBIOS (Network Basic Input/Output System) — протокол для работы в локальных сетях на персональных ЭВМ типа IBM/PC, разработан в виде интерфейса, который не зависит от фирмы-производителя. Был разработан фирмой Sytek Corporation по заказу IBM в 1983 году. Он включает в себя интерфейс сеансового уровня (англ. NetBIOS interface), в качестве транспортных протоколов использует TCP и UDP.

  • широковещательные («b») узлы;
  • узлы точка-точка («p»);
  • узлы смешанного типа («m»).

IP-адрес может ассоциироваться с одним из указанных типов. B-узлы устанавливают связь со своим партнёром посредством широковещательных запросов. P- и M-узлы для этой цели используют netbios сервер имён (NBNS) и сервер распределения дейтаграмм (NBDD).

  • регистрацию и проверку сетевых имён;
  • установление и разрыв соединений;
  • связь с подтверждением доставки информации;
  • связь без подтверждения доставки информации;
  • поддержку управления и мониторинга драйвера и сетевой карты.

Службы NetBIOS

NetBIOS предоставляет три разных службы:

  • Служба имён (NetBIOS-NS) для регистрации и разрешения имён.
  • Служба рассылки дейтаграмм (NetBIOS-DGM) для связи без установления соединения.
  • Служба сеанса (NetBIOS-SSN) для связи с установлением соединения.

Служба имён (NetBIOS-NS)

Примитивы службы имён, предлагаемые NetBIOS:

  • Add name — регистрирует имя NetBIOS.
  • Add group name — регистрирует NetBIOS-имя группы.
  • Delete name — отменяет регистрацию имени NetBIOS или имени группы.
  • Find name — поиск имени NetBIOS в сети.

Разрешение имён NetBIOS не поддерживается Microsoft для Интернет-протокола версии 6 (IPv6).

Служба рассылки дейтаграмм (NetBIOS-DGM)

Режим датаграммы без установления соединения; Приложение отвечает за обнаружение и восстановление ошибок. В NBT служба дейтаграмм работает на UDP-порту 138.

Примитивы службы дейтаграмм, предлагаемые NetBIOS:

Служба сеанса (NetBIOS-SSN)

Примитивы службы сеанса, предлагаемые NetBIOS:

  • Call — открывает сеанс для удалённого имени NetBIOS.
  • Listen — прослушивание попыток открыть сеанс с именем NetBIOS.
  • Hang Up — закрыть сеанс.
  • Send — отправляет пакет на компьютер на другом конце сеанса.
  • Send No Ack — как Send, но не требует подтверждения.
  • Receive — ожидание поступления пакета от отправки на другом конце сеанса.

В исходном протоколе, используемом для реализации сервисов NetworkBIOS в сети PC-Network, для установления сеанса инициирующий компьютер отправляет запрос Open, на который отвечает подтверждение Open. Компьютер, запустивший сеанс, затем отправит пакет запроса сеанса, который запросит либо пакет подтверждения сеанса, либо пакет отклонения сеанса.

В течение установленного сеанса на каждый передаваемый пакет отвечает либо ответ с положительным подтверждением (ACK), либо ответ с отрицательным подтверждением (NAK). NAK предложит повторную передачу данных. Сессии закрываются не инициирующим компьютером, отправляя запрос на закрытие. Компьютер, запустивший сеанс, ответит пакетом закрытия, который запрашивает окончательный пакета закрытия сеанса.

Как соотносится Имя NetBIOS с именем хоста в Интернете

Когда NetBIOS работает в сочетании с интернет-протоколами (например, NBT), каждый компьютер может иметь несколько имён: одно или несколько имён службы имен NetBIOS и одно или несколько имён хостов Интернета.

Имя NetBIOS

Имена NetBIOS представляют собой последовательность буквенно-цифровых символов. Следующие символы явно недопустимы: \/:*?"<>|. Начиная с Windows 2000, имена NetBIOS также должны соответствовать ограничениям на DNS-имена: они не могут состоять исключительно из цифр и дефиса ("-"), а символ точка (".") не могут отображаться в качестве первого или последнего символа. Начиная с Windows 2000, Microsoft не рекомендует включать любые символы точка (".") в имена NetBIOS, так что приложения могут использовать присутствие точки, чтобы отличить доменные имена от имён NetBIOS.

Файл Windows LMHOSTS предоставляет метод разрешения имён NetBIOS, который можно использовать в небольших сетях, в которых не используется сервер WINS. О файле LMHOSTS далее.

Интернет имя хоста

NetBIOS-имя Windows-машины не следует путать с именем хоста компьютера в Интернете (при условии, что компьютер также является хостом Интернета, а не узлом NetBIOS, что не обязательно должно иметь место). Как правило, компьютер, на котором запущены интернет-протоколы (будь то компьютер с Windows или нет), обычно имеет имя хоста (также иногда называемое именем компьютера). Первоначально эти имена хранились в файле hosts и предоставлялись им, но сегодня большинство таких имён являются частью иерархической системы доменных имен (DNS) (смотрите Введение в DNS терминологию, компоненты и концепции).

Обычно имя хоста компьютера Windows основывается на имени NetBIOS плюс первичный DNS-суффикс, которые оба задаются в диалоговом окне «Свойства системы». Также могут существовать суффиксы для конкретного соединения, которые можно просмотреть или изменить на вкладке DNS в Панели управления → Сеть → TCP / IP → Дополнительные свойства. Имена хостов используются такими приложениями, как telnet, ftp, веб-браузеры и т. д. Чтобы подключиться к компьютеру, использующему протокол TCP/IP, используя его имя, имя хоста должно быть преобразовано в IP-адрес, обычно DNS-сервером. (Также возможно работать со многими приложениями на основе TCP/IP, включая три, перечисленные выше, используя только IP-адреса, но это не норма.)

Как обнаружить NetBIOS

Можно запустить обычное сканирование TCP портов в локальной сети с помощью nmap:

И среди результатов можно обнаружить открытый TCP порт 139:


Если нас интересует только службы NetBIOS, то достаточно искать UDP порты 137 и 138 и TCP порты 137 и 139, воспользуемся Рецептами nmap и составим такую команду:

Плюс такого подхода в том, что сканирование происходит намного быстрее и дополнительно найдены открытые порты UDP.


Можно воспользоваться ещё одним рецептом Nmap для сбора банеров служб, для этого добавим опции -sV --script=banner:

Благодаря последней команде мы дополнительно узнали:

  • используемую рабочую группу (WORKGROUP)
  • операционную систему для некоторых устройств (Windows 10)
  • некоторые открытые порты связаны с Samba smbd 3.X - 4.X

Дополнительно можно воспользоваться скриптами Nmap (NSE) — я нашёл 3 скрипта, которые связаны с NetBIOS:

nbd-info

Отображает информацию о протоколах и блочных устройствах с серверов NBD.

nbstat

Пытается получить имена NetBIOS и MAC-адрес цели.

broadcast-netbios-master-browser

Пытается обнаружить главные браузеры и домены, которыми они управляют.

Для их использования во время сканирования команда примерно следующая:


nbtstat

Программа nbtstat предназначена для отображения статистики протокола NetBIOS и текущих подключений TCP/IP с помощью NBT (NetBIOS через TCP/IP). Программа nbtstat предустановлена в Windows, то есть её не нужно скачивать и устанавливать, но нужно запускать в командной строке. Смотрите «Настройка рабочего окружения PowerShell в Windows и Linux».

Рассмотрим примеры использования nbtstat.

Чтобы по IP адресу узнать имя хоста используйте опцию -A:


Чтобы просмотреть имена компьютеров и их IP, сохранённые в кэше укажите опцию -c:


Чтобы узнать имя текущего компьютера используйте nbtstat с опцией -n:


Для вывода имён, определённых с помощью рассылки и WINS запустите такую команду:


Фильтры Wireshark для выделения NetBIOS трафика

Wireshark поддерживает практически все сетевые протоколы (смотрите «Фильтры Wireshark»), в том числе и протоколы NetBIOS.

Фильтр Wireshark для службы имён (NetBIOS-NS):

Широковещательный запрос, чтобы определить IP адрес по имени компьютера:



Запрос к определённому узлу для получения его имени хоста:



Фильтр Wireshark для службы рассылки дейтаграмм (NetBIOS-DGM):


Фильтр Wireshark для службы сеанса (NetBIOS-SSN):


Для фильтрации всего трафика NetBIOS:

Файл LMHOSTS

Файл LMHOSTS (LAN Manager Hosts) используется для разрешения (преобразования) доменных имён в Windows, когда другие методы, такие как WINS, не работают. Используется совместно с рабочими группами и доменами. Если вы ищете простой, общий механизм для локальной спецификации IP-адресов для определённых имён хостов (имён серверов), используйте файл HOSTS, а не файл LMHOSTS.

Файл, если он существует, читается как файл настроек LMHOSTS. Пример файла (lmhosts.sam) предоставляется. Он содержит документацию для ручной настройки файла.

В Windows NT 4.0, Windows 2000, Windows XP, Vista, 7, 8, 10, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2016+ файл находится в %windir%\system32\drivers\etc\, и там же размещён пример файла (lmhosts.sam). Обратите внимание, что %windir% является переменной окружения, указывающей на папку, куда установлена Windows, обычно это C:\Windows.

Синтаксис файла LMHOSTS такой же, как и у HOSTS, то есть:

Эксплуатация NetBIOS

Программа для аудита безопасности NetBIOS можно разделить на 2 группы:

  • спуфинг NetBIOS для выполнения атак человек-посередине
  • сканирование NetBIOS для сбора информации

Программы для сканирования NetBIOS в большей части заброшены, поскольку практически всю информацию (имя, IP, MAC адрес) можно узнать либо стандартной утилитой Windows, либо сканером Nmap.

Что касается инструментов для спуфинга NetBIOS, то среди них достаточно актуальных программ, обычно включающих в себя спуфинг служб NetBIOS как часть комплексной атаки.

Далее совсем краткий обзор инструментов, поскольку инструменты для сканирования слишком просты, чтобы говорить о них много, а инструменты для спуфинга слишком сложные, чтобы рассматривать их в этой статье — каждый из них заслуживает собственной статьи или даже нескольких инструкций — по различных их функциям.

Invoke-Inveigh

Inveigh — это спуфер PowerShell ADIDNS/LLMNR/NBNS/mDNS/DNS и инструмент для атаки «человек посередине», предназначенный для помощи тестировщикам на проникновения/красным тимерам, которые ограничены системой Windows.

Пример запуска наблюдения без атаки:


Responder

nmbscan

nmbscan сканирует сетевые папки SMB/NetBIOS, используя протоколы NMB/SMB/NetBIOS. Это полезно для получения информации о локальной сети для таких целей, как аудит безопасности.

Он может получать такую информацию, как имя хоста NMB/SMB/NetBIOS/Windows, IP-адрес, имя хоста IP, MAC-адрес Ethernet, имя пользователя Windows, имя домена NMB/SMB/NetBIOS/Windows и главный браузер.

Он может обнаружить все узлы NMB/SMB/NetBIOS/Windows в локальной сети, используя списки узлов, поддерживаемые основными браузерами.

Имеется в репозиториях BlackArch:


Для сканирования подсети (очень медленно):

netbios-share-scanner

Этот инструмент можно использовать для проверки рабочих станций Windows и серверов, если они имеют доступные общие ресурсы.


fakenetbios

Семейство инструментов, предназначенное для симуляции хостов Windows (NetBIOS) в LAN (локальной сети).

nbnspoof

Спуфер имён служб NetBIOS.

nbtenum

Утилита для Windows, которая может использоваться для перечисления информации NetBIOS с одного хоста или диапазона хостов. Для запуска на Windows.

nbtool

Несколько инструментов для изучения, атак и связи с NetBIOS и DNS.

nbname

Декодирует и отображает все имена NetBIOS пакетов, полученные на UDP порту 137 и другое! Для запуска на Windows.

nbtscan

NBTscan - это программа для сканирования IP для получения информации об имени NetBIOS.

Читайте также: