Как-то гуляя на авито, я увидел довольно много дешевых (200-1000р) фаерволов, которые 10-15 лет назад брали себе за много денег всякие организации. Сейчас эти девайсы потеряли свою актуальность (скорость работы/поддержка), и сливаются как мусор за копейки на барахолках.
В общем случае такой фаервол представляет из себя:
-ARM/MIPS SoC с linux и u-boot;
-Сколько-то сетевых портов (чаще всего подключены во внутренний управляемый свитч);
-Пару десятков/сотен мегабайт RAM и NAND;
-Иногда бонусами идут USB/WIFI/ADSL;
-Почти всегда есть консольный 8P8C (RJ-45) порт для Cisco совместимого кабеля (туда пишет загрузчик и ОС).
На особо старых девайсах можно увидеть мелкие SPI флешки и несколько десятков мегабайт ОЗУ + вместо u-boot увидеть redboot (или кастомный загрузчик).
По SoC может попасться рандом - как и отличный майнлайн SoC (который есть в OpenWRT таргетах), так и полностью закрытый SoC. По прошивке - чаще всего загрузчик не дает полноценную u-boot консоль + фирмварь подписана ключом вендора, но иногда решаемо - например шитьем своего загрузчика с помощью аппаратного загрузчика SoC (если нет secureboot в SoC).
В инете OpenWRT сборок под такие фаерволы довольно мало (как и вообще какой-либо инфы про них). И я уже было хотел закупить штук 5 рандомных девайсов и попробовать поднять на них OpenWRT, но в последний момент от такой идеи отказался. Причина - на практически всех девайсах дешевле 1500-2000р имеем стомегабитные порты (что в 2026 нафиг не надо). На этом бы все и закончилось, но я увидел Check Point L-50 за 1500р - за такое железо цена подарок. Рассмотрим его подробнее.
Что за девайс
Девайсы серии Check Point L-50 построены на многим знакомой платформе Marvell Kirkwood (она же в Depo A60, только в нём чуть лучше SoC - 88F6282 на 1.6 GHz).
Характеристики:
SoC: Marvell Kirkwood 88F6281 (1.2 GHz, armv5, 1 core);
RAM: 512MB DDR2;
NAND: 512MB (TSOP48);
Сеть: 10x 1Гбит портов (в SoC две сетевых: eth0 - на WAN порт, eth1 - на свитчи с остальными портами, последовательное соединение: eth1 <> sw1(lan1,2,5,6,7) <> sw2(lan3,4,8,dsl,dmz));
USB: 2x 2.0 (в SoC один USB: он в хаб, порты хаба наружу);
Слот SD: SDHC (SDIO);
Слот ExpressCard/34 (USB): можно всунуть древний модем (с USB протоколом);
Питание: 12 В 2.5 А (5.5х2.5).
Другие модели серии:
Check Point L-50W - имеет MiniPCI-e слот + WIFI антенны;
Check Point L-50D - имеет ADSL порт (в OpenWRT ADSL порт не работает);
Check Point L-50WD - имеет одновременно MiniPCI-e слот + WIFI антенны + ADSL порт.
Я же урвал обычный Check Point L-50 - без WIFI и ADSL. Осмотрим:




Для разборки надо открутить всего один винтик, но разборка нам не потребуется, ибо для доступа к консоли загрузчика и ОС юзаем serial порт c подписью CONSOLE (по сути обычный COM порт с RS-232 уровнями в непривычном разъеме). Для работы с ним потребуется Cisco совместимый консольный кабель на 8P8C (RJ-45) - на озоне/вб они начинаются от 300р, но будьте внимательны - дешевые кабеля вместо RS-232 уровней (-5..-15/+5..+15 В) могут иметь TTL уровни (0/5 В или 0/3.3 В) - с TTL нам не подойдет. Помимо USB кабелей с преобразователем бывают и пассивные кабеля на обычный COM (разъема DB9):


