EnvironmentGateway: UDM Pro MaxUniFi OS: 5.1.15 (Official release channel)UniFi Network: 10.4.57 (Official release channel)Firewall: Zone-Based FirewallРезюмеПри настройке Settings → Networks → Gateway mDNS Proxy = Off шлюз всё равно периодически отправляет mDNS-трафик обнаружения сервисов (UDP 5353) в VLAN, изолированный от остальной сети файрволом. Этот трафик перечисляет типы mDNS-сервисов и именованные экземпляры сервисов, которые исходят от устройств из других VLAN. Настройка ни на что не влияет.Проверено и воспроизведено при Off, при Custom (VLAN-скоуп настроен так, что изолированный VLAN не выбран) и после полной перезагрузки шлюза. Ничего из этого не помогает.Ожидаемое поведениеСогласно документации («Off полностью останавливает ретрансляцию mDNS-трафика») и опции Custom VLAN-скоупа, VLAN, исключённый из скоупа mDNS-прокси, не должен получать никакого mDNS-трафика, исходящего из других сетей.Фактическое поведениеСобственный интерфейс шлюза в изолированном VLAN отправляет mDNS PTR-запросы на 224.0.0.251:5353 примерно каждые 60 секунд, перечисляя типы сервисов и именованные экземпляры, принадлежащие устройствам из других VLAN. Пассивный хост в изолированном VLAN, который сам ничего не отправляет, всё равно получает этот непрерывный перечень.Шаги для воспроизведенияСоздать VLAN B и изолировать его (никаких меж-VLAN разрешений в/из других зон; только интернет).Установить Gateway mDNS Proxy = Off (также воспроизводится с Custom + VLAN B не выбран).На хосте в VLAN B выполнить: sudo tcpdump -i <iface> -n 'host <gateway-ip-on-B> and port 5353'.Наблюдать: примерно каждые 60 с шлюз отправляет mDNS PTR-запросы, перечисляющие сервисы из других VLAN. Сохраняется после перезагрузки шлюза.Наблюдаемый трафик (очищенный)Источник — IP-адрес интерфейса шлюза в изолированном VLAN; назначение — mDNS-мультикаст:<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _services._dns-sd._udp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _airplay._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _raop._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _hap._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _ipp._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? <redacted-hostname>._companion-link._tcp.local.
...плюс дополнительные вендорские типы сервисов и именованные экземпляры устройств из
других VLAN (отредактировано).
Первопричина (из read-only-инспекции на устройстве)Три процесса слушают UDP 5353 на шлюзе (ss -lunp):0.0.0.0:5353 users:(("avahi-daemon", ...))
0.0.0.0:5353 users:(("unifi-core", ...)) # два сокета
avahi-daemon — его рефлектор корректно отключён (/etc/avahi/avahi-daemon.conf → [reflector] enable-reflector=no). НЕ источник.unifi-core — использует Node.js-библиотеку bonjour-service (/usr/share/unifi-core/app/node_modules/bonjour-service/), привязанную к 0.0.0.0:5353, т.е. ко всем интерфейсам.ubntmdnsd — запускается каждую минуту через /etc/cron.d/mdns-job:* * * * * root /usr/sbin/ubntmdnsd -t10 -f /tmp/mdns_services.json -c /data/udapi-config/mdns.cache -s -j -w
выполняя сканирование обнаружения сервисов по всем интерфейсам.Настройка Gateway mDNS Proxy управляет только avahi-daemon (чей рефлектор и так уже отключён). ubntmdnsd (cron, каждую минуту) и bonjour-service из unifi-core сканируют все интерфейсы независимо от настройки прокси и независимо от Custom VLAN-скоупа, поэтому они продолжают отправлять mDNS в исключённые/изолированные VLAN. Именно поэтому Off, Custom и перезагрузка не дают эффекта — они действуют на другой компонент, а не на тот, что производит трафик. Периодичность всплесков ~60 с точно соответствует ежеминутному cron-заданию.Контролируемый тест подтверждает, что утечка идёт от шлюза, а не от хоста: когда собственный mDNS изолированного хоста полностью заблокирован на его локальном файрволе, ежеминутные всплески перечисления от шлюза продолжаются без изменений.Влияние на безопасностьVLAN, изолированный на L3 файрволом, всё равно получает — незапрошенно и непрерывно — полное перечисление экземпляров mDNS-сервисов (имена хостов, названия сервисов, читаемые метки зон/комнат) из остальной сети. Недоверенный или скомпрометированный хост в «изолированном» VLAN может пассивно составить карту инвентаря устройств других VLAN, не отправив ни единого пакета — что сводит на нет заявленную цель изоляции и контроля mDNS-прокси.Предлагаемое исправлениеСделать так, чтобы настройка Gateway mDNS Proxy (Off и Custom VLAN-скоуп) также управляла ubntmdnsd и bonjour-service из unifi-core, чтобы никакое mDNS-обнаружение не выполнялось на VLAN, исключённых из скоупа прокси, и не отправлялось в них. Например, ограничить набор интерфейсов ubntmdnsd и bonjour-service настроенным скоупом или пропускать cron-сканирование на исключённых интерфейсах.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _airplay._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _raop._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _hap._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? _ipp._tcp.local.
<gw-ip>.5353 > 224.0.0.251.5353: PTR (QM)? <redacted-hostname>._companion-link._tcp.local.
...плюс дополнительные вендорские типы сервисов и именованные экземпляры устройств из
других VLAN (отредактировано).
Первопричина (из read-only-инспекции на устройстве)Три процесса слушают UDP 5353 на шлюзе (ss -lunp):0.0.0.0:5353 users:(("avahi-daemon", ...))
0.0.0.0:5353 users:(("unifi-core", ...)) # два сокета
avahi-daemon — его рефлектор корректно отключён (/etc/avahi/avahi-daemon.conf → [reflector] enable-reflector=no). НЕ источник.unifi-core — использует Node.js-библиотеку bonjour-service (/usr/share/unifi-core/app/node_modules/bonjour-service/), привязанную к 0.0.0.0:5353, т.е. ко всем интерфейсам.ubntmdnsd — запускается каждую минуту через /etc/cron.d/mdns-job:* * * * * root /usr/sbin/ubntmdnsd -t10 -f /tmp/mdns_services.json -c /data/udapi-config/mdns.cache -s -j -w
выполняя сканирование обнаружения сервисов по всем интерфейсам.Настройка Gateway mDNS Proxy управляет только avahi-daemon (чей рефлектор и так уже отключён). ubntmdnsd (cron, каждую минуту) и bonjour-service из unifi-core сканируют все интерфейсы независимо от настройки прокси и независимо от Custom VLAN-скоупа, поэтому они продолжают отправлять mDNS в исключённые/изолированные VLAN. Именно поэтому Off, Custom и перезагрузка не дают эффекта — они действуют на другой компонент, а не на тот, что производит трафик. Периодичность всплесков ~60 с точно соответствует ежеминутному cron-заданию.Контролируемый тест подтверждает, что утечка идёт от шлюза, а не от хоста: когда собственный mDNS изолированного хоста полностью заблокирован на его локальном файрволе, ежеминутные всплески перечисления от шлюза продолжаются без изменений.Влияние на безопасностьVLAN, изолированный на L3 файрволом, всё равно получает — незапрошенно и непрерывно — полное перечисление экземпляров mDNS-сервисов (имена хостов, названия сервисов, читаемые метки зон/комнат) из остальной сети. Недоверенный или скомпрометированный хост в «изолированном» VLAN может пассивно составить карту инвентаря устройств других VLAN, не отправив ни единого пакета — что сводит на нет заявленную цель изоляции и контроля mDNS-прокси.Предлагаемое исправлениеСделать так, чтобы настройка Gateway mDNS Proxy (Off и Custom VLAN-скоуп) также управляла ubntmdnsd и bonjour-service из unifi-core, чтобы никакое mDNS-обнаружение не выполнялось на VLAN, исключённых из скоупа прокси, и не отправлялось в них. Например, ограничить набор интерфейсов ubntmdnsd и bonjour-service настроенным скоупом или пропускать cron-сканирование на исключённых интерфейсах.
