Multicast dns что это

Обновлено: 04.07.2024

Нужен ли в моей системе клиент mDNS для соединения с сервером mDNS?

Или есть какой-либо другой способ подключить компьютер без клиента mDNS к компьютеру сервера mDNS (hostname.local)?

Можно ли пинговать с компьютера без запущенной службы mDNS.

1 ответ

1. Что такое mDNS?

Чтобы получить общую картину, вам нужно взглянуть на что-то под названием Zeroconf. Концепции Zeroconf были впервые реализованы Apple, но для этого Apple использует маркетинговое название Bonjour (первоначально Rendezvous). mDNS (многоадресный DNS) является частью этого - см. ниже.

Apple использует Bonjour для.

. AirPrint (когда мобильные клиенты iOS ищут в локальной сети доступный принтер, который они могут использовать для "печати без драйверов"), или для

. общие ресурсы принтера CUPS для публикации в локальной сети или для

. медиатека iTunes для обмена по локальной сети и для

. многие другие службы, которые должны работать без установки, настройки и обслуживания центрального DNS-сервера.

Под Linux эти же концепции были реализованы в проекте Avahi.

Bonjour / Zeroconf имеет 3 основных цели:

  1. Выделите IP-адреса без DHCP-сервера.
  2. Переводите между именами хостов и IP-адресами без DNS-сервера.
  3. Откройте для себя службы (например, поставщиков печати) без сервера каталогов, например LDAP, и упростите их использование.

Полные технические концепции Zeroconf указаны в серии RFC, в основном:

  • IPv4LL / rfc3927 для назначения локальных IP-адресов без DHCP-сервера.
  • mDNS / rfc6762 для многоадресной DNS для разрешения имен хостов без центрального DNS-сервера.
  • DNS-SD / rfc6763 для обнаружения служб на основе DNS без центрального сервера каталогов.

Одним из главных архитекторов Zeroconf был Стюарт Чешир. После того, как он записал свои мысли о том, как реализовать первоначальную простоту использования Apple, протокол связывания имен AppleTalk по сетям TCP/IP был нанят Apple, чтобы помочь реализовать концепцию Zeroconf для устройств Mac. Затем он также был основным автором вышеупомянутых связанных документов RFC.

Реализация Bonjour от Apple также доступна для Windows и Linux (хотя в Linux также существует независимая реализация под названием Avahi) в виде Open Source под лицензией Apache License v2.0.

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

Можно ли сделать запрос mDNS без запущенной службы mdns?

получать постоянно обновляемый список сервисных объявлений со всех узлов вашей локальной сети и предлагаемых ими услуг. Более подробный вывод перечислены

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

Вы можете найти принтеры с поддержкой IPP (Internet Printing Protocol), например:

-r "разрешит" найденные сервисы и покажет им удобочитаемое имя. _ipp._tcp является (странной) кодировкой имени для сервисов, к которым нужно привыкнуть, если вы изучите эту тему более подробно. В этом случае это точный синтаксис, который будет использоваться для сервисов IPP в локальной сети. Пример вывода для вышеуказанной команды:

Я скопировал часть этого ответа из информации тэга Bonjour на AskDifferent. Тем не менее, большая часть этой информации о тегах была написана мной в любом случае, так что я совсем не расстраиваюсь из-за этого.

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

mDNS расшифровывается как Multicast DNS (многоадресный DNS). Когда используется порт 5353, эта многоадресная информация будет отображаться, когда в интрасети нет DNS-сервера.

Как работает mDNS

Во-первых, в протоколе IP указываются некоторые зарезервированные адреса, один из которых - 224.0.0.251, а соответствующий адрес IPv6 - [FF02 :: FB].

  • Протокол mDNS указывает порт 5353.
  • mDNS основан на протоколе UDP.

Например, хост A входит в локальную сеть, запускает службу mDNS и регистрирует следующую информацию в службе mDNS: я предоставляю службу FTP, мой IP-адрес 192.168.1.101, а порт - 21. Когда хост B входит в локальную сеть и запрашивает службу mDNS хоста B, я ищу FTP-сервер в локальной сети, и mDNS хоста B перейдет в локальную сеть, чтобы запросить другой mDNS и, наконец, сообщить вам, что существует IP-адрес 192.168.1.101, хост с номером порта 21, то есть хост A предоставляет службу FTP, поэтому хост B знает IP-адрес и номер порта хоста A.