Подключив serial (параметры 115200n8) - я увидел залоченный вендорский u-boot 1.1.4 (с менюшкой вместо консоли), linux 2.6.22.18, и прошивку Check Point RD-6281-A. Конечно же этот старый сток нам не потребуется, и мы прошьем OpenWRT.
Шьем OpenWRT
Check Point L-50(W/D/WD) - единственная серия Check Point девайсов с официальной поддержкой OpenWRT (на текущий момент), так что портировать ничего не придется - прошьем официальную OpenWRT. Вот страница девайса в OpenWRT вики, там фотки плат и инструкция по прошивке.
По прошивке вкратце: подписи стоковой прошивки не помеха, ибо прошьем нормальный u-boot от OpenWRT через аппаратный загрузчик SoC (по X-MODEM), и далее загрузимся в initramfs образ OpenWRT (с флешки или по tftp), и из него прошьем sysupgrade образ OpenWRT.
По прошивке подробнее (все делаем по serial):
1) Для начала надо сохранить MAC адреса (ибо прошивка нового u-boot их убьет): для этого в стоковом u-boot выбираем пункт "2. Start in debug Mode", и видим маки в строках вида "mac_addr 00:1c:....." (копируем их куда-нибудь). Ну или просто гляньте мак на наклейке на дне устройства, и остальные маки получайте прибавлением к нему единицы;
2) Качаем необходимые файлы: u-boot и initramfs + sysupgrade образы (на примере 24.10.5 потребуются: u-boot.kwb, openwrt-24.10.5-kirkwood-generic-checkpoint_l-50-initramfs-uImage и openwrt-24.10.5-kirkwood-generic-checkpoint_l-50-squashfs-sysupgrade.bin);
3) Для шитья потребуется linux (можно и livecd, я использовал Debian 13) + потребуется поставить пакет u-boot-tools (от рута apt install u-boot-tools). Выключаем питание, переходим в папку с файлом u-boot.kwb и передаем его в RAM девайса командой (от рута, или добавить себя в группу dialout):
#для USB кабеля имя будет ttyUSBх, где х - 0,1,2...
kwboot -B 115200 /dev/ttyUSB0 -b u-boot.kwb -p -t
#или если нет эффекта, попробуйте так:
kwboot -B 115200 /dev/ttyUSB0 -b u-boot.kwb -a -t
#для COM кабеля имя будет ttySх, где х - 0,1,2...
Если все ок, то увидите:
Detected kwbimage v0 with NAND boot signature
Patching image boot signature to UART
Sending boot message. Please reboot the target…/
Sending boot image header (512 bytes)…
25 % […. ]
Done
Sending boot image data (636260 bytes)…
0 % […………………………………………………………….]
...
...
100 % [. ]
Done
Finishing transfer
[Type Ctrl-\ + c to quit]
U-Boot 2020.04 (Dec 17 2025 - 21:08:22 +0000)
Check Point L-50
SoC: Kirkwood 88F6281_A1
Model: Check Point L-50
DRAM: 512 MiB
NAND: 512 MiB
MMC:
Loading Environment from NAND… *** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net:
Error: ethernet-controller@72000 address not set.
Error: ethernet-controller@76000 address not set.
No ethernet found.
Hit any key to stop autoboot:
Нажимаем любую клавишу чтобы прервать загрузку.
4) Дальше можно юзать флешку или tftp. Юзаем флешку как более простой путь - форматим её в FAT32 (MBR, один раздел), и кидаем в её корень файлы u-boot.kwb и openwrt-24.10.5-kirkwood-generic-checkpoint_l-50-initramfs-uImage;
5) Вставляем флешку в девайс, шьем u-boot.kwb, маки, и ребутаем девайс. Для этого в консоли u-boot пишем (маки подставить свои):
usb start
mw 0x0800000 0xffff 0x100000
fatload usb 0 0x0800000 u-boot.kwb && nand erase 0x0 100000 && nand write 0x0800000 0x0 0x100000
setenv eth1addr 00:1c:7f:76:cc:90
setenv ethaddr 00:1c:7f:76:cc:91
setenv lan1_mac_addr 00:1c:7f:76:cc:92
setenv lan2_mac_addr 00:1c:7f:76:cc:93
setenv lan3_mac_addr 00:1c:7f:76:cc:94
setenv lan4_mac_addr 00:1c:7f:76:cc:95
setenv lan5_mac_addr 00:1c:7f:76:cc:96
setenv lan6_mac_addr 00:1c:7f:76:cc:97
setenv lan7_mac_addr 00:1c:7f:76:cc:98
setenv lan8_mac_addr 00:1c:7f:76:cc:99
setenv dmz_mac_addr 00:1c:7f:76:cc:9a
setenv dsl_mac_addr 00:1c:7f:76:cc:9b
saveenv
reset
6) С NAND стартанет u-boot от OpenWRT и зашитыми маками. Нажимаем любую клавишу чтобы прервать загрузку. И грузим с флешки initramfs образ. Для этого в консоли u-boot пишем:
usb start
fatload usb 0 0x0800000 openwrt-24.10.5-kirkwood-generic-checkpoint_l-50-initramfs-uImage
bootm 0x800000
7) Оказавшись в OpenWRT - шьем sysupgrade образ. Для этого подключаемся в LAN (например в LAN1), получаем на компе DHCP от девайса, и из веб интерфейса (по 192.168.1.1) прошиваем файл openwrt-24.10.5-kirkwood-generic-checkpoint_l-50-squashfs-sysupgrade.bin без галки Keep settings (можно и из консоли через sysupgrade, закинув образ в /tmp через scp -O).
Проверяем результат:

