Господа, я столкнулся с весьма странным поведением UniFi AP. Мы установили 25 UniFi AP в большом розничном магазине, чтобы покрыть более 140 телефонов Samsung SMTw5100 WIP. Эти телефоны используют собственный протокол управления вызовами, но голосовой канал передаётся по RTP. Это устройства стандарта 802.11g с возможностью задавать порог "scanning start" и дельту для переключения между точками доступа.
Мы установили все UniFi AP и контроллер (Linux), версия 2.3.9. Проблемное поведение описывается так: Телефон1 и Телефон2 подключены к AP1. На AP можно с помощью tcpdump -i wifi0 увидеть RTP-трафик между двумя устройствами. Голосовая связь работает нормально, всё как положено.
Теперь, если AP2 находится на ТОМ ЖЕ канале, что и AP1, и Телефон2 подходит ближе к AP2, то мы видим, что телефон отправляет AP1 запрос на "disassociation", а затем происходит новое подключение к AP2. То есть Телефон2 перешёл на AP2 с почти незаметным прерыванием голоса:
May 25 00:30:05 AP1 daemon.info hostapd: ath1: STA 00:00:f0:05:be:43 IEEE 802.11: disassociated
May 25 00:30:05 AP1 user.info syslog: wevent.wevent_main(): wevent: EVENT_STA_LEAVE ath1: 2
May 25 00:30:05 AP2 daemon.info hostapd: ath1: STA 00:00:f0:05:be:43 IEEE 802.11: associated
May 25 00:30:05 AP2 daemon.info hostapd: ath1: STA 00:00:f0:05:be:43 WPA: pairwise key handshake completed (RSN)
May 25 00:30:05 AP2 user.info syslog: wevent.wevent_main(): wevent: EVENT_STA_JOIN ath1: 00:00:f0:05:be:43 / 2
Если проверить тот же эксперимент, когда AP2 работает на ДРУГОМ канале, то мы НЕ увидим запрос disassociation от телефона к AP1, НО будет запрос на ассоциацию с AP2 (то же может случиться и в первом случае, если телефон не дотягивается до AP1, чтобы послать disassociation из-за слабого сигнала). То есть телефон подключён к AP2, а AP1 об этом не знает. В результате голосовой поток с Телефон1 на Телефон2 остаётся внутри wifi0 и не выходит на eth0, чтобы попасть к AP2. Голос в обратную сторону идёт через eth0 нормально, что усугубляет ситуацию, поскольку таймер устаревания записи о Телефон2 на мосту br0 AP1 не истекает. Итог – пока AP1 не заметит отсутствие телефона и не разорвёт ассоциацию (что может занять до 6 минут!), связь с Телефоном2 к Телефону1 отсутствует.
Интересно, что такая же ситуация была между двумя Android-телефонами (GS3), которые пингуют друг друга.
Это нормально? Есть ли возможность настроить таймер устаревания моста или отключить его совсем? Может, есть способ, чтобы AP1 узнавал о новом подключении Телефона2 к AP2 и перенастраивал мост?
Мы также пробовали версию 3.1.1 при тех же каналах, но появилась новая проблема: телефоны уходят в офлайн спустя 3–5 минут бездействия (что указывает на проблемы с подключением к PBX, но мы пока не успели это отладить). В версии 2.x такого не было.
Если нужно, могу провести дополнительные тесты или предоставить заранее сконфигурированный WIP телефон.
Спасибо заранее,
George
Мы установили все UniFi AP и контроллер (Linux), версия 2.3.9. Проблемное поведение описывается так: Телефон1 и Телефон2 подключены к AP1. На AP можно с помощью tcpdump -i wifi0 увидеть RTP-трафик между двумя устройствами. Голосовая связь работает нормально, всё как положено.
Теперь, если AP2 находится на ТОМ ЖЕ канале, что и AP1, и Телефон2 подходит ближе к AP2, то мы видим, что телефон отправляет AP1 запрос на "disassociation", а затем происходит новое подключение к AP2. То есть Телефон2 перешёл на AP2 с почти незаметным прерыванием голоса:
May 25 00:30:05 AP1 daemon.info hostapd: ath1: STA 00:00:f0:05:be:43 IEEE 802.11: disassociated
May 25 00:30:05 AP1 user.info syslog: wevent.wevent_main(): wevent: EVENT_STA_LEAVE ath1: 2
May 25 00:30:05 AP2 daemon.info hostapd: ath1: STA 00:00:f0:05:be:43 IEEE 802.11: associated
May 25 00:30:05 AP2 daemon.info hostapd: ath1: STA 00:00:f0:05:be:43 WPA: pairwise key handshake completed (RSN)
May 25 00:30:05 AP2 user.info syslog: wevent.wevent_main(): wevent: EVENT_STA_JOIN ath1: 00:00:f0:05:be:43 / 2
Если проверить тот же эксперимент, когда AP2 работает на ДРУГОМ канале, то мы НЕ увидим запрос disassociation от телефона к AP1, НО будет запрос на ассоциацию с AP2 (то же может случиться и в первом случае, если телефон не дотягивается до AP1, чтобы послать disassociation из-за слабого сигнала). То есть телефон подключён к AP2, а AP1 об этом не знает. В результате голосовой поток с Телефон1 на Телефон2 остаётся внутри wifi0 и не выходит на eth0, чтобы попасть к AP2. Голос в обратную сторону идёт через eth0 нормально, что усугубляет ситуацию, поскольку таймер устаревания записи о Телефон2 на мосту br0 AP1 не истекает. Итог – пока AP1 не заметит отсутствие телефона и не разорвёт ассоциацию (что может занять до 6 минут!), связь с Телефоном2 к Телефону1 отсутствует.
Интересно, что такая же ситуация была между двумя Android-телефонами (GS3), которые пингуют друг друга.
Это нормально? Есть ли возможность настроить таймер устаревания моста или отключить его совсем? Может, есть способ, чтобы AP1 узнавал о новом подключении Телефона2 к AP2 и перенастраивал мост?
Мы также пробовали версию 3.1.1 при тех же каналах, но появилась новая проблема: телефоны уходят в офлайн спустя 3–5 минут бездействия (что указывает на проблемы с подключением к PBX, но мы пока не успели это отладить). В версии 2.x такого не было.
Если нужно, могу провести дополнительные тесты или предоставить заранее сконфигурированный WIP телефон.
Спасибо заранее,
George