Общий принцип такой: mDNS предоставляет гораздо больше услуг, чем это, конечно, есть много услуг, но не сложно.

Эта услуга предоставляется на устройствах Apple (компьютеры, ноутбуки, iPhone, iPad и другие устройства). Многие устройства Linux также предоставляют эту услугу. Устройства Windows могут не предоставляться, но если установлено программное обеспечение, такое как iTunes, эта услуга также предоставляется.

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

Реализация в ESP8266

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

Эта статья все еще обновляется, поэтому следите за обновлениями

В компьютерных сетях , в групповой DNS ( MDNS ) протокол ПОСТАНОВЛЯЕТ хостов в IP - адреса в пределах небольших сетей , которые не включают в себя локальный сервер имен . Это служба с нулевой конфигурацией , использующая по существу те же программные интерфейсы, форматы пакетов и рабочую семантику, что и служба одноадресных доменных имен (DNS). Он был разработан для работы либо как автономный протокол, либо для совместимости со стандартными DNS-серверами.

Многоадресный DNS был впервые предложен Биллом Вудкоком и Биллом Мэннингом в IETF в 2000 году и, в конечном итоге, был опубликован как стандарт IETF RFC 6762 Стюартом Чеширом и Марком Крочмалом тринадцать лет спустя. Он использует пакеты многоадресного IP- протокола User Datagram Protocol (UDP) и реализуется программными пакетами Apple Bonjour и Avahi с открытым исходным кодом, включенными в большинство дистрибутивов Linux. Хотя реализация Windows 10 была ограничена обнаружением сетевых принтеров, в последующих выпусках также разрешались имена хостов. mDNS может работать вместе с DDNS Service Discovery (DNS-SD), сопутствующей сетевой техникой с нулевой конфигурацией, описанной отдельно в RFC 6763.

СОДЕРЖАНИЕ

Обзор протокола

По умолчанию mDNS разрешает только имена хостов, оканчивающиеся на домен верхнего уровня .local . Это может вызвать проблемы, если .local включает хосты, которые не реализуют mDNS, но которые можно найти через обычный одноадресный DNS-сервер. Разрешение таких конфликтов требует изменений конфигурации сети, которых mDNS был разработан, чтобы избежать.

Структура пакета

  • IPv4-адрес224.0.0.251 или IPv6-адресff02 :: fb
  • UDP-порт 5353
  • При использовании Ethernet кадров , то стандартный IP - адрес многоадресной рассылки MAC -01: 00: 5E: 00: 00: FB (для IPv4 ) или 33: 33: 00: 00: 00: FB (для IPv6 )

Структура полезной нагрузки основана на формате одноадресного пакета DNS , состоящем из двух частей - заголовка и данных.

Заголовок идентичен заголовку одноадресного DNS, как и подразделы в части данных: запросы, ответы, авторитетные серверы имен и дополнительные записи. Количество записей в каждом подразделе соответствует значению соответствующего поля * COUNT в заголовке.

Запросы

Формат передачи для записей в разделе запроса немного изменен по сравнению с одноадресным DNS, добавлено однобитовое поле UNICAST-RESPONSE.

Поля раздела запроса mDNS
Поле Описание Биты длины
QNAME Имя узла, к которому относится запрос Переменная
QTYPE Тип запроса, то есть тип RR, который должен быть возвращен в ответах. 16
UNICAST-ОТВЕТ Логический флаг, указывающий, желателен ли одноадресный ответ 1
QCLASS Код класса, 1 или «IN» для Интернета и IP-сетей. 15

Как и в одноадресной DNS, поле QNAME состоит из серии подполей длины / значения, называемых «метками». Каждая метка представляет собой одну из разделенных точками подстрок в полном доменном имени (FQDN). Список заканчивается одним нулевым байтом, представляющим «корень» DNS.

Поле UNICAST-RESPONSE используется для минимизации ненужных широковещательных рассылок в сети: если бит установлен, отвечающие ДОЛЖНЫ отправлять направленный одноадресный ответ непосредственно запрашивающему узлу, а не широковещательно рассылать ответ по всей сети.

Поле QCLASS идентично полю одноадресного DNS.

Записи о ресурсах

Записи ресурсов в mDNS также имеют несколько измененный общий формат по сравнению с одноадресным DNS:

