Ребята, немного с опозданием, но всё же хочу сказать, что у меня эта проблема уже несколько лет. Несколько лет назад я решил её с помощью правки config.properties, а потом об этом забыл. Мы недавно переехали в новое здание, и я всё забыл. Как только наши новые свитчи заработали, начали поступать звонки, что всё пошло наперекосяк. Я добавил MAC-адреса новых свитчей в config.properties, быстро перезапустил свитчи — и всё снова заработало как надо.
Чтобы помочь всем, вот точная конфигурация, на которой это происходит:
Unifi Controller работает на Ubuntu LTS 16.04 / версия 5.12 на 24.11.2019. Последний раз проблема возникала на версии 5.10 около двух месяцев назад.
16 портовых Unifi Switch — 750W или 500W первого поколения, без USG.
1 оптоволоконный Unifi switch 16XG6.
Старые 8-портовые Ubiquiti tough-switches с настроенными VLAN.
58 Unifi WAP.
PfSense Router на мощной машине (Poweredge R640 с 256 ГБ оперативки). Настроено 5 тегированных VLAN. Неотмеченный трафик идёт на DC по проводной сети, остальные отделены, получают DNS и DHCP от pfSense, не касаясь основного домена.
- Главная сеть — DHCP на нетегированном VLAN (1), идущий в DC с ADDS, DHCP и DNS на Windows Server 2016 — не затрагивается этой ошибкой.
- VLAN-сети — DHCP ACK пакеты произвольно теряются разными свитчами. Это может не происходить три недели, а потом вдруг случаться два дня подряд и длиться бесконечно, пока я не перезагружу pfSense (зависает) и проблемный свитч. Обычно «поведший себя плохо» свитч определяется в контроллере Unifi по 100% загрузке CPU. Если я отключаю этот свитч, следующий начинает «подтаскивать» нагрузку и тоже теряет ACK пакеты. Всё это время непрерывная потеря пакетов вызывает зависание pfSense и прекращение маршрутизации трафика VLAN.
Симптомы похожи на сбой роутера, но если подключиться к свитчу через telnet, видно, что он просто отбрасывает все DHCP ACK пакеты. Я также запускал Wireshark и убедился, что «чёрная дыра» именно в свитчах.
Ещё заметил, что в контроллере появилась кнопка включения DHCP snooping (отдельно от DHCP guarding). Не уверен, когда это добавили и связано ли это с обходом этой ошибки.
Надеюсь, это кому-то поможет.