Как собрать свой собственный x86 Wi-Fi роутер
Как и обещал в прошлой статье расскажу, как собрал и настроил свой собственный x86 Wi-Fi роутер с OpenWrt.
x86 Wi-Fi роутер
За основу был взят мини-ПК Beelink U59 Pro, если собирать сейчас можно рассмотреть похожий мини-ПК Beelink EQ12 с портами 2.5 Гбит/сек.
Компоненты Beelink U59 Pro:
Intel Jasper Lake N5105, 4 ядра с частотой до 2,90 ГГц
DDR4 2666 МГц 8 ГБ
M.2 SATA 512 ГБ
Gigabit Ethernet два порта
HDMI два порта
USB 3.1 два порта
USB 3.0 Type-C
M.2 Wi-Fi
Такая система на долгие годы будет справляться с нагрузкой роутера и не только.
А так же на x86 привычнее устанавливать операционную систему, чем на ARM или RISC-V.
Порты мини-ПК
Выбор Wi-Fi M.2 адаптера и дополнительных антенн
По умолчанию стоит Intel AC3165, но в 2022 году хотелось иметь уже Wi-Fi 6E. Сначала я заказал Intel AX210, но, когда он пришел, оказалось он не умеет раздавать Wi-Fi 5 ГГц, да и в целом не такое большое количество устройств имеет режим раздачи. Изучив все Wi-Fi M.2 адаптеры на сайте пришел к выводу что оптимальным по цене, доступности и возможностям является Mediatek MT7921K. Он поддерживает протокол Wi-Fi 6E. По умолчанию стоят очень слабые антенны, которые не подходят для Wi-Fi роутера, и были куплены антенны на 10 дБ.
Антенны
Фотографии Mediatek MT7921K

Mediatek MT7921K передняя сторона

Mediatek MT7921K задняя сторона
Установка антенн и замена Wi-Fi M.2 адаптера
Разобрать мини-ПК не сложно:
Открутить снизу четыре винта
Открутить винт крепления M.2 SSD
Открутить винт крепления M.2 Wi-Fi
Открутить четыре винта крепления материнской платы
Нутро мини-ПК
Фотографии разборки мини-ПК

Расположение винтов корпуса

Расположение винта M.2 SSD

Расположение винта M.2 Wi-Fi

Расположение винтов материнской платы
Аккуратное достаем материнскую плату со стороны Ethernet-портов.
Фотографии материнской платы

Верхняя сторона материнской платы

Нижняя сторона материнской платы
Сверлим отверстия для крепления антенн.
Фотографии отверстия под антенны

Вид на отверстия из корпуса

Вид на отверстия снаружи корпуса
Пропустить оба кабеля антенн можно через левую часть материнской платы.
Фотографии пути кабелей антенн

Места пропускания кабелей антенн

Крепления антенн к модулю
Собираем всё в обратном порядке и для спокойствия изолируем изолентой винты и разъемы антенн, как на фотографиях процесса разборки.
Настройки UEFI
Так как в будущем роутер будет стоять без монитора, то все настройки UEFI надо сделать вначале.
Страница UEFI
Выставить приоритеты загрузки, чтобы в будущем при вставлении USB-флешки
, роутер загружался бы с неё.
Фотография меню загрузки

Меню загрузки
А так же необходимо поменять поведение при отключении электропитания на S0
, чтобы роутер сам включался при возвращении электропитания.
Фотографии меню чипсета

Меню чипсета