Поля записи ресурса mDNS
Поле Описание Биты длины
RRNAME Имя узла, к которому относится запись Переменная
RRTYPE Тип записи ресурса 16
КЭШ-ПРОМЫВКА Логический флаг, указывающий, следует ли очищать устаревшие кэшированные записи 1
RRCLASS Код класса, 1 или «IN» для Интернета и IP-сетей. 15
TTL Интервал времени (в секундах), в течение которого RR должен быть кэширован 32
ДЛИНА Целое число, представляющее длину (в октетах) поля RDATA 16
RDATA Данные о ресурсах; внутренняя структура зависит от RRTYPE Переменная

Бит CACHE-FLUSH используется для указания соседним узлам, что запись должна перезаписывать, а не добавляться к любым существующим кэшированным записям для этих RRNAME и RRTYPE.

Форматы полей RDATA такие же, как и в одноадресной DNS. Тем не менее, обнаружение службы DNS (DNS-SD), наиболее распространенный вариант использования mDNS, предусматривает незначительные изменения некоторых их форматов (особенно записей TXT).


Это перевод статьи Марка Э. Хааса, впервые опубликованной в блоге Hyperion Gray. Перевела Алёна Георгиева.

Что такое mDNS?

Официальные сайты Multicast DNS и DNS Service Discovery способны скорее запутать, чем пролить свет на суть этих технологий. Поэтому — прежде чем погружаться в вопросы безопасности mDNS и DNS-SD — мы обсудим, почему вообще эти протоколы существуют и чем они на самом деле занимаются.

Оба протокола являются частью Zeroconf — пакета технологий, который помогает сетевым устройствам находить друг друга автоматически. Когда ты отправляешь документ на печать, а твой компьютер сам предлагает на выбор ближайшие принтеры, скорее всего, он использует именно Zeroconf. Протоколы связаны с DNS, так что здесь нужно хотя бы на базовом уровне понимать, как устроена система DNS.

Обычно DNS работает «одноадресно» (unicast) — это значит, что каждый запрос отправляется на конкретный IP-адрес. Слово multicast (то есть «многоадресность») в mDNS означает, что запрос веерно рассылается всем девайсам широковещательного домена (broadcast domain). Сам по себе термин «широковещательный домен» означает, грубо говоря, все сообщающиеся устройства второго уровня — например, компьютеры, соединенные сетевыми коммутаторами. Это важный момент, ведь запросы mDNS не проходят через роутеры — потому что роутеры уже устройства третьего уровня.

Разберемся на примере. Мой MacBook Pro имеет в системе mDNS имя MehBook.local . Выяснить это можно во вкладке «Общий доступ» (Sharing) системных настроек.



Чтобы вычислить IP макбука, мы можем использовать инструмент DNS-запросов вроде dig :

$ dig @224.0.0.251 -p 5353 +short MehBook.local
10.105.0.203

Обрати внимание, что имя заканчивается на .local — это домен верхнего уровня, зарезервированный специально под mDNS. Если ты видишь подобное имя — то, вероятно, сможешь вычислить айпишник, используя mDNS. Такие доменные имена называются именами локальной связи (link-local names), потому что увидеть их можно только внутри локальной сети.

Имей в виду: некоторые сисадмины некорректно используют местный домен верхнего уровня вместе с одноадресным DNS. Следи за собой, будь осторожен!

Вместо того чтобы посылать запрос DNS-серверу на порт 53, мы используем порт 5353 и специальный адрес 224.0.0.251 — собственно, мультикастомный. Этот конкретный адрес зарезервирован специально для mDNS. Когда на адрес 224.0.0.251 приходит запрос, все устройства сети получают копию этого запроса и могут на него ответить. В нашем примере мой макбук увидел запрос и вернул по нему свой собственный айпишник — 10.105.0.203 .

IP моего макбука динамический, через какое-то время он поменяется — а вот mDNS-имя останется прежним! Так что мы можем взаимодействовать с доменными именами без запуска DNS-сервера. Сам понимаешь, чем это полезно в домашних и небольших офисных сетях.

Что такое DNS-SD?

В примере с mDNS мы выясняли айпишник устройства с уже известным именем. Но что, если ты хочешь связаться с девайсом, имя которого не знаешь, — например, с принтером? Эту проблему как раз и решает протокол обнаружения сервисов (Service Discovery). Он позволяет устройствам заявлять о конкретных сервисах, которые они предлагают, — так, чтобы можно было обнаружить их без централизованной настройки.

Начнем с вычисления принтеров:

