5 min read

Прошивка DNS-325 (OpenWRT/Alt+F)

Ранее я писал как поставить на D-Link DNS-325 Debian и настроить чтоб он работал, отдавал шары и качал торренты. В целом это весьма неплохой вариант для такого старого устройства, тем более что за все время он смог обновиться до 10 версии. Однако есть в этом всем одна проблема, во время всех манипуляций я затер оригинальный u-boot и не сделал бэкап. Как результат родная система не стартовала, даже если руками запускать родные uImage и uKernel. После распаковки ядра ничего не происходило. Так что получилось так что NAS работал только на линуксе с флешки и если с флешкой что то произойдет то устройство просто не запустится и это не очень хорошо. Первая идея была в том чтоб найти дамп оригинального загрузчика и прошить его, тем самым вернуть оригинальную систему от D-Link и это мне не удалось. Немного погуглив я нашел 2 варианта сделать коробку более самостоятельным устройством: OpenWRT и Alt+F.

OpenWRT

На форумах 4pda наткнулся на пост, где человек собрал openwrt для dns325. План достаточно прост: загружаемся в u-boot для openwrt > записываем его в память > загружаем ядро и initramfs > устанавливаем систему уже от туда.
Грузим u-boot и стартуем NAS:

kwboot -p -b u-boot.kwb -B115200 -t /dev/ttyUSB0
U-Boot 2020.04 (Apr 27 2023 - 20:28:15 +0000)
D-Link DNS-325

SoC: Kirkwood 88F6281_A1
DRAM: 256 MiB
NAND: 128 MiB
Loading Environment from NAND... OK
In: serial
Out: serial
Err: serial
Net: egiga0

u-boot 2020 года

Записываем в память

=> mw 0x0800000 0xffff 0x100000
=> nand erase 0x0 100000
=> usb start
=> fatload usb 0 0x0800000 u-boot.kwb
=> nand write 0x0800000 0x0 0x100000
=> reset

Далее закидываем на флешку openwrt-kirkwood-dlink_dns-325-a1-initramfs-uImage и openwrt-kirkwood-dlink_dns-325-a1-squashfs-sysupgrade.bin

=> setenv ethaddr AA:BB:CC:DD:EE:FF
=> saveenv

Задаем если нужно MAС адрес

Загружаемся с флешки

=> usb start
=> fatload usb 0 0x0800000 openwrt-kirkwood-dlink_dns-325-a1-initramfs-uImage
=> bootm 0x800000

если флешка с fat

=> usb start
=> ext2load usb 0:1 0x0800000 openwrt-kirkwood-dlink_dns-325-a1-initramfs-uImage
=> bootm 0x800000

если флешка с ext2

А далее ожидалось что меня будет поджидать web интерфейс openwrt, однако этого не произошло, в консоли меня приветствовал busybox:

BusyBox v1.35.0 (2023-04-27 20:28:15 UTC) built-in shell (ash)

_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 22.03.5, r20134-5f15225c1e
-----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:/#

Если такое произошло то идем в /etc/config/network и настраиваем сеть:

config interface 'lan'
  option ifname 'eth0'
  option force_link '1'
  option proto 'static'
  option netmask '255.255.255.0'
  option ip6assign '60'
  option ipaddr '172.19.0.6'
  option gateway '172.19.0.1'
  option dns '8.8.8.8'

Перезагружаем сеть для применения изменений и устанавливаем luci если её нет:

service network restart
opkg update
opkg install luci-ssl

После чего можно наблюдать интерфейс OpenWRT:

картинка с 4pda, я почему-то скрин не сделал

Так же есть другой путь: через scp скопировать себе образ openwrt-kirkwood-dlink_dns-325-a1-squashfs-sysupgrade.bin и установить через консоль:

sysupgrade -v /tmp/openwrt-kirkwood-dlink_dns-325-a1-squashfs-sysupgrade.bin

обновление через консоль