И перед вами причина появления этой статьи - свободно 93 МБ, хотя NAND тут на 512 МБ. Вопрос к портировавшим - какого хрена? 😄
Расширяем корень на всю флешку
Для начала узнаем текущую ситуацию по разметке:
cat /proc/mtd
dev: size erasesize name
mtd0: 000c0000 00020000 "u-boot"
mtd1: 00040000 00020000 "bootldr-env"
mtd2: 07900000 00020000 "ubi"
mtd3: 00800000 00020000 "kernel-2"
mtd4: 07100000 00020000 "rootfs-2"
mtd5: 07900000 00020000 "default_sw"
mtd6: 01800000 00020000 "logs"
mtd7: 00100000 00020000 "preset_cfg"
mtd8: 00100000 00020000 "adsl"
mtd9: 07a00000 00020000 "storage"
df -h
..
/dev/root 3.8M 3.8M 0 100% /rom
...
/dev/ubi0_2 93.9M 40.0K 89.1M 0% /overlay
overlayfs:/overlay 93.9M 40.0K 89.1M 0% /
...
В OpenWRT wiki:


Классно, они решили сделать корень на разделах первого слота прошивки (kernel-1 и rootfs-1), а остальное выкинуть. Вернее "оставить на случай отката на сток". Но такой древний сток уже и даром не нужен, да и ссылка на бекапы стока приводится на этой же странице (и нет проблем восстановить разметку + откатиться на сток при необходимости). Короче, так не пойдет, надо фиксить.
На большинстве роутеров OpenWRT хранит разметку в dts (dtb), и dtb встраивается в ядро в момент сборки, соответственно правка разделов требует пересборки OpenWRT. Есть и более извращенные варианты - границы вендорских разделов не трогаются, но в dts разделы объединяются в единый ubi под rootfs через ubi-concat (привет Smartbox роутерам) - такой способ тоже требует пересборки OpenWRT.
На нашем девайсе разметка тоже в dts, но повезло - в конфиге ядра включен CONFIG_MTD_CMDLINE_PARTS - а значит разметку можно переопределить параметром ядра. Для отжимания всего места в корень нужно оставить только разделы: u-boot + bootldr-env (1 МБ), и ubi (все остальное место).
В ubi разделе на ubi партициях у нас: партиция ядра, партиция sqashfs, overlay rootfs. Соответственно, переразметка не помешает при будущих sysupgrade обновлениях, так как при них затрагивается только раздел ubi.
Идем в u-boot и смотрим текущую картину:
=> printenv
...
bootcmd=ubi part ubi; ubi read 0x800000 kernel; bootm 0x800000
...
mtdparts=mtdparts=orion_nand:0xc0000@0x0(u-boot)ro,0x40000@0xc0000(bootldr-env),0x7900000@0x100000(ubi),0x800000@0x7a00000(kernel-2),0x7100000@0x8200000(rootfs-2),0x7900000@0xf300000(default_sw),0x1800000@0x16c00000(logs),0x100000@0x18400000(preset_cfg),0x100000@0x18500000(adsl),-@0x18600000(storage)
...
Отлично, даже переменная с разметкой разделов есть. Сейчас она используется только для u-boot, но имя nand драйвера что в u-boot что в linux совпадает (orion_nand), поэтому подправим разметку в прямо в этой перменной, и скормим её в параметры ядра.
Выполняем в u-boot:
setenv mtdparts mtdparts=orion_nand:0xc0000@0x0(u-boot)ro,0x40000@0xc0000(bootldr-env),-@0x100000(ubi)
setenv bootargs console=ttyS0,115200 ${mtdparts}
saveenv
Чётко, только теперь мы сломали уже поставленную OpenWRT. Для починки надо форматнуть ubi на весь новый раздел. Самый простой вариант - грузануть initramfs образ с флешки и из него прошить sysupgrade. Вставляем сделанную выше флешку в FAT32 с initramfs образом, и делаем в консоли u-boot:
usb start
fatload usb 0 0x0800000 openwrt-24.10.5-kirkwood-generic-checkpoint_l-50-initramfs-uImage
bootm 0x800000
Стартует initramfs образ из RAM. Видим в логе загрузки, что разделов теперь только три:
....
[ 1.086895] 3 cmdlinepart partitions found on MTD device orion_nand
[ 1.093206] Creating 3 MTD partitions on "orion_nand":
[ 1.098369] 0x000000000000-0x0000000c0000 : "u-boot"
[ 1.292812] 0x0000000c0000-0x000000100000 : "bootldr-env"
[ 1.299750] 0x000000100000-0x000020000000 : "ubi"
....
#проверим опять
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 000c0000 00020000 "u-boot"
mtd1: 00040000 00020000 "bootldr-env"
mtd2: 1ff00000 00020000 "ubi"
Все ок. Идем в веб интерфейс (или в консоль), и снова прошиваем openwrt-24.10.5-kirkwood-generic-checkpoint_l-50-squashfs-sysupgrade.bin (без Keep settings).
Проверяем результат:

Вот теперь другое дело.
И кстати, если вы еще не шили OpenWRT, но собираетесь это делать + хотите сразу получить полный объем флешки - нет смысла шить OpenWRT дважны. Просто шейте по инструкции выше, но после прошивки маков и до сохранения переменных (saveenv) задайте новую разетку в переменную mtdparts и добавьте её в параметры ядра (в bootargs) согласно инструкциям выше. С OpenWRT закончили.
Ставим Debian, играем с dualboot
Debian 12 на этот девайс впихивается идеально - в его репах даже есть ядро версии 6.1 для нашего SoC - пакет linux-image-marvell.
Debian 13 на этот девайс тоже впихивается без проблем, но поддержка armel (нашей архитектуры) подходит к закату - поэтому marvell ядра в репах уже нет. Но не страшно - соберем свое ядро (благо наш SoC имеет шикарную поддержку в майнлайн linux).
Подготовка корневой ФС выполняется как обычно - скачиваем через debootstrap корневую ФС для armel и ставим пакеты нашего собранного ядра с headers (и dtb берем из OpenWRT). Все это вы уже ни раз видели в прошлых статьях (например про Wifire SnowBox Palm 2/A312).
Варианты установки Debian:
-Полностью на NAND (после установки свободна половина - 250 МБ): Для этого завернем ядро, dtb, корневую ФС - в соотвествующие разделы ubi контейнера (c параметрами NAND, вы это тоже видели в прошлых статьях - например, про Depo A60). Далее прошьем ubi контейнер на NAND и подправим u-boot envs. Если потом станет мало места - всегда сможем докинуть SD/USB для /data.
-На SD/USB: С SD/USB наш SoC грузиться не умеет - значит первым будет стартовать u-boot с NAND, а потом уже грузить ядро с SD/USB. Но опять подстава - OpenWRTшники собрали u-boot без поддержки SD - в банере u-boot напротив MMC: видим пустоту + нет команды mmc. А еще u-boot от OpenWRT иногда странно работает с usb. Короче, соберем-ка новый u-boot. Наш SoC в майнлайн u-boot поддерживается, но девайс - нет. Это не страшно, ибо в репах OpenWRT видим патчи для нашего девайса для u-boot 2020.04. После мелкой адаптации натягивает необходимые патчи на сорцы u-boot 2026.01. Также в конфиге u-boot включаем DM драйвер mmc, команду mmс и прочую mmc обвязку, компилим - и вуаля, SD карта в u-boot видна.
Ну а дальше с Debian все просто - завернем корневую ФС с ядром/dtb в образ диска с ext4 партицией, запишем его на SD + подправим u-boot envs. На usb тоже можно (будут немного другие envs).
-Дуалбут с OpenWRT: Звучит сложно, но bootmenu - это штатная плюшка u-boot. Конечно же OpenWRTшники её в своем u-boot тоже не включили, но у нас же уже сорцы нового u-boot - так что включаем bootmenu в конфиге u-boot и пересобираем. Настраиваем u-boot envs для bootmenu, и итог - OpenWRT стоит на NAND, Debian на SD/USB , красивая менюшка появляется при старте девайса.