Тут нам помогут те же мультикастомный DNS-адрес и порт, но на сей раз мы запрашиваем PTR-записи и используем специальное доменное имя _printer._tcp.local — оно как раз предназначено для распознавания принтеров. В ответ на этот запрос мой принтер Brother вернул свое локальное доменное имя.

Если ты хочешь запросить устройства с другими сервисами, то стоит свериться с их официальным реестром. Например, там есть любопытная служба RAOP — она же протокол Apple, известный как AirTunes. Давай-ка его вычислим:

Запрос показывает устройство в моей сети, предлагающее сервис RAOP, — это Apple TV под названием «Гостиная» (Living Room). На самом деле в моей сети два Apple TV, но dig выводит только первый полученный ответ. К счастью, есть инструменты и получше. На macOS это команда dns-sd в программном модуле Rendezvous (Bonjour), эппловской реализации Zeroconf.

Эта команда разошлет запрос и отобразит все полученные ответы (чтобы избавиться от них, нужно будет нажать Ctrl-C). Теперь мы видим оба моих Apple TV.

На Linux тот же набор инструментов предлагает пакет Avahi (на Debian/Ubuntu он называется avahi-utils ).

$ avahi-browse _raop._tcp
+ IPv6 D0D2B0XXXXXX@Bedroom AirTunes Remote Audio local
+ IPv6 C8D083XXXXXX@Living Room AirTunes Remote Audio local
+ IPv4 D0D2B0XXXXXX@Bedroom AirTunes Remote Audio local
+ IPv4 C8D083XXXXXX@Living Room AirTunes Remote Audio local
^C

Avahi умеет переводить имена служб типа _raop._tcp.local в более понятные — AirTunes Remote Audio local , например. Также Avahi может вычислить айпишник с помощью mDNS, так что dig здесь вообще не нужен:

Обрати внимание, что при mDNS-запросе мы не вставляем значения типа _raop._tcp — потому что это название службы, а не устройства. Также мы ничего не пишем слева от символа @ .

Вычисляем устройства

Теперь ты видишь, чем пакет Zeroconf интересен пентестерам: благодаря ему можно быстро найти целый список доступных устройств буквально за пару запросов. А Avahi еще и позволяет автоматизировать этот процесс. Например, вполне реально упаковать обнаружение сервисов и пробивание IP через mDNS в один шаг.

$ avahi-browse --resolve _printer._tcp
+ enp4s0 IPv4 Brother DCP-L2540DW series UNIX Printer local
= enp4s0 IPv4 Brother DCP-L2540DW series UNIX Printer local
hostname = [brotherB85F3190.local]
address = [10.105.0.3]
port = [515]
txt = ["UUID=e3248000-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
"TBCP=F" "Transparent=T" "Binary=T" "PaperCustom=T"
"Scan=T" "Fax=F" "Duplex=T" "Copies=T" "Color=F" …]
^C

В результате мы получаем локальное имя хоста, IP-адрес и порт ( tcp/515 — дефолтный порт для Line Printer Daemon). Плюс много информации о возможностях принтера в поле txt .

Использованная здесь команда — отличный способ пересчитать все устройства конкретного типа, однако Avahi способен на большее! Следующая команда вычисляет вообще все типы сервисов сразу.

$ avahi-browse --all
+ IPv6 8FB20F14F5966F78620XXXX iPod Touch Music Library local
+ IPv6 276A1455BC533567B08XXXX iPod Touch Music Library local
+ IPv4 8FB20F14F5966F78620XXXX iPod Touch Music Library local
+ IPv4 276A1455BC533567B08XXXX iPod Touch Music Library local
+ IPv6 8FB20F14F5966F78620XXXX _appletv-v2._tcp local
+ IPv6 276A1455BC533567B08XXXX _appletv-v2._tcp local
+ IPv4 8FB20F14F5966F78620XXXX _appletv-v2._tcp local
+ IPv4 276A1455BC533567B08XXXX _appletv-v2._tcp local
^C

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

$ avahi-browse -a
+ IPv6 MehBook _companion-link._tcp local
+ IPv6 Bedroom _companion-link._tcp local
+ IPv6 Living Room _companion-link._tcp local
+ IPv4 MehBook _companion-link._tcp local
^C

Обе эти команды можно сочетать с --resolve , чтобы получить информацию об айпишниках и портах каждого девайса. Все устройства сети как на ладони!

И конечно, нельзя не упомянуть, что Nmap поддерживает вычисление устройств Zeroconf с помощью скрипта broadcast-dns-service-discovery.