Я немного посмотрел что умеет OpenWRT и вот что я думаю:
+ можно настраивать режимы работы диодов, либо выключить совсем
+ сразу подцепились мои диски от nas'а WD
+ есть ipkg и можно устанавливать пакеты, например поставить торрент.
- у меня не установился nfs-server, несмотря на то что там уже есть самба мне удобней через nfs.
- устанавливаются не все пакеты т.к. ядро чуть отличается по хэшу от ожидаемого
В целом весьма приятные впечатления.

Alt-F

Alt-F еще одна aftermarket прошивка для NAS от D-Link, в отличии от openwrt её можно установить из оригинального web интерфейса от D-Link. У них есть сайт, а качаются прошивки с sourceforge. Процесс установки аналогичен, но прошивать новый u-boot я не стал т.к. вместе с openwrt мне досталась весьма свежая версия которая умеет все что мне нужно от NAS, а именно: поддержка fat/ext2/ext4 файловых систем. Собственно установка, так же на флешку скидываем ядро, initramfs и грузимся в alt-f, однако в отличии от более популярной прошивки тут web интерфейс доступен сразу, так же устанавливаем прошивку и перезагружаемся:

тема modern

В целом отлично работает, все необходимое есть, так же увидела диски и смонтрировала. По началу были ошибки mtd3. но после очистки настроек и записи повторно все стало ок.
Краткое мнение:
+ доступны все виды шар, как smb так и nfs
+ можно поставить пакеты Alt-f, Entware и ffp
+ можно установиться debian, я не пробовал но говорят какой-то старый
- старый софт, хоть возможность установить сторонние пакеты и есть, но базовый софт прошивки достаточно старый и имеющиеся e2fsprogs не понимают некоторые фичи фс созданной на nas'е от WD.

Так же есть более свежий форк alt-f-next, там уже нет проблемы с e2fsprogs, но не обнаружается флешка, а так как на флешке установлена тема, то без нее пользоваться прошивкой весьма неудобно :(
На всякий случай архивы с OpenWRT, Alt-F и моим образом debian.

u-boot

Наличие своей прошивки в NAS, это круто но отказываться от возможности запускать linux с флешки я не хочу. Решается очень просто, надо настроить u-boot таким образом чтоб он при наличии флешки пытался запустить ядро оттуда, а в случае неудачи грузить alt-f из nand.

setenv uImageAddr 0xa00000
setenv uInitramfsAddr 0xf00000
setenv usb_load_uImage 'ext2load usb 0:1 0x1000000 boot/zImage'
setenv usb_load_uInitramfs 'ext2load usb 0:1 0x1800000 boot/initramfs.uImage'
setenv usb_load_dtree 'ext2load usb 0:1 0x2000000 boot/kirkwood-dns325.dtb'
setenv usb_boot_system 'bootz 0x1000000 0x1800000 0x2000000'
setenv boot_from_usb 'echo TRY OVERRIDE FROM USB; usb reset; run usb_load_uImage; run usb_load_uInitramfs; run usb_load_dtree ; run usb_boot_system'
setenv boot_from_nand 'echo LOADING FROM NAND; nand read.e 0xa00000 0x100000 0x300000;nand read.e 0xf00000 0x600000 0x300000; bootm 0xa00000 0xf00000'
setenv bootcmd 'run boot_from_usb; run boot_from_nand'

флешка должна быть форматирована в ext2

Таким образом если в момент старта в nas'е будет флешка с linux то загрузка будет оттуда, в противном случае загрузка пойдет из nand.

Немного полезных ссылок по теме:
- что делать если на openwrt нет web интерфейса - https://4pda.to/forum/index.php?showtopic=726319&view=findpost&p=130953089
- различные моды(uboot, initramfs, kernel, etc) для dns-325 - https://github.com/davidedg/NAS-DNS325-mod
- сайт с различной инфой по dns-325 - https://jamie.lentin.co.uk/devices/dlink-dns325/
- топик с аналогичной моей проблемой - https://forum.doozan.com/read.php?3,29039
- сборка openwrt - https://openwrt.org/user/ja/my-openwrt-firmware-image-build-guide
- установка openwrt на dns-320 - https://habr.com/ru/articles/244921/