Из ОС тоже возможно менять u-boot envs, а значит для перезагрузки в другую ОС доступ по serial не нужен.
В самом Debian кстати тоже потребовался мелкий тюнинг:
-Kernel oops выпадал при старте ОС (при ините usb): На работу не влияет, но неприятно. Проблема в старом стиле dts от OpenWRTшников при описании usb - правим, снова компилим dtb, и проблема ушла.
-Было видно только две сетевых из SoC (вместо кучи портов): Модуль свитчей (mv88e6xxx) не стартует сам - решается принудительным стартом модуля при запуске ОС.
-MAC адреса всех портов были одинаковые: В OpenWRT маки сетевухам присваивал скрипт, который запускался при старте, и с помощью fw_printenv читал маки из u-boot envs. Сделаем также - ставим утилиту для работы с u-boot envs (она в пакете u-boot-tools), задаем в /etc/fw_env.config mtd/офсет/размер/блок u-boot envs, набрасываем мелкий скрипт для этой задачки, и пихаем его в автостарт.
-LAN порты не работали, если не поднят eth1. В девайсе eth0 идет напрямую в WAN порт, а eth1 - вставлен в первый свич, первый свитч вставлен во второй свитч. Порты этих свитчей являются lan портами. Просто выставляем eth1 в UP при старте ОС для работы lan портов.
Все эти образы Debian + нового u-boot, с тюнингом, с мануалами по прошивке для каждого кейса - я подготовил, и скачать все это можете по ссылке.
PS: Заметил уже после написания статьи и создания сборок, что с этим девайсом люди уже подобное делали: вот тема с обсуждениями, вот тема с запуском debian 11 с usb, а вот тема с автоматическим дуалбутом (стоит флешка = грузим debian, не стоит = openwrt).
Но я добавил плюшек - запуск с SD карты, бут менюшку, и debian прямо с NAND. Также замутил более свежий u-boot и debian.
