Слышали ли вы жалобы на то, что принтеры, подключённые к сети по Wi-Fi, работают очень ненадёжно?
Принтер может без проблем печатать большую часть времени, но когда он вам срочно понадобился, ОС не может его найти и он оказывается недоступен?..
Или, может быть, смартфон, который бесперебойно вещал видео на Chromecast в телевизоре ещё 10 минут назад, теперь не может найти его в домашней сети?
В прошлом году я потратил немало времени на диагностику и устранение загадочных проблем с протоколами автообнаружения по Wi-Fi.
Разные настройки, разные Wi-Fi-роутеры, разные ОС и устройства, но основная проблема едина: всё, что использует автообнаружение, работает недостаточно стабильно и в самый нужный момент попросту ломается.
mDNS (и DNS-SD)
Многие современные устройства используют один из протоколов нулевой настройки (zero-configuration), что ускоряет процесс первоначальной установки оборудования и упрощает дальнейшее использование.
В настоящее время наиболее распространённым протоколом является mDNS (он же Bonjour), изначально созданный Apple и используемый принтерами, Apple AirPlay/HomeKit, Google Chromecast, колонками Sonos, Home Assistant, различными датчиками умного дома и оборудованием IoT.
mDNS (Multicast DNS) очень похож на обычный протокол DNS. Он передаёт практически те же данные, использует те же типы пакетов, и не реализует никаких новых функций по сравнению с классической версией. Но он сильно отличается на архитектурном уровне:
- Используются Multicast UDP-пакеты с жёстко заданным адресом назначения (Multicast-группой) - 224.0.0.251/- ff02::fbи портом- 5353;
- Не требуется сервер и централизованное управление доменной зоной; 
- Обычно обрабатывает только запросы зоны - *.local;
- Конфликты имён автоматически разрешаются путём переименования устройства/хоста, если в сети уже присутствует устройство с таким же именем. 
Как и обычный DNS, mDNS публикует и преобразует имена хостов в IP-адреса, что позволяет удобно подключаться к устройству по имени вместо адреса.
Но как компьютер может узнать тип устройства, что принтер — действительно принтер? Тут вступает в игру DNS-SD.
DNS-SD (DNS Service Discovery) — это расширение mDNS, в котором распространённым типам сервисов присвоены определённые имена DNS-записей. Например, для принтеров с Internet Printing Protocol (IPP) это _ipp._tcp.local.
Устройство может опубликовать PTR-запись с домена DNS-SD на своё имя, и другие члены локальной сети смогут его обнаруживать.
Запросим записи DNS-SD в Linux с помощью avahi-browse:
$ avahi-browse -t _ipp._tcp
+ enp86s0 IPv6 Canon1120 @ uowprint _ipp._tcp local
+ enp86s0 IPv6 hp1000 @ uowprint _ipp._tcp local
+ enp86s0 IPv4 Canon1120 @ uowprint _ipp._tcp local
+ enp86s0 IPv4 hp1000 @ uowprint _ipp._tcp localРаботает, отлично!
Давайте рассмотрим случаи, когда ничего не работает.
Проблема №1: Wi-Fi-карты от Intel

В популярных Wi-Fi-модулях Intel AX201, AX210, AX211 (и более старых, таких как AC8260), имеется ошибка драйвера Windows, которая препятствует работе mDNS после режима сна (suspend) и выхода из него.
Проблема известна как минимум с 2020 года и не исправлена по состоянию на октябрь 2025 года.
Шаги воспроизведения:
- Убедиться, что в сети есть некое устройство, отвечающее по mDNS 
- Выполнить в PowerShell - Resolve-DnsName name-of-that-deviceи убедиться, что оно резолвится
- Отправить ноутбук в сон 
- Разбудить 
- Повторить пункт 2 
Если mDNS продолжает работать, то:
- Убедиться, что в сети есть некое устройство, отвечающее по mDNS 
- Выполнить в PowerShell - Resolve-DnsName name-of-that-deviceи убедиться, что оно резолвится
- Выключить Wi-Fi кнопкой "Wi-Fi" в Windows (т.е. не отключится от конкретной сети, а выключить сам адаптер) 
- Отправить ноутбук в сон 
- Разбудить 
- Включить Wi-Fi, подключиться к сети 
- Повторить пункт 2 
Итог: после цикла сон-пробуждение никакие mDNS-запросы не работают.
Иногда чинится включением-отключением авиарежима (чтобы отключился Wi-Fi-модуль), но не всегда.
Соответствующие темы на форуме сообщества Intel:
- Intel WiFi chips are blocking multicast after resuming from airplane mode etc. 
- Multicast messages not always received over Wifi with AC8260 
Протестировано с Intel AX211 (драйвер 23.110.0.5, драйвер 22.240.0.6), AX201 (драйвер 22.40.0.7).
Проблема №2: Wi-Fi-карты от Qualcomm

