- PVSM.RU - https://www.pvsm.ru -
Wireless Society [1] by JOSS7
Wi-Fi в офисах Mail.Ru Group за последние десять лет пережил несколько смен оборудования, подходов к построению сети, схем авторизации, администраторов и ответственных за его работу. Начиналась беспроводная сеть, наверное, как и во всех компаниях — с нескольких домашних роутеров, которые вещали какой-то SSID со статичным паролем. Долгое время этого было достаточно, но количество пользователей, площади и количество точек доступа стало расти, домашние D-Linkʼи постепенно заменили на Zyxel NWA-3160. Это уже было относительно продвинутым решением: одна из точек могла выступать в качестве контроллера для остальных и давала единый интерфейс для менеджмента всей сети. Какой-то более глубокой логики и автоматизации софт NWA-3160 не давал, только возможность настройки подключенных к контроллеру точек, пользовательский трафик обрабатывался каждым устройством независимо. Следующей сменой оборудования стал переход на контроллер Cisco AIR-WLC2006-K9 + несколько точек доступа Aironet 1030. Уже совсем взрослое решение, с безмозглыми точками доступа и обработкой всего трафика контроллером беспроводной сети. После еще была миграция на пару AIR-WLC4402-K9, сеть уже выросла до сотни точек Cisco Aironet 1242AG, 1130AG, 1140AG.
Наступил 2011 год, через год ожидался переезд компании в новый офис, а Wi-Fi уже был больной темой и наиболее частой причиной жалоб сотрудников в техподдержку: низкая скорость соединения (а буферизация видео на youtube/vk/pornhub вызывает [2] нешуточный стресс, и очевидно мешает работе), обрывы соединения. Периодические попытки использовать Wi-Fi-телефоны проваливались из-за неработающего роуминга. Ноутбуков со встроенным Ethernet становилось все меньше (спасибо появлению MacBook Air и гонке производителей за толщиной корпуса), подавляющее большинство мобильных телефонов уже требовали постоянного подключения к интернету.
Эфир был постоянно занят, старенькие точки доступа не выдерживали нагрузки. Начинались дисконнекты пользователей при подключении 25+ устройств к одной точке доступа, не поддерживался стандарт 802.11n и диапазон 5 Ггц. Помимо этого, для нужд мобильной разработки в офисе находился ворох SOHO-роутеров, подключенных к различным эмуляторам (средствами NetEm [3]).
С точки зрения логической схемы с момента перехода на централизованные решения в 2007–2008 годах мало что поменялось: несколько SSID, включая гостевой, несколько больших подсетей (/16), в которые попадали авторизованные в той или иной беспроводной сети пользователи.
С сетевой безопасностью также было плохо: основным механизмом авторизации пользователей в доверенные Wi-Fi-сети был PSK, не менявшийся несколько лет. Порядка тысячи устройств постоянно находились в одной подсети без какой-либо изоляции, что способствовало распространению зловредов. Номинальная фильтрация трафика осуществлялась с помощью iptables на *NIX-шлюзе, служившей NAT’ом для офиса. Естественно, ни о какой гранулярности firewall’ов не могло быть и речи.
Переезд компании оказался отличной возможностью обдумать и построить офисную сеть с нуля. Пофантазировав на тему идеальной сети и проанализировав основные жалобы, удалось определить чего же мы хотим добиться:
Есть несколько подходов к организации беспроводной сети с точки зрения управления и обработки пользовательского трафика оборудованием:
Мы успели попробовать каждый из этих подходов, и централизованное решение с единым контроллером было наиболее подходящим для наших новых задач. Вместе с контроллером мы получали единую точку применения списков доступа и отвязывали роуминг клиентов между точками доступа от адресного пространства на проводе.
На тот момент (конец 2012 года) было всего несколько вендоров, вызывающих у нас доверие и при этом имеющих удовлетворяющую основным требованиям линейку оборудования. До живого тестирования помимо очевидной Cisco дошло решение от Aruba. Тестировались точки 93-й 105-,125- и 135-ой серии с контроллером. Все проходило в реальных условиях, с живыми пользователями: развернули сеть на этих точках на нескольких этажах старого офиса. По производительности точки полностью удовлетворяли потребностям на тот момент. Софт контроллера был тоже неплох: многие фишки, для которых в случае c Cisco потребовалось бы устанавливать дополнительные сервера (MSE/WCS/Prime) и закупать лицензии, были реализованы непосредственно на контроллере (геолокация, сбор и отображение продвинутой статистики по клиентам, отрисовка heatmapʼов и отображение пользователей на карте в реальном времени). Вместе с этим обнаружились и недостатки:
В итоге пришлось вернуться к решениям от Cisco: контроллеру 5508, топовым AP 3602i для основных помещений офиса и AP 1262 для подключения внешних антенн. Точки 36-ой серии на тот момент были интересны возможностью апгрейда до 802.11ac Wave 1 путем подключения дополнительного антенного модуля. К сожалению, эти модули так и не стали совместимы с произведенными для России точками с индексом -R-, поэтому для полноценной поддержки 802.11ac приходится менять точки доступа на AP 3702 (и 3802 в будущем).
Пошаговых инструкций по первоначальной настройке «цискиного» Wi-Fi в сети множество, равно как и по планированию (а начиная с восьмой версии софта большинство «best practices» по настройке доступны напрямую из web-ui контроллера).
Я остановлюсь только на неочевидных и проблемных моментах, с которыми столкнулся.
Контроллер сети Wi-Fi обрабатывает весь трафик и является единой точкой отказа. Нет контроллера — сеть не работает вообще. Его необходимо было зарезервировать в первую очередь. С некоторых пор Cisco предлагает для этого два различных решения:
Вариант «AP SSO» выглядит гораздо интересней: мгновенный и незаметный для пользователя failover, отсутствие необходимости в дополнительных лицензиях, не нужно вручную поддерживать актуальность конфигурации второго контроллера и т.д. В реальной жизни, в свежем на тот момент софте 7.3 все оказалось не столь радужно:
С последним пунктом и возникли сложности. Суть проблемы — в соответствии с таблицей [4] в случае любой непонятной ситуации — standby контролер уходит в reboot. Предположим, что у нас следующая схема сети:
Что происходит при отключении C6509-1? Активный контроллер теряет uplink и сразу перезагружается. Бэкапный контроллер теряет связь с основным и пытается пропинговать шлюз, который в течение трех секунд (при дефолтных таймерах VRRP) будет недоступен до «переезда» адреса на C6509-2. После двух неудачных пингов шлюза в течение двух секунд standby wlc тоже уйдет в перезагрузку. Причем дважды. Поздравляю, на ближайшие 20–25 минут мы остались без Wi-Fi. Аналогичное поведение наблюдалось при использовании любого протокола резервирования первого перехода (FHRP), а также спонтанные reboot’ы контроллеров при слишком строгом ICMP rate limit. Решается проблема либо тюнингом таймингов FHRP, чтобы адрес успевал «переехать» до перезагрузки standby wlс. Либо переносом FHRP master на роутер, к которому подключен standby wlc, либо полным изменением схемы подключения (например, использованием MC-LAG/VPC/VSS-PC в сторону контроллеров).
В софте 8.0+ проблему решили, усложнив логику проверки доступности шлюза и перейдя с ICMP-пингалок на UDP-heartbeatʼы собственного формата. В итоге мы остановились на связке из HSRP и софта 8.2, добившись таки незаметного для пользователя фэйловера между контроллерами.
Также для отказоустойчивости используются несколько RADIUS-серверов (MS NPS), точки доступа в пределах одного помещения подключаются в различные свичи доступа, свичи доступа имеют uplink’и к двум независимым устройствам ядра сети и т.д.
Найти общие рекомендации по тюнингу производительности Wi-Fi не сложно (например, Wi-Fi: неочевидные нюансы (на примере домашней сети) [5]), так что сильно заострять на этом внимание не буду. Разве что вкратце о специфике.
Представим, что после базовой настройки контроллера и подключения к нему первых десяти точек доступа на тестовом этаже еще недостроенного здания, мы подключаемся к спектроанализатору и видим, что более 40% эфира в 2.4 Ггц уже занято. Вокруг ни единой живой души, мы в пустом здании, здесь нет чужих сетей и домашних Wi-Fi-роутеров. Половину эфирного времени занимает передача beaconʼов — они всегда передаются на минимально поддерживаемой точками скорости передачи, при большой плотности это особенно заметно. Добавление в эфир новых SSID усугубляет проблему. При минимальном дата-рейте в 1 Mbps уже 5 SSID при 10 точках в зоне «поражения» приводят к стопроцентной загрузке эфира исключительно биконами. Отключение всех data-rates ниже 12 Mbps (802.11b) кардинально меняет картину.
Большие L2-домены — это весело. Особенно на беспроводной сети. Multicast забивает эфир, открытые peer-to-peer коннекты внутри сегмента позволяют одному зараженному хосту атаковать другие, и т.д. Очевидным решением стал переход на 802.1X. Клиенты были поделены на несколько десятков групп. Для каждой был заведен отдельный VLAN и отдельные списки доступа.
Волевым решением в доверенных SSID был запрещен p2p. Для WLAN с авторизацией по радиусу WLC позволяет объединить любое количество VLAN в логическую группу и выдавать каждому пользователю нужный сегмент сети. При этом пользователю не нужно задумываться о том, куда подключиться. В мечтах конечная схема выглядела как два SSID — PSK для гостевых пользователей и WPA2-Enterprise для корпоративных, но эта мечта быстро разбилась о суровую реальность.
Необходимость в новых WLAN'ах появилась сразу же. Часть устройств не поддерживала .1x, но должна была находиться в околодоверенных сегментах. Для другой части требовался p2p, а у остальных были особенно специфичные требования, как, например, PBR трафика через сервера, или ipv6-only.
При этом точки 3602 позволяют вещать не более шестнадцати SSID (а 802.11ac модули, на которые была надежда в будущем, не более восьми).
Но объявлять даже 16 SSID означает забить биконами весьма солидный процент эфира.
На помощь пришли Ap Groups — возможность вещать определенные сети с определенных точек доступа. В нашем случае каждый этаж был разбит на отдельную группу с индивидуальным набором для каждой. При желании дробление можно продолжать и дальше.
Из предыдущего пункта вытекает следующая проблема: девайсы, требующие multicast и mDNS (Apple TV наиболее часто встречающийся экземпляр). Все пользователи побиты по VLAN’ам и не видят чужой трафик, а держать в каждом VLAN’е по отдельному mDNS-устройству несколько проблематично. В дополнение к этому изначально failover svi на роутерах был реализован посредством VRRP, который использует multicast, и по умолчанию отправляет ключ аутентификации открытым текстом.
Подключаемся к Wi-Fi, слушаем трафик, крафтим hello-пакет, становимся мастером. Добавляем md5 к VRRP. Теперь hello-пакеты в какой-то степени защищены. Защищены и отправляются во всех клиентов. Как и весь остальной multicast-трафик в пределах сегмента. Другими словами:
Решение второй проблемы, казалось, напрашивалось само собой — отключить multicast в беспроводной сети. С первой проблемой на тот момент (до выхода 7.4) было все немного сложнее. Приходилось поднимать в нужных VLAN’ах сервер, слушающий mDNS запросы, и ретранслирующий их между клиентами и устройствами. Решение очевидно ненадежное, нестабильное и не дающее полноценно решить проблему наличия multicast’а.
Начиная с 7.4 Cisco выкатили mDNS-proxy на уровне контроллера. Теперь все mDNS запросы с определенной «service string» внутри (например, _airplay._tcp.local. для Apple TV) стало возможно отправлять только в интерфейсы с определенным mDNS-профилем (причем это можно отдельно настроить на каждой точке доступа, что позволяет транслировать запросы даже из тех VLAN’ов, к которым контроллер не подключен физически за счет подключения туда лишь одной точки). И этот функционал работает независимо от глобальных настроек multicast’а. Что позволяет выключить последний и благополучно отбрасывать пакеты. Что и было сделано.
Мы выключили multicast. Нагрузка на сеть уменьшилась. Казалось бы, счастье есть. Но тут появляется один-два клиента, которым он все-таки позарез нужен. К сожалению, без костылей здесь обойтись не удалось. И костылем этим оказался FlexConnect, который никак для этих целей не предназначен, и вообще…
FlexConnect — это функционал, позволяющий привязывать к контроллеру точки, находящиеся, например, в удаленном офисе, для централизованного управления. И главной особенностью для нас в данном случае станет возможность реализовать Local Switching на таких точках. Нужно это для возможности точек вручную обрабатывать трафик (вещать SSID и т.д.) при падении связности с контроллером или в том случае, если мы не хотим форсировать весь трафик от точки через него.
Заводим отдельную точку в FlexConnect группу, создаем отдельный SSID в этой группе и обрабатываем там весь трафик локально. С одной стороны, это явное использование функционала не по назначению, но с другой — у нас появляется возможность поднимать маленькие беспроводные нефильтрующиеся L2-домены по необходимости, не затрагивая основную инфраструктуру.
Рано или поздно встает необходимость защититься от evil twin [6], т.к. BYOD не позволяет защитить клиента от самого себя. Все точки встраивают в биконы фрэйм, отвечающий за принадлежность к контроллеру. При получении бикона с некорректным фреймом — его BSSID записывается.
Любая Lightweight Access Point [7] каждый заданный интервал времени снимается со своего канала на 50 мс для сбора информации об интерференции, шуме и неизвестных клиентах и точках доступа. При нахождении rogue AP с SSID идентичным одному из доверенных генерируется соответствующая запись в таблице «врагов». Дальше появляется возможность либо отловить устройство людским ресурсом, либо подавить его силами контроллера. В последнем случае контроллер отдает нескольким точкам, не участвующим в передаче данных, снифать трафик от «близнеца» и отправлять deauth-пакеты как ему от имени клиентов, так и всем клиентам от его имени.
Потенциально данный функционал очень интересен и очень опасен одновременно. Некорректная конфигурация и мы уничтожаем весь неизвестный контроллеру Wi-Fi в радиусе покрытия точек.
Статья не претендует на звание какого-то гайда о том, как правильно строить беспроводную сеть. Скорее это просто основные проблемы, с которыми мы столкнулись при замене и расширении офисной инфраструктуры.
Сейчас только в основном офисе у нас более трех тысяч беспроводных клиентов и более трех сотен точек доступа, так что какие-то решения могут быть неприменимы или избыточны в других условиях.
P.S. Не нашел на хабре ни одного упоминания WLCCA. Это анализатор конфигурации контроллера, указывающий как на некоторые проблемы, так и дающий советы по настройке. Инвайт можно запросить тут [8]. Заливаем в него вывод show run-config (215 000 строк в нашем случае) и получаем на выходе страничку с разбором всего интересного на WLC. Enjoy!
Автор: Mail.Ru Group
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/198771
Ссылки в тексте:
[1] Wireless Society: http://joss7.deviantart.com/art/Wireless-Society-170342290
[2] вызывает: https://www.ericsson.com/news/1986667
[3] NetEm: http://man7.org/linux/man-pages/man8/tc-netem.8.html
[4] таблицей: http://www.cisco.com/c/en/us/td/docs/wireless/controller/technotes/7-5/High_Availability_DG.html
[5] Wi-Fi: неочевидные нюансы (на примере домашней сети): https://habrahabr.ru/post/149447/
[6] evil twin: https://en.wikipedia.org/wiki/Evil_twin_(wireless_networks)
[7] Lightweight Access Point: http://www.cisco.com/c/en/us/support/docs/wireless/aironet-1200-series/70278-lap-faq.html
[8] тут: https://supportforums.cisco.com/community/12168506/wireless-lan-controller-config-analyzer-wlcca
[9] Источник: https://habrahabr.ru/post/312580/
Нажмите здесь для печати.