- Беспроводной машрутизатор своими руками
- Выбор комплектующих
- Список материалов
- Программное обеспечение
- Маршрутизация
- Беспроводная точка доступа
- Установка точки доступа 802.11ac (5 ГГц)
- Пассивное сканирование
- Нормативные требования
- Конфигурация
- Настройка виртуального SSID с помощью hostapd
- Диаграмма
- Подготовка
- Сетевой интерфейс
- Конфигурация точки доступа
- Как я создавал бесшовный Wi-Fi
Беспроводной машрутизатор своими руками
- Выбор комплектующих
- Запуск сетевых интерфейсов
- Установка точки доступа 802.11ac (5 ГГц)
- Настройка виртуального SSID с помощью hostapd
Последние десять лет я покупал дешёвое сетевое оборудование и ставил на него DD-WRT, чтобы вернуть «функции» ценой более $500, удалённые из ядра Linux, на котором основаны стоковые прошивки.
Несмотря на нестабильные сборки, неисправленные ошибки и споры, DD-WRT всё равно предпочтительнее стоковых прошивок. Но сейчас достойные комплектующие дешевле, чем когда-либо, а DIY-сообщество поголовно перешло на Linux (я смотрю на вас, м-р Raspberry), так почему бы не собрать собственный беспроводной маршрутизатор раз и навсегда?
Выбор комплектующих
Первым делом нужно определиться с платформой: x86 или ARM? Не буду подробно обсуждать ключевые различия, но вкратце: у первой лучше производительность, а вторая дешевле и энергоэффективнее. Платы Raspberry Pi (и аналоги) чрезвычайно дёшевы и, вероятно, мощнее большинства беспроводных коммерческих маршрутизаторов, но платформы x86 широко распространены и имеют преимущество за счёт стандартизированных форм-факторов и портов расширения.
Конечно, самая важная деталь — это чипсет. Сегодня стандартами де-факто являются 802.11n (2,4 ГГц) и 802.11ac (5 ГГц), но подобрать драйверы под Linux — та ещё задачка, тем более с поддержкой режима AP (точка доступа). Короче, если не хотите проблем, то выбирайте чипсеты Atheros. Драйверы ath9k и ath10k хорошо поддерживаются, вы легко найдёте их с интерфейсами USB и/или mini-PCIe.
Хотя бы один контроллер сетевого интерфейса (NIC) — необходимый минимум, а RAM и накопитель выбирайте на свой вкус.
Список материалов
Принеся в жертву цену и энергопотребление, я выбрал x86-платформу ради модульной, относительно мощной конфигурации, доступной для апгрейда.
Если вам не нужен ARM, то и вентилятор не обязателен.
- Gigabyte GA-J1900N-D3V (J1900 четырёхъядерный 2 ГГц Celeron, два NIC)
- Airetos AEX-QCA9880-NX (двухдиапазонный 802.11ac, MIMO)
- 4 ГБ RAM (DDR3-LP, 1333 МГц, 1,35 В)
- Удлинитель mPCIe
- Корпус MX500 mini-ITX
- Три двухдиапазонных антенны 6dBi RP-SMA + кабель RP-SMA
- PicoPSU-90
- Запасной HDD 2.5”
Корпус просторный, с двумя подготовленными отверстиями для штепсельной вилки AC/DC. Установка материнской платы, RAM и Pico-PSU прошла гладко:
Железячное порно
Самым сложным оказалась установка mini-PCIe WiFi, потому что плата поддерживает только карты половинного размера: здесь на помощь пришёл удлинитель mPCIe. Я взял кабель FFC на 20 см (входит в комплект) для подключения обеих сторон адаптера и закрепил mini-PCIe на шасси с помощью двустороннего скотча.
Расширитель mini-PCIe
К счастью, корпус поставляется с тремя предварительно вырезанными отверстиями для антенн. Вот окончательный результат:
Программное обеспечение
Понятно, что ставим Linux. В зависимости от оборудования, это может быть оптимизированный дистрибутив вроде Raspbian (для Raspberry Pi) или любой другой дистрибутив Linux, который вам нравится. Поскольку я много лет использую Ubuntu, то выбрал Ubuntu Server 18.04 LTS, с которым мне привычнее работать и которому обеспечена долгосрочная поддержки.
В дальнейшем статья предполагает, что вы используете дистрибутив на базе Debian.
Если установка прошла нормально и вы зашли в консоль, определим имена интерфейсов:
На материнской плате два встроенных NIC: это enp1s0 и enp2s0 . Беспроводная карта отображается как wlp5s0 и поддерживает режим AP, как и предполагалось:
Теперь можем обрисовать, что нам нужно: первый NIC поставим как WAN-порт, а второй соединим с беспроводным интерфейсом:
Если у вас Ubuntu 18.04, то немедленно избавимся от netplan , чтобы вернуться к поддержке /etc/network/interfaces:
В качестве DHCP/DNS-сервера выберем dnsmasq:
Так как мы будем запускать и настраивать процесс dnsmasq через хук post-up , не забудьте отключить демон при загрузке:
Напишем предварительную конфигурацию сетевых интерфейсов в соответствии с диаграммой, включая минимальную настройку dnsmasq :
Как вы могли заметить по секции post-up , dnsmasq стартует, как только поднимается мост. Его настройка выполняется только аргументами командной строки ( —conf-file=/dev/null ), и процесс остановится при отключении интерфейса.
В поле bridge_ports специально не указан интерфейс wlp5s0 , потому что hostapd добавит его к мосту автоматически (brctl может отказаться делать это, прежде чем запущен hostapd для изменения режима интерфейса).
Теперь можно перезапустить сеть ( sudo service networking restart ) или просто перезагрузиться, чтобы проверить правильность настройки конфигурации сети.
Обратите внимание: хотя мы в данный момент можем получить DHCP от enp2s0 , но у нас не будет ни беспроводной связи (позже подробнее об этом), ни доступа в интернет (см. ниже).
Маршрутизация
На этом этапе нужно маршрутизировать пакеты между интерфейсами LAN ( enp2s0 ) и WAN ( enp1s0 ) и включить трансляцию сетевых адресов.
Включить переадресацию пакетов легко:
Последняя команда гарантирует, что конфигурация сохранится до следующей перезагрузки.
Трансляция сетевых адресов — другое дело, обычно придётся разбираться (или, скорее, бороться) с iptables . К счастью, каменный век давно закончился, и ребята из FireHol приложили немало усилий, добавив необходимый уровень абстракции:
FireHOL — это язык для защищённого файрвола с сохранением состояния, его конфигурация легко понятна и доступна. Больше не надо писать операторы iptables : конфигурационный файл сам транслируется в операторы iptables и применяется как надо. Никакого демона в фоновом режиме.
Включение трансляции сетевых адресов для интерфейсов локальной сети с добавлением минимальных правил файрвола делается элементарно:
FireHOL написан людьми для людей, документация здесь.
Можете проверить настройки, вручную запустив firehol ( sudo firehol start ) и подключив ноутбук к порту LAN: теперь вы сможете выйти интернет, если подключен порт WAN.
Перед перезагрузкой не забудьте отредактировать /etc/default/firehol , чтобы разрешить запуск FireHol при загрузке:
Не буду вдаваться в детали всего синтаксиса firehol , конфигурационный файл сам себя объясняет, рекомендую обратиться к документации в случае более сложной настройки. Если вам действительно интересно, что firehol сотворил с iptables , просто введите sudo firehol status в командной строке.
Беспроводная точка доступа
Очевидно, управлять точкой доступа будем с помощью hostapd:
Ниже вы найдёте минимальный и почти не требующий пояснений файл конфигурации 802.11 n/2.4 Ghz/WPA2-AES:
Документацию hostpad.conf см. в /usr/share/doc/hostapd/examples/hostapd.conf .
Описанную конфигурацию можно протестировать вручную:
Если всё идёт хорошо, появится беспроводное подключение. Если вы удовлетворены результатом, не забудьте изменить конфигурацию, чтобы запустить hostapd сразу как поднимется интерфейс (как показано ниже).
Вот ваш окончательный /etc/network/interfaces:
Установка точки доступа 802.11ac (5 ГГц)
Пассивное сканирование
Согласно документации Airetos AEX-QCA9880-NX, чипсет поддерживает 802.11ac, так что мы можем уйти из переполненных каналов 2,4 ГГц в райские 5 ГГц.
Посмотрим, какие частоты поддерживаются:
В приведённом списке видим, что чипсет поддерживает каналы 1−14 (2,4 ГГц) и каналы 36−165 (5 ГГц), но вы заметили флаг no IR ?
Флаг no IR обозначает no-initiating-radiation (то есть пассивное сканирование). Это значит, что данный режим запрещён в случае, когда устройство первым инициирует излучение (включая маяки). Другими словами, нельзя запускать точку доступа на этих каналах!
Нормативные требования
Вышеописанная ситуация объясняется нормативными требованиями Linux, которые регулируют использование радиочастотного спектра в зависимости от страны.
Я живу в США, а по ссылке написано, что я имею право инициировать излучение на каналах 36-48, так в чём дело? Посмотрим, какой домен регулирования используется в данный момент:
Выдача показывает, что сейчас активен мировой домен (или не установлен), то есть минимальные значения, разрешённые в каждой стране.
К сожалению, вручную установить домен sudo iw reg set не получится, потому что домен зашит в EEPROM:
К счастью, нормативные требования обрабатываются на уровне драйвера, так что их можно легко изменить: находим патч в исходниках Open-WRT.
Прежде всего, не забудьте подключить репозиторий исходного кода из /etc/apt/sources.list :
Затем подготовьте окружение, установив необходимые зависимости:
Скачайте источники своего ядра:
Поскольку оригинальный патч Open-WRT нельзя применить «как есть» к дереву ядра Ubuntu из-за тонких различий в системе сборки, пришлось его исправить:
Всё готово для сборки:
Если проблем нет, то теперь можно установить исправленное ядро поверх предыдущего:
Перезагрузка, и вуаля:
Во избежание автоматического обновления может потребоваться закрепить версию ядра Linux.
Конфигурация
Новый файл конфигурации hostapd будет довольно простым: hw_mode=a включает диапазоны 5 ГГц, а ieee80211ac=1 включает 802.11ac (VHT). Опция ieee80211d=1 с указанием country_code=US определяет нормативный домен, под которым мы работаем.
Чтобы максимально использовать пропускную способность, ht_capab и vht_capab должны отражать возможности оборудования:
С учётом этого вот окончательный hostapd.conf :
Документацию hostpad.conf см. в /usr/share/doc/hostapd/examples/hostapd.conf .
На этом этапе беспроводной маршрутизатор полностью работоспособен, и если нужна более сложная настройка, то вы можете теперь погрузиться в конфигурационные файлы.
Настройка виртуального SSID с помощью hostapd
Независимо от того, хотите вы настроить гостевую точку доступа или выделенную беспроводную сеть для своего VPN, в какой-то момент придётся настроить виртуальный SSID.
Диаграмма
Исходя из текущей конфигурации, вот обновлённая диаграмма, что мы хотим получить. Предполагая, что wlp5s0 является физическим беспроводным интерфейсом, виртуальный SSID будет работать на виртуальном интерфейсе wlan0 , используя собственную подсеть 192.168.2.0/24 :
Подготовка
Прежде всего проверим, что ваше беспроводное устройство поддерживает несколько SSID:
Как видим, чипсет поддерживает до восьми точек доступа на одном канале. Это означает, что можно настроить до семи виртуальных SSID, и все они будут работать на одном канале.
Сетевой интерфейс
Согласно документации в hostapd.conf, существует строгая связь между MAC-адресом физического интерфейса и BSSID виртуальных интерфейсов:
hostapd will generate a BSSID mask based on the BSSIDs that are configured. hostapd will verify that dev_addr & MASK == dev_addr. If this is not the case, the MAC address of the radio must be changed before starting hostapd. If a BSSID is configured for every secondary BSS, this limitation is not applied at hostapd and other masks may be used if the driver supports them (e.g., swap the locally administered bit)
BSSIDs are assigned in order to each BSS, unless an explicit BSSID is specified using the ‘bssid’ parameter.
If an explicit BSSID is specified, it must be chosen such that it:
— results in a valid MASK that covers it and the dev_addr
— is not the same as the MAC address of the radio
— is not the same as any other explicitly specified BSSID
Чтобы выполнить эти требования и позволить hostapd автоматически назначать BSSID виртуального интерфейса(ов), обновим MAC-адрес физического беспроводного интерфейса, обнулив четыре наименее значимых бита. Этого хватит на 15 виртуальных BSSID — намного больше, чем необходимо.
Сначала определим текущий MAC-адрес:
Если очистить четыре последних бита и установить бит U/L, получится MAC-адрес 46:c3:06:00:03:e0 .
Теперь обновим конфигурацию, чтобы установить правильный MAC-адрес прямо перед загрузкой интерфейса, а также объявить виртуальный беспроводной интерфейс в соответствии с нашей диаграммой:
Отлично. Я использую dnsmasq как DHCP-сервер — не стесняйтесь заменить на то, что вам нравится. Обратите внимание, что для корректной работы виртуального интерфейса требуется allow-hotplug .
Конфигурация точки доступа
Теперь самое простое: добавим виртуальный SSID к текущей конфигурации hostapd . Просто добавьте это в конец существующего файла hostapd.conf :
В приведённом примере я применил шифрование WPA2, но тут доступно большинство опций радиоинтерфейса (например, channel ). Можно добавить больше виртуальных SSID, просто дописав строчки в конфигурационном файле, согласно объявленным и правильно настроенным виртуальным интерфейсам.
Теперь перезагрузимся — и видим свой новый SSID вместе с новым беспроводным интерфейсом (обратите внимание на MAC-адрес):
Источник
Как я создавал бесшовный Wi-Fi
У нас в конторе не так давно назрела задача сделать бесшовное Wi-Fi-покрытие, долго терпели и перетаптывались, но в итоге его сделали. Поделюсь опытом, как это было. Началось с того, что два года назад мы полностью перешли на IP-АТС и почти извели аналоговые телефоны включая, в итоге и DECT. Однако, переносные трубки нужны и помимо настольных SIP-телефонов купили несколько Wi-Fi телефонов Tecom. Я и сам, как ответственный за техническую часть в компании постоянно хожу по офису с различными Wi-Fi-ными девайсами, ну и манагеры тоже. У многих на руках упомянутые Wi-Fi SIP-телефоны, + у складских пару Wi-Fi терминалов, есть просто Андроиды и Яблоки с установленными SIP-клиентами от АТС. Раньше все решалось несколькими Wi-Fi роутерами, в принципе, тоже было приемлемо (офис небольшой), но ровно пока ты сидишь на месте – пошел, все, кончился разговор, а Skype-соединение еще быстрее слетает. Это стало изрядно раздражать руководство и менеджеров и пошли наезды что вай-фай не вай-фай. Попытки просто увеличить количество роутеров ясное дело задачу не решило.
Стал читать и таки вычитал, что все уже давно придумано до нас. Есть Wi-Fi точки, которые могут делать переход клиента между собой без разрыва или почти без разрыва соединения. Причем оборудования такого достаточно много на рынке, осталось только выбрать по бюджету и адекватности. Оказалось, на эту тему очень много публикаций в зарубежном интернете, у нас поменьше. Огромным минусом этих систем, что все они хотят контроллера, который стоит как чугунный мост и у некоторых особо жадных еще и лицензии требуются на подключение каждой точки. Я принес смету на наш офис на одном таком уважаемом оборудовании, у генерального глаза округлились и ответ был виден на его лице еще до того, как он дочитал эту калькуляцию.
В общем, по мере изучения задачи проснулся уже спортивный интерес – можно ли сделать гладкое WiFi-покрытие (прям как на форумах) в нормальные деньги и так чтобы без этих контроллеров? Оказалось, можно.
Правда выбор варианта занял время, но после загугливания выяснилось, что нужны точки доступа, поддерживающие протоколы 802.11r и 802.11k. Эти протоколы отвечают за быстрое, практически мгновенное переключение абонентов от одной точки к другой. Маркет выдает множество вариантов с поддержкой этих протоколов, но либо мимо цены, либо опять на контроллере. В итоге наткнулся на нужный вариант совершенно случайно. Был летом в гостинице Ибис в Казани на выходных с женой и во всех коридорах на потолке стояли «блины» с надписью EDIMAX. Когда долго и пристально ищешь начинаешь уже обращать внимание на то как сделано «у взрослых». Загуглил что это, нашел, – это оказалось не великая проблема. И о чудо! Этот Эдимакс оказалось может работать и без контроллера. Все что нужно – это назначить одну из точек контроллером.
На сайте производителя была вот такая умная картинка, где они хвалятся как у них все «перетекает» от одной точки к другой.
За нее, честно говоря и зацепился. Тоже два этажа нарисованы как у нас, лестница, прям выстрел в голову.
Поглядели поближе спецификации – вроде подходит, цена не шокирующая.
Сначала купили две: 1 потолочную и одну настенную (честно смущало что раньше я с этой маркой не сталкивался, но благо ОЗПП нам дает 14 дней на возврат).
И, как ни странно, оно заработало.
Теперь по порядку.
Сначала немного теории. Кратко об упомянутых протоколах 802.11r/k (выдержки из инета):
802.11k – уменьшает время поиска точек доступа с наилучшими параметрами сигнала. По этому протоколу клиенту передается информация о соседних точках доступа и состоянии их каналов.
То есть, как я понимаю, даже не начав перемещение, абонентское устройство уже заранее знает, в каком месте роуминг возможен, и какая точка доступа его обслужит лучше. А это собственно, то чего нам и надо.
802.11r – использует технологию Fast Basic Service Set Transition, которая позволяет хранить ключи шифрования всех от точек доступа сети. В результате клиент освобожден от процесса полной аутентификации с сервером – достаточно всего 4-х коротких сообщений для перехода на новую точку доступа. Это свойство позволяет затрачивать на переход не более 50 миллисекунд.
Вообще, протоколы эти оказались весьма распространённые, но далеко не все абонентские/клиентские устройства и даже точки доступа на рынке эти протоколы поддерживают. Хотя, вот, например, яблочные девайсы (как бы кто к ним не относился) оказалось поддерживают эти стандарты чуть ли не с 2011 года. Поэтому построение связи, так скажем, на базе бытовых точек доступа сведет попытку организации бесшовного роуминга на нет – без поддержки 802.11k/r переключение может занять до 3 секунд. О бесшовности при таких лагах в переключении речи не идет! На что я и натыкался в своих экспериментах с роутерами.
Теперь перехожу к непосредственному построению WiFi-сети. Как я говорил, мы изначально взяли 2 точки этого Эдимакса и после удачного теста немного расширили парк в рамках бюджета. Я специально взял несколько разных точек доступа (естественно этого же производителя), работающих как в стандарте 802.11ac, так и только в 802.11n, для работы сети в целом это не принципиально. Принципиально, чтобы они поддерживали протоколы 802.11k/r. Почему взял разные? – у них разная диаграмма направленности и некоторые из них подешевле. Например, в там, где абонентов мало я поставил относительно простые точки доступа, а в переговорной, у руководства, а также других местах с где народу побольше монтировал топовые модели. Ну и опять же Wi-Fi AC, модно, быстро и свободный диапазон 5 ГГц. А складским им все равно и N300 пойдет.
Что касается конкретики, то я выбрал из EDIMAX PRO модели: CAP300, CAP1750, WAP1200 и WAP1750. Причем WAP1750 в данном случае выступает в роли контроллера. Вообще у Эдимакса этого достаточно много сетевого оборудования именного бытового типа, но с ним путать не надо, я сейчас говорю об их бизнес-серии и это действительно не плохое оборудование по моим ощущениям.
Расставил точки доступа в офисе.
Получил вещание согласно плана, который вы его видите на скриншоте Эдимаксовской системы управления точками. Она есть в каждой точке и в принципе любая могла быть контроллером. В этой системе предусмотрена функция e-map. То есть можно втащить в web-интерфейс схему здания или там территории и на ней указать масштаб и места где стоят точки. В итоге, система покажет примерные зоны покрытия. В общем не прорыв, но удобно.
В моем офисе два этажа и для проведения теста я разместил одну точку доступа в переговорной на первом этаже (на плане справа), а три другие точки доступа были расположены на втором вдоль коридора. Подчеркну, уровень сигнала везде должен быть достаточно хорошим – всё же я делаю бесшовный роуминг и тут недопустимо ходить с ноутбуком и выискивать место наилучшего приема. На скриншоте изображена стадия примерно половины работ, смонтировано всего 4 точки, сейчас их уже 7. Все точки РоЕ-шные, поэтому пришлось завести в хозяйстве еще один РоЕ свич. Имеющиеся порты уже были заняты под телефоны. В итоге, покрыт каждый угол и те же Текомовские телефоны работают в сети лучше ДЕКТов.
Вот кстати, фото реальных точек доступа, участвовавших в решении задачи:
Вот это у Эдимаксов самая модная точка. Встроенная MIMO 3×3 антенна, 2 диапазона и все пироги. На картинке она не большая, но в реале она чуть больше собратьев САР300/САР1200 – размером с небольшую блинную сковородку с низкими бортами.
У потолочных точек диаграмма направленности примерно 190 градусов у настенных 360 и антенны внешние, поэтому более мощные и освещают сферически. Но правды ради, хотелось бы чтобы антенны были бы чуть мощнее. Я ставил WAPы в «одиноких» зонах и сложных местах с толстыми перекрытиями. В принципе, кирпичную стену и потолок пробивает, но были бы рога помощнее было бы еще лучше. Возможно в дальнейшем заменю на другие антенны стороннего производства благо разъем у WAP-точек стандартный RP-SMA. Попутно всплыла проблема, что на рынке почти нет комбинированных антенн 2,4+5 ГГц. Почему не понятно. Плюсом WAPов является наличие 2-х РоЕ портов, РоЕ at на вход (точка сама питается) и РоЕ af на выход, можно подключить к ней что-то еще. В условиях моего дефицита РоЕ портов может в дальнейшем очень сгодиться.
Итак, после монтажа точек переходим собственно к настройке роуминга. Обращаемся к планируемой быть контроллером точке WAP1750 и говорим ей что она теперь вожак в стае. Проверяем связь с остальными точками, открываем панель управления Edimax Pro NMS (Network Management Suite) и видим, что все точки доступа находятся в сети.
Все живет, тупая проверка доступа в интернет в разных местах офиса говорит, что вроде все ОК. Связь не рвется, но надо как-то убедиться, что оно так на чем-то более существенном.
Ну и переходим к самому главному – тестируем сеть в нагрузке (Наступает момент истины. Сейчас проверим кто чего врет на самом деле). Для этого проводим натурные испытания – нагружаем WiFi потоковым видео, скачанным из YouTube и транслируем его в сеть. Можно было бы подключиться напрямую к YouTube, но тогда мы зависели бы от внешнего интернет-канала, где теоретически возможные сбои, которые влияли бы на чистоту эксперимента.
Теперь самое главное – беру планшет, подхватываю видео, транслирую его по Wi-Fi-сети и хожу по офису. Перемещаюсь из одной комнаты в другую, иду по коридору, спускаюсь по лестнице на этаж ниже, прохожу там, поднимаюсь наверх и прихожу в исходную точку. Весь процесс занял несколько минут, зарегистрирован внешней экшн-камерой и находится по ссылке.
По следующей ссылке можно увидеть это же видео, но с показом процесса подготовки трансляции.
Источник