В модуле Qualcomm QCA6174, который установлен в планшете Microsoft Surface Go (1-го поколения), имеется аналогичная ошибка драйвера, как и в Intel, с похожими симптомами, но шаги для её воспроизведения не столь очевидны, и мне не удалось надёжно повторять проблему.
Иными словами, ошибка плавающая (и не зависит от GTK — см. далее).
К сожалению, эта карта не поддерживается напрямую компанией Qualcomm, а Microsoft больше не поддерживает планшеты Surface Go, поэтому, скорее всего, проблема никогда не будет устранена.
Версия проблемного драйвера: 12.0.0.1159.
Проблема №3: Mediatek MT6572M

Это очень старая (примерно 2009 года) смартфонная система-на-чипе (SoC) с двухъядерным процессором ARMv7, которая в своё время использовалась во множестве смартфонов, а также в одноплатном компьютере Orange Pi 3G-IoT-A из прошлой статьи про первую ревизию «умного» принт-сервера.
Принт-сервер на Orange Pi, под управлением CUPS, расшаривает USB-принтер через AirPrint/Mopria, по сети. Для работы этой функции требуется поддержка mDNS и DNS-SD.
Как выяснилось, чип Wi-Fi, интегрированный в SoC, некорректно обрабатывает «полноценное» (не смешанное) шифрование WPA2, в котором применяется шифр AES (CCMP) для Multicast-пакетов.
Переключение сети в «смешанный режим» (WPA/WPA2) решило проблему: в этом режиме для Multicast-трафика применяется шифр TKIP, что, по-видимому, не приводит к возникновению ошибки.
Проблема №4: Точки доступа Ubiquiti