Этот скрипт не включен в категорию default — его можно найти только в safe .

Немного об ограничениях

  • Это работает только внутри локальной сети, так что нужно иметь к ней доступ.
  • Большие корпоративные сети обычно сегментированы, поэтому потребуется опорная точка именно внутри интересующего тебя сегмента.
  • Есть много важных служб, которые не заявляют о себе через DNS-SD, — такие устройства в большинстве случаев придется вычислять как-то иначе.
  • Из-за того, что это широковещательные протоколы, нужно хорошенько подумать — позволяют ли твоя тактика и стратегия их использовать?

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

Окей, вычисление устройств — это прикольно и все такое, но есть ли здесь что поэксплуатировать? Мы нашли связку принтеров и Apple TV — и.

Во-первых, держи в уме, что продукты для домашней и небольшой офисной сети, использующие Zeroconf, с высокой вероятностью имеют неправильные настройки и уязвимости. Один простой пример: если принтер аутентифицируется через LDAP-сервер, а у того стоит дефолтный пароль производителя, ты можешь захватить контроль над сервером, заставить принтер к нему обратиться и таким образом украсть LDAP-аттестат принтера. Этим способом можно довольно быстро угнать доменный аккаунт!

Продолжение доступно только участникам

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Я, как старый линуксоид, когда впервые установил Ubuntu и увидел незнакомое слово avahi, конечно же сразу посмотрел в google. Потыкался в несколько ссылок, увидел другие непонятные слова, типа zeroconf, multicast dns, bonjour. Сразу понял, что это какая то мутная технология от Apple и нафиг мне ненужная.

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

Давайте разберемся с терминологией:

    — это протокол, разработанный Apple и призванный решать следующие проблемы:
    • выбор сетевого адреса для устройства;
    • нахождение компьютеров по имени;
    • обнаружение сервисов, например принтеров.
    — открытая и свободная реализация протокола zeroconf. — open-source реализация протокола zeroconf от Apple.



Для назначения IP-адресов устройствам, zeroconf использует RFC 3927. Стандарт описывает назначение, так называемых link-local адресов, из диапазона 169.254.0.0/16 . Технология называется IPv4 Link-Local или IPv4LL.

Для разрешения имен (name resolving) используется протокол Multicast DNS или сокращено mDNS. Он позволяет устройству выбрать имя в зоне .local. Работает это почти как обычный DNS, но с нюансами. Каждый компьютер хранит записи своей зоны ( A , MX , SRV ) сам и сам же обслуживает запросы к ним. Когда какой либо компьютер хочет узнать запись зоны, скажем определить IP-адрес по имени (получить запись A для заданной зоны), он обращается по multicast-адресу 224.0.0.251 . Соответственно, запрос получают все компьютеры в локальной сети, а отвечает тот, кто хранит зону для интересующего нас имени.

Для поиска и обнаружения сервисов используется протокол DNS based Service Discovery или DNS-SD. Для того, чтобы прорекламировать, какие сервисы доступны на устройстве, используются DNS-записи типа SRV , TXT , PTR .

Как все это заставить работать на Linux? Гораздо проще, чем кажется. Разберем по шагам:

  1. Поставить пакеты avahi-daemon , avahi-autoipd , libnss-mdns . Если у вас стоит Ubuntu, то скорее всего эти пакеты уже установлены.
  2. Включить IPv4LL. Этот шаг совершенно не обязателен. Если у вас есть любой IP-адрес, который нормально маршрутизируется в локальной сети, то использовать IPv4LL не нужно и даже вредно, так как по стандарту, маршрутизатуры не должны форвардить пакеты с link-local адресами ( 169.254.* ). Иными словами, пробросить интернет через NAT скорее всего не удастся (мне не удалось). Но если вы уж решились, то достаточно для сетевого интерфейса локальной сети, в файле /etc/network/interfaces поставить тип ipv4ll . Что-то типа такого:

На этом настройку можно считать завершенной. Какие бонусы после этого вы получите? Перечисляю: все компьютеры получат имена в домене *.local, без лишних телодвижений с вашей стороны; jabber-клиенты Gajim или Empathy будут показывать всех собеседников в локальной сети; Rhythmbox будет расшаривать всю музыку; Ekiga позволит находить и звонить всем, у кого она запущена в локалке; PulseAudio сможет находить все опубликованные звуковые устройства в сети; ну и многое, многое другое. Вы можете ознакомится со списком программ, поддерживающих avahi.

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