Меню PCI
Установка OpenWrt на USB-флешку
Берем образ для x86–64 generic-ext4-combined-efi.img.gz. Распаковываем GZ архив. Для установки на USB-флешку я пользуюсь balenaEtcher.
Установка образа OpenWrt
Завершение установки
Установка OpenWrt на роутер
Вставляем USB-флеш в роутер, а так же подключаем WAN и LAN кабель, WAN кабель левый, LAN кабель правый, если смотреть на порты. Подключаем питание и роутер сам загрузится с USB-флеш.
Теперь мы можем подключиться по SSH. Пароль не требуется.
ssh root@192.168.1.1
Запускаем обновление списка пакетов и скачиваем parted:
opkg update
opkg install parted
Смотрим название SSD диска:
parted -l
Вывод parted -l
Запускаем модификацию диска /dev/sda
:
parted /dev/sda
Создаем новую GPT таблицу:
mklabel gpt
Создаем раздел для загрузки и раздел для rootfs:
mkpart EFI fat32 1MiB 261MiB
set 1 esp on
mkpart DATA ext4 261MiB 100%
Сохраняем изменения, написав команду q
. Убедимся, что всё сделали правильно, вызвав parted -l
:
Вывод parted -l
Установим dosfstools
для форматирования под FAT32
:
opkg install dosfstools
Необходимо отформатировать первый раздел в файловую систему FAT32
, а второй раздел в EXT4
:
mkfs.fat -F 32 /dev/sda1
mkfs.ext4 /dev/sda2
Ещё раз убедимся, что всё правильно отформатировалось:
Вывод parted -l
Теперь необходимо смонтировать разделы /dev/sda1
, /dev/sda2
, /dev/sdb1
, /dev/sdb2
:
mkdir /mnt_efi_old
mkdir /mnt_efi_new
mkdir /mnt_ext4_old
mkdir /mnt_ext4_new
mount /dev/sdb1 /mnt_efi_old
mount /dev/sda1 /mnt_efi_new
mount /dev/sdb2 /mnt_ext4_old
mount /dev/sda2 /mnt_ext4_new
А теперь скопировать содержимое папки /mnt_efi_old
в папку /mnt_efi_new
:
cp -a /mnt_efi_old/. /mnt_efi_new
Установим blkid
для вывода PARTUUID
:
opkg install blkid
Вывод blkid
Для правильной загрузки необходимо поменять номер раздела в настройках загрузчика GRUB
:
vim /mnt_efi_new/boot/grub/grub.cfg
Впишем в файл /mnt_efi_new/boot/grub/grub.cfg
PARTUUID
раздела /dev/sda2
, а так же поменяем время ожидания загрузки timeout
на единицу :
Файл /mnt_efi_new/boot/grub/grub.cfg
А теперь скопировать содержимое папки /mnt_ext4_old
в папку /mnt_ext4_new
:
cp -a /mnt_ext4_old/. /mnt_ext4_new
Выключаем роутер и вытаскиваем USB-флешку.
Настройка OpenWrt
Остается установить драйвера и настроить Wi-Fi.
Через WebGUI по адресу http://192.168.1.1/ устанавливаем:
luci-theme-material
hostapd-openssl
wpa-supplicant-openssl
kmod-mt7921e
Экспериментальным путем было выявлено, что драйвер Wi-Fi просыпается позже чем нужно, и для корректной загрузки системы необходимо в файле /etc/init.d/boot
убрать оператор if
после /sbin/kmodloader
:
Правка /etc/init.d/boot
Перезагружаем роутер и переходим в раздел настройки Wi-Fi:
Меню Wi-Fi
Нажимаем на кнопку ENABLE
, а потом EDIT
Расширенные настройки
В меню расширенные настройки выбираем код страны US, для большего количества доступных диапазонов частот и мощностей излучения. Сохраняем и применяем настройки.
Настройки Wi-Fi
Теперь выбираем AX (Wi-Fi 6) режим работы, нужный вам канал, и ширину полосы, так же мощность излучения. Чуть ниже можно выбрать настройки безопасности сети.
Настройки безопасности Wi-Fi
Вывод
Мы смогли настроить x86 Wi-Fi роутер, и поднять на нем Wi-Fi 6 сеть. Так как на нем стоит OpenWrt, то мы можем использовать его как полноценный Linux. Настроить VPN, NAS, Web Server и т.д.