Вы настроили маску подсети 255.255.255.255, ожидая, что устройство окажется в полной изоляции, но mDNS-сообщения от соседних устройств всё равно приходят. Это нормально – и вот почему. Работа сетевых интерфейсов не ограничивается маской подсети. Она влияет только на отправку пакетов, а не на их получение. Давайте разберёмся, как это работает, и что можно сделать.
Маска подсети: что она на самом деле контролирует
Маска подсети – это не фильтр для входящих данных. Она помогает устройству определить, какие IP-адреса находятся в его локальной сети (on-link), чтобы отправлять пакеты напрямую, без участия маршрутизатора. Например, при маске 255.255.255.0 адрес 192.168.1.5 «видит» 192.168.1.0/24 как локальную сеть. Но если маска 255.255.255.255, устройство считает локальной только свой собственный IP (это как отдельный остров в океане).
Важно: маска подсети – это локальная настройка. Свитчи и роутеры о ней не знают и не учитывают при передаче пакетов.
Когда соседнее устройство отправляет mDNS-сообщение (например, для обнаружения принтера), оно использует multicast MAC-адрес (01:00:5E:00:00:FB для IPv4). Свитч передаёт такие пакеты всем портам, независимо от IP-настроек. Ваше устройство их принимает, потому что сетевой интерфейс «слушает» multicast-трафик – маска здесь ни при чём. Кстати, даже если пакет адресован другому IP, он всё равно дойдёт до вашего устройства (проверьте через Wireshark – увидите кучу «чужих» пакетов).
Почему multicast обходит «правила» подсетей
mDNS (Multicast DNS) работает поверх UDP и использует адрес 224.0.0.251. Это link-local multicast, который не должен выходить за пределы локального сегмента L2 (то есть одного свитча или Wi-Fi сети). Но ключевое слово – «не должен». На практике:
- Свитчи и точки доступа не фильтруют multicast по умолчанию – они просто рассылают его всем.
- Даже если ваше устройство считает себя в отдельной подсети, физически оно находится в том же L2-сегменте. MAC-адреса, а не IP, определяют доставку кадров.
Пример пакета mDNS:
Destination MAC: 01:00:5E:00:00:FB
Destination IP: 224.0.0.251
Port: 5353
Операционная система может игнорировать такие пакеты (например, если они не совпадают с подсетью), но сетевой адаптер их всё равно получит. Чтобы это изменить, нужны дополнительные меры – на уровне железа или софта.
Как реально изолировать устройство от mDNS-трафика
Если цель – полностью блокировать mDNS, маской подсети не обойтись. Вот рабочие методы:
- Настройка VLAN. Разделите сеть на виртуальные LAN – каждая будет изолирована на уровне свитча. Например, создайте отдельную VLAN для IoT-устройств и другую для компьютеров (на большинстве роутеров для дома это делается через веб-интерфейс).
- Фильтрация multicast. На управляемых свитчах можно отключить IGMP Snooping или запретить forward multicast-пакетов. В Linux для этого есть iptables:
iptables -A INPUT -d 224.0.0.251 -j DROP
- Отключение mDNS-служб. На Windows остановите службу «Bonjour», на Linux – отключите avahi-daemon. Но это не блокирует трафик, а лишь предотвращает его обработку.
Кстати, некоторые роутеры (например, UniFi) позволяют включать Client Isolation – эта функция запрещает устройствам в одной Wi-Fi сети общаться друг с другом. Но она не всегда работает с multicast.
Важный нюанс: даже после всех настроек пакеты mDNS могут появляться в снифферах (вроде Wireshark). Фильтры применяются на уровне ОС, но сам сетевой интерфейс продолжает «видеть» весь трафик. Чтобы избавиться от него полностью, потребуется физическое разделение сетей (например, через два роутера).
Если вы дочитали, наверное, уже поняли: изоляция через маску подсети – миф. Сети устроены сложнее, и L3 (IP) не управляет тем, что происходит на L2 (Ethernet). Но теперь вы знаете, как это исправить – или, может, даже решите оставить всё как есть, раз это не мешает работе?