Мобильный роутер своими руками

Опыт создания домашнего Wi-Fi маршрутизатора. Общий обзор

Приветствую многоуважаемое Хабрасообщество! Оговорюсь сразу: так исторически сложилось, что оба моих верхних образования связаны с IT чуть менее чем никак, поэтому возня с железками является одним из моих любимых хобби. Как-то так.

Понимаю, что я далеко не первый описываю данную тему, на хабре уже делились опытом построения подобных решений, но, полагаю, есть люди, которые, как и я, далеки в своей повседневной жизни от компов сетей, но интересуются а, возможно, хотят приобщиться и сделать что-то подобное. К тому же проживание в 2000 км от МКАД в «суровом» (sic!) городе накладывает некоторые ограничения на доступность компонентов и прочего. В общем, весь процесс создания далее…

Предыстория

… мы с Вами свяжемся, как только появится возможность подключения.

Поиск

Основной задачей была сборка беспрводного домашнего маршрутизатора с возможностью выполнения функций небольшого опять-таки домашнего сервера и дальнейшего совершенствования оного. Немаловажными аспектами при выборе являлись малошумность и энергоэффективность. Приняв стратегическое решение собирать аппарат на базе mini-ITX решений, я принялся за подбор комплектующих. Оказалось, что найти подходящее железо, уложившись в приемлемый бюджет, не так-то просто. Долгие вечера сёрфинга были вознаграждены, и я остановился на следующих компонентах:

    корпус Morex T-3460 подкупил меня наличием внешнего блока питания (выпускался в 2-х вариантах 60-ваттный и 80-ваттный; мне достался 60W), возможностью установки полноразмерных плат расширения, причём параллельно материнской плате при помощи входящего в комплект Riser-переходника. Был заказан в местной конторе но с доставкой из Питера транспортной компанией, до получения в руки шёл 15 дней

  • материнская плата Intel D2500CC. Была выбрана мной по причине наличия на борту комплектного двухядерного 64-bit процессора Intel Atom D2500, пассивного охлаждения, двух интеловских же гигабитных сетевых интерфейсов и слота mini-PCI-E для подключения Wi-Fi карточки. Заказывал в интернет-магазине с доставкой из Москвы, после оплаты пришла через 14 дней
  • Все остальные железяки, не мудрствуя лукаво, были приобретены в одном из ближайших интернет-дискаунтеров:

    • оперативная память SO-DIMM DDR-3 1066 4Gb Corsair (CMSA4GX3M1A1066C7)
    • SSD-накопитель Crucial M500 120 GB (CT120M500SSD1)
    • сетевая карта 1000 Mbit D-Link DGE-528T. В комплекте идёт низкопрофильная планка

  • mini-PCI-E Wi-Fi карта Intel 7260.HMWWB 802.11 a/b/g/n/ac + Bluetooth 4.0
  • 2 антенны D-Link ANT24-0502
  • Пришлось помучиться с поиском пигтейлов для подключения антенн к Wi-Fi, первоначально приведшим на сайты китайских поставщиков; как водится для формирования приемлемой цены требовалось заказать не менее десятка. На культовой радиобарахолке также ничем мне помочь не смогли. В итоге после долгих уговоров 2 пигтейла UFL/RP-SMA Female 250 мм были привезены под заказ вот этой конторой, за что им моя огромная человеческая благодарность, выраженная также и в рублёвом эквиваленте (#юмор, #нереклама).

    Сборка

    Процесс сборки интересен, но описывать его детально не вижу смысла, ибо вот тут представлен отличный всеобъемлющий обзор корпуса с подробным рассказом о распаковке, характеристиках, разборке/сборке, etc. Кому интересно — прочитает и поймёт, естественно, с поправкой на комплектующие.Остановлюсь лишь на отдельных моментах.

    Материнская плата идёт в bulk-поставке, при распаковке транспортной тары выяснилось, что во время транспортировки разбился (а скорее — был раздавлен о мощный радиатор мамки) комплектный CD с софтом. С самой платой (после проверки) всё чики-пуки.

    В транспортной таре

    Отдельно порадовала и неиллюзорно доставила идущая в комплекте наклеечка Intel Atom inside

    Обзор не врёт: действительно, для того чтобы собрать комплектуху на этом корпусе, для начала его нужно разобрать. Причём разобрать от слова полностью. Корпус на самом деле миниатюрен, и компактно расположить в нём все комплектующие и соединяющие их провода задачка воистину нетривиальная.
    В корпусе имеется штатное место для установки одной антенны (точнее, отверстие для установки одного пигтейла), поскольку меня это не устраивало, и предполагалась установка двух антенн, пришлось «колхозить». Но в итоге труды мои вознаградились и получилось всё очень даже пристойно: в корпусе присутствует заглушка, которая крепится одним винтом и одной защёлкой и фиксирует установленную в «трюме» плату расширения. В ней я просверлил отверстие Ø 6 мм, слегка подправил его надфилями для снятия заусенец, острых кромок и придания плоской формы одной из сторон — формирование ответной части разъёма RP-SMA, после чего пигтейл встал как влитой. Результат на фото ниже.

    Читайте также:  Красивая форма клумбы своими руками

    Та самая заглушка:

    Место установки заглушки:

    Калькуляция

    Уточню, что цены привожу на конец октября — середину ноября, поскольку приобреталось все не спеша и не в один день. Посему, в условиях нестабильности на валютном рынке в настоящий момент следует принимать цены ± некоторое количество рублей. Кроме того, корпус и мать оплачивались по безналу, что также не в лучшую сторону повлияло на стоимость и сроки получения.

    Вывод

    Конечно, получилось несколько дороже топовых SOHO роутеров и чем я ожидал, но! Мощность и гибкость получившейся системы, ИМХО, существенно выше готовых решений. Кроме того, полученное в процессе создания сего агрегата удовольствие не измеряется деньгами, а потраченного времени на любимое хобби не жалко ничуть. Такие дела…

    Источник

    Беспроводной машрутизатор своими руками

    1. Выбор комплектующих
    2. Запуск сетевых интерфейсов
    3. Установка точки доступа 802.11ac (5 ГГц)
    4. Настройка виртуального 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-адрес):

    Источник

    Оцените статью
    Своими руками