Пользователь Reddit с ником sharhalakis потратил 1,5 года на диагностику и устранение проблем с работой Multicast на точках доступа Ubiquiti
Проблемы с Broadcast/Multicast-трафиком в UAP [диагностировано и решено]
Проблема точек доступа Ubiquiti заключается в том, что они иногда используют неправильный индекс ключа. Например:
Станция подключается и получает от точки доступа GTK с индексом 1.
Затем точка доступа отправляет Broadcast-кадры, используя ключ с индексом 2.
Проблема начинается в разные моменты:
Может происходить сразу после подключения станции;
Может начаться после смены ключа;
Может произойти с подключёнными станциями, даже если смены ключа GTK не было.
Автор предложил несколько способов решения этой проблемы, и ошибка была окончательно исправлена в обновлении прошивки 5.43.34.12682.
Почему проблемы mDNS так регулярно проявляются в беспроводных сетях
Протоколы автообнаружения (mDNS/DNS-SD) используют Multicast-трафик, который и сам по себе требует особого подхода на стороне сетевого оборудования и ПО, и для работы через Wi-Fi требует дополнительной обработки.
Групповой временный ключ (GTK)
Wi-Fi использует два типа ключей для различных ситуаций:
- Парный временный ключ (Pairwise Temporal Key, PTK) — это уникальный клиентский ключ, используемый для обычных unicast-пакетов, а также для broadcast и multicast от клиента Wi-Fi к точке доступа (или хосту в проводной сети); 
- Групповой временный ключ (Group Temporal Key, GTK) — это общий ключ, используемый для broadcast и multicast от точки доступа (или хоста в проводной сети) к клиенту Wi-Fi. 
Уже заметили проблему?
Классические интернет-протоколы обычно используют широковещательную и многоадресную рассылку только для анонсирования самого клиента серверу, который в случае Wi-Fi использует PTK, а не GTK.
Возьмём, к примеру, DHCP:
- Клиент broadcast'ом шлёт DHCP Discover: (Клиент (PTK) → AP); 
- Точка доступа отвечает пакетом DHCP Offer unicast: (AP (PTK) → Клиент); 
- Пакеты DHCP Request и DHCP Ack отправляются unicast и используют PTK. 
Однако, в отличие от классического DNS, mDNS отвечает пакетами multicast, чтобы все в сети могли узнать IP-адрес устройства, даже если они его не запрашивали.
- Multicast используется для стандартного запроса mDNS: (Клиент (PTK) → AP) 
- Также multicast используется для ответа на запрос mDNS: (AP (GTK) → Клиент) ← ошибка здесь! 
Поскольку большинство протоколов используют многоадресную рассылку только от клиента к точке доступа (в этом случае используется PTK), но не наоборот, проблемы с GTK обнаружить и отладить непросто. В основном всё работает, но не mDNS!
Ключ GTK также часто меняется, обычно каждый час, 6 часов, 24 часа или другой «круглый» промежуток времени.
Рекомендую прочитать ответ пользователя Spiff на сайте SuperUser, если хотите узнать особенности Wi-Fi подробнее.
Присоединение к Multicast-группе
Чтобы получать многоадресный трафик, приложение должно сначала присоединиться к «группе» многоадресной рассылки с помощью протокола IGMP (Internet Group Management Protocol). В случае mDNS эта группа представляет собой известный IP-адрес 224.0.0.251.
Однако многоадресная рассылка по Wi-Fi — еще один особый случай. Поскольку multicast «точка доступа → клиент» по сути является обычным broadcast'ом, направленным каждому клиенту точки доступа, технически не требуется присоединение к группе для получения данных.
Несмотря на это, драйвер Wi-Fi клиента обычно сам отбрасывает многоадресные пакеты, полученные от групп, на которых ОС не подписывалась, в основном из соображений энергосбережения.
Пакеты присоединения к группе "Membership Report" имеют тайм-аут, по истечении которого его необходимо отправить повторно, для повторного присоединения к группе.
Работа с таймаутами (или с повторной отправкой пакетов) также бывает некорректно реализована в драйверах Wi-Fi.
VPN / Несколько интерфейсов (multihoming)
Некорректно написанные приложения отправляют пакеты mDNS только через основной сетевой интерфейс (интерфейс «маршрута по умолчанию»), что приводит к невозможности обнаружения устройств в локальной сети при подключенном VPN с маршрутом по умолчанию — пакет уходит в неправильный сетевой интерфейс.
Это, увы, очень распространенная ошибка как в клиентских приложениях (примером м��жет служить KDE Connect), так и в VPN-клиентах, которые не применяют обходные пути для предотвращения маршрутизации Multicast/Broadcast в туннель.
Возможные решения проблемы
Кратко: если ваш принтер, Chromecast или другое устройство с mDNS постоянно подключено к сети (вы видите его IP-адрес в веб-интерфейсе маршрутизатора, его можно пинговать), но обнаруживается в сети только ровно 1 час, 1 день или другое время, скорее всего, это проблема c Multicast/GTK.
Следует попробовать:
- Проверить роутер на наличие опции фильтрации многоадресной рассылки (ICMP filtering, отключите её), а также IGMP Snooping (отключение этой опции приведёт к маршрутизации всего multicast-трафика без необходимости предварительного присоединения устройства к многоадресной группе). 
- Переключить режим безопасности Wi-Fi на "WPA-PSK/WPA2-PSK Mixed" — это приведёт к принудительному использованию шифрования TKIP для группового ключа (GTK), который более совместим с некоторыми устройствами (как продемонстрировано в проблеме № 3). 
- Полностью отключить смену ключа GTK (группового ключа). Multicast и Broadcast-данные будут шифроваться статическим ключом, что менее безопасно. 
- Создать отдельную (но не изолированную) сеть Wi-Fi только для принтера. 
Комментарии (7)
 - BoreaAlex31.10.2025 03:17- Мне встречались отвалы mDNS и в проводной сети. Поэтому скажу банальщину - если можно подключить устройство по IP адресу, подключаю именно так.  - RoasterToaster31.10.2025 03:17- Главное не забыть зарезервировать IP на роутере или выставить его вручную. 
  - ValdikSS Автор31.10.2025 03:17- Системные администраторы уровня локалхоста могут сделать «незаметную» сегментацию сети (vlan'ы с маршрутизацией или arp-proxy между ними) так, что всё будет работать, кроме multicast'а, потому что его маршрутизация часто требует отдельной настройки (прямо как в случае проблем с Wi-Fi GTK). 
 
 - gazkom31.10.2025 03:17- У меня на роутере сервис mDNS жрал память, поэтому я его отключил. Cromecast работает, принтер печатает. Зачем тогда этот mDNS нужен? 
 
           
 
user-book
оо, так это драйверная проблема? я всегда считал чисто программной, точнее более высокого уровня - программисты самого софта (а не драйверов) не заморачивались, потому как на разных платформах разные "приколы"
много лет разное разрабатываю и знаю что стабильно "ловить" устройство в локальной сети можно только по айпишнику.
То есть любое "автопределение" нужно строить на своих протоколах и рукопожатиях. Просканировать все доступные адреса и постучатся к каждому не так уж долго и абсолютно не сложно.
mDNS это здорово и обязательно для какой-то смарт железки, но он работает как бог пошлет и для реального использования когда парк клиентских устройств неизвестен "красивый" адрес доступа это больше маркетинговый ход
---
вообще вайфай для полоумных железок это всегда боль-дырка-задница потому как никогда не угадаешь как приемник будет обрабатывать соединение на своей стороне, а для слабых нестабильных по каналу железок это критично.
Еще большая боль это появившиеся относительно недавно "умные" сетевые функции в каждом утюге, из-за чего шибко умный роутер может рубануть на половине показавшееся ему медленное соединение, что бы тут же попытаться дать параллельно разные запросы на железку для получения этого же контента, но кусками:
- со стороны клиента это выглядит как зависший, а потом завершившийся ошибкой запрос
- а со стороны железки как агрессивный дедос где клиент даже не пытается читать ответ, ему нужно только забить канал.
ValdikSS Автор
Ого, и IPv4 /16 будете сканировать, и IPv6 /64 в IPv6-only-сетях? И через каждый сетевой интерфейс и диапазон?
В целом неплохо работает, но всецело полагаться на него не стоит. Часть устройств реализуют еще и UPNP-стандарты: Chromecast отправляет discovery и по DNS-SD, и по SSDP, и второй на старых точках доступа может работать лучше, вероятно, в силу того, что стандарт более старый и в драйверах написаны костыли конкретно для него (для его multicast-группы и порта, работает он по такому же принципу).
Я видел, как Wi-Fi был реализован неправильно даже на физическом уровне: использовалась модуляция QPSK при 1мбит/с MCS 0, что противоречит стандарту. Не работало, естественно.
user-book
99% покрывается сканированием ближнего от хоста диапазона (проверяя первым сам хост)
для 1% есть режим ручной настройки, где пользователь может сам руками вписать
по mDNS когда то еще очень давно на заре карьеры не раз пробовал что-то творить, но боевые интеграции показывали уйму подводных из за чего он остался уделом маркетинга и всяких фронт-енд аппок (и благодаря фронт-ендерам я знаю что проблемы с mDNS до сих пор всеобъемлющи и могут колебаться даже в пределах одной платформы)
К слову для интернет-железок IPv6 это до сих пор очень редкая редкость не в последнюю очередь потому что с ним не умеют работать
если прям вообще пиздец как очень сильно надо что бы железка была в сети корпоративного сегмента со всеми лицензиями и сертификатами то беру готовый сертефицированій модуль и работаю с ним по TTL (там зачастую свои протоколы) и такое было всего два раза у меня на практике, оба с немцами и оба раза как конкретное требование просто потому что
я видел вайфай который работал от степлера! Горе монтажники (причем вообще левые мимокрокодилы со своим кабелем ) пробили длинной скобой и на излете снайперски попали в жилу pcb-антены. Собственно у меня на столе она оказалась от заявки "нестабильно и слабо работает сеть"