RouterBoard RB750 + OpenWRT

Для сборки Open-Wrt и прошивки в Mikrotik RouterBoard 750 потребуется:

  • Linux box;
  • прямой кабель ethernet (патчкорд).
Примечание: у меня Mikrotik отказывался загружаться через кросоверный (перекрещенный) кабель соединяющий его с интерфейсом компьютера Mikrotik<->Компьютер.

Установить необходимые пакеты для сборки образа Open-WRT (список возможно не полный и вам потребуется что-то ещё)
Команда выполняется с привилегиями root

# yum install gcc gcc-c++ ncurses-devel zlib-devel flex git -y


Установить и настроить dhсpd и tftpd
Здесь возможны варианты. Поставить отдельно dhcp tftp серверы, либо установить dnsmasq который содержит в себе как dns так и dhcp tftp серверы. На вкладках приведены обе конфигурации.

dhсpd + tftpddnsmasq
Установка с автоподтверждением

# yum install dhcp tftp-server -y

включить tftp в xinetd

# chkconfig tftp on

в файле /etc/xinetd.d/tftp посмотреть куда указывает каталог

# cat /etc/xinetd.d/tftp | grep server_args
 server_args = -s /var/lib/tftpboot

Создать каталог для файлов tftp если он не создан и поставить права (хотя мой tftp сервер выполняется от root и права ему не особо нужны)

# touch /var/lib/tftpboot
# chmod 664 /var/lib/tftpboot

Настройка dhcp сервера (полный конфиг):
MAC адрес WAN интерфейса RB750 можно узнать на коробке или по наклейке на нижней части роутера.

allow booting;
allow bootp;

subnet 192.168.89.0 netmask 255.255.255.0 {
    range 192.168.89.50 192.168.89.150;
    option routers 192.168.89.1;
}

host mikrotik-rb750 {
    hardware ethernet d4:ca:6d:8f:03:e3;
    fixed-address 192.168.89.10;
    option routers 192.168.89.1;
    next-server 192.168.89.1;
    filename "openwrt-ar71xx-nand-vmlinux-initramfs.elf";
}

Если на машине с DHCP сервером активен более чем один интерфейс неплохо бы указать какие именно интерфейсы он должен слушать. В файле /etc/sysconfig/dhcpd указать в качестве параметра интерфейс (у меня eth1)

DHCPDARGS="eth1"

Сконфигурировать интерфейс в который вставлен wan порт роутера если он не был сконфигугирован. Например так:

# ip addr add 192.168.89.1/24 dev eth1
# ip link set eth1 up

И перезапустить xinetd и dhcpd

# /etc/init.d/xinetd restart
# /etc/init.d/dhcpd restart

Включить их на постоянно.

# chkconfig xinetd on
# chkconfig dhcpd on
Установка с автоподтверждением

# yum install dnsmasq -y

файл конфигурации /etc/dnsmasq.conf

bootp-dynamic
interface=eth1
dhcp-range=192.168.89.50,192.168.89.150,255.255.255.0,12h
dhcp-option=option:router,192.168.89.1
dhcp-boot=openwrt-ar71xx-mikrotik-vmlinux-initramfs-lzma.elf
dhcp-lease-max=150
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
log-dhcp

enable-tftp
tftp-root=/var/lib/tftpboot

Обратите внимание на опцию bootp-dynamic. На современных дистрибутивах dnsmasq без этой опции вы скорее не сможете загрузить Mikrotik по сети, так как запрос

0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 4c:5e:0c:ee:b2:f6, length 300, xid 0xdaae35f7, Flags [none] (0x0000)

скорее всего останется без ответа.
Запуск dnsmasq

# service dnsmasq start

Проверка того что на необходимых адресах udp 67 и 69 порты слушает dnsmasq.

# netstat -nlp | grep dnsmasq
[root@fileserver etc]# netstat -nlp | grep dnsmasq
tcp   0  0 0.0.0.0:53   0.0.0.0:*                   LISTEN      2202/dnsmasq        
tcp   0  0 :::53        :::*                        LISTEN      2202/dnsmasq        
udp   0  0 0.0.0.0:53   0.0.0.0:*                               2202/dnsmasq        
udp   0  0 0.0.0.0:67   0.0.0.0:*                               2202/dnsmasq        
udp   0  0 0.0.0.0:69   0.0.0.0:*                               2202/dnsmasq        
udp   0  0 :::53        :::*                                    2202/dnsmasq        

Включить dnsmasq чтобы запускался автоматически при каждом старте системы

# chkconfig dnsmasq on

Если запуск dhcp+tftp не входит в ваши постоянные планы, то можно обойтись запуском из командной строки. Этот вариант удобен и для отладки.

dnsmasq -i eth1 --dhcp-range=192.168.89.100,192.168.89.200 --dhcp-boot=openwrt-ar71xx-mikrotik-vmlinux-initramfs-lzma.elf --enable-tftp --tftp-root=/var/lib/tftpboot/ -d -p0 -K --log-dhcp --bootp-dynamic
Обратите внимание что я выбрал сеть 192.168.89.0/24. Можно ставить любую сеть за исключением 192.168.1.0/24 потому что это сеть будет внутреняя сеть у роутера после установки OpenWRT. А нам туда ещё предстоит входить.

Теперь необходимо убедиться что разрешены запросы по DHCP и TFTP портам.
Вот как выглядит упрощённый /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:TFTP - [0:0]
:DHCP - [0:0]
:SSH - [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j SSH
-A INPUT -m state --state NEW -m udp -p udp --dport 67 -j DHCP
-A INPUT -m state --state NEW -m udp -p udp --dport 69 -j TFTP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A SSH -j ACCEPT
-A SSH -j REJECT --reject-with icmp-host-prohibited

-A TFTP -i eth1 -j ACCEPT
-A TFTP -j REJECT --reject-with icmp-host-prohibited

-A DHCP -i eth1 -j ACCEPT
-A DHCP -j REJECT --reject-with icmp-host-prohibited

COMMIT

Перед дальнейшей работой смените пользователя на пользователя без привелений root. У меня это пользователь openwrt.

# su openwrt
$ 

Для компиляции мне потребовалось 3.8 GB дискового пространства. Немало.
Перейдите в рабочй домашний каталог и туда вытяните свежее дерево.

# svn co svn://svn.openwrt.org/openwrt/trunk/
A    trunk/rules.mk
A    trunk/toolchain
A    trunk/toolchain/glibc
A    trunk/toolchain/glibc/patches
.....
A    trunk/README
A    trunk/feeds.conf.default
 U   trunk
Checked out revision 37652.

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

# cd trunk

Подготовим образ

$ make menuconfig

Выберите следующие опции:

Target System: <strong>(Atheros AR7xxx/AR9xxx)</strong>
Subtarget: <strong>(Devices with NAND flash (mostly Mikrotik))</strong>
Target Images: <strong>tar.gz</strong>
Global build settings: <strong>[ ] Enable IPv6 support in packages</strong>
Kernel modules: Network Support: <strong><*> kmod-tun.. Universal TUN/TAP driver</strong>
Kernel modules: LED modules: <strong><*> kmod-leds-rb750.. RouterBOARD 750 LED support</strong>
<strong>exit&save</strong>

Находясь в каталоге trunk компилируем проект. Лучше будет запустить make в screen так как процесс это длительный.

как выглядит процесс компиляции
$ make
Collecting package info: doneing...il-linux-ngxevss
Collecting target info: doneing...ux/iop32xxx
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... ok.
Checking 'zlib'... ok.
Checking 'gawk'... ok.
Checking 'flex'... ok.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'patch'... ok.
Checking 'perl'... ok.
Checking 'python'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.
....
тут много, долго, а главное бессмысленно перечислять
....
 make[3] -C package/base-files install
 make[2] package/rootfs-prepare
 make[3] package/preconfig
 make[2] target/install
 make[3] -C target/linux install
 make[2] package/index
Нужно обязательно сразу проверить размер полученных файлов. Потому что для ядра доступно всего лишь 3 Мегабайта. Я как-то использовал настройки ядра по умолчанию и получил ядро 3142452 байт. Ясно что такое не влезет. Поэтому перед компиляцией внимательно смотрим что подключено и проверяем получившийся размер.

$ ls -l
-rw-r--r--.  1 root    root    2043984 Aug  1 15:11 openwrt-ar71xx-nand-rootfs.tar.gz
-rwxr-xr-x.  1 root    root    2920732 Aug  1 15:11 openwrt-ar71xx-nand-vmlinux.elf

Скопировать полученный образ в каталог tftpd сервера (от имени root пользователя). Надеюсь вы помните что находитесь в каталоге trunk.

# cp bin/ar71xx/openwrt-ar71xx-nand-vmlinux-initramfs.elf /var/lib/tftpboot/

Считаем что перед следующим шагом роутер обесточен (отключён от питания).

  • Подсоединить роутер (Mikrotik RB750) первым (1) портом прямо к компьютеру куда мы только что скопировали образ и с которого по DHCP будем грузить RB750.
  • После подключения нажмите и удерживайте кнопку RESET на RB750 и подсоедините питание.
  • Оба светодиода PWR и ACT будут постоянно включены но вы продолжайте удерживать кнопку.
  • Через несколько секунд (около 7 сек) светодиод ACT начнёт моргать, вы по прежнему продолжаете удерживать кнопку.
  • Ещё через несколько секунд (около 18 сек) светодиод ACT погаснет после чего сразу нужно отпустить кнопку RESET.

После этого роутер будет пытаться получить IP адрес через DHCP/BOOTP протоколы и загрузить образ системы c TFTP сервера.

Чтобы знать как дела используйте tcpdump на сетевом интерфейсе компьютера откуда грузится образ и по DHCP раздаются IP адреса. У меня это eth1.

# tcpdump -i eth1 
как выглядит вывод tcpdump при загрузке и запуске образа OpenWRT
# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
01:16:00.834857 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from d4:ca:6d:8f:03:e3 (oui Unknown), length 300
01:16:00.851352 IP 192.168.89.1.bootps > 192.168.89.10.bootpc: BOOTP/DHCP, Reply, length 300
01:16:00.851644 ARP, Request who-has 192.168.89.1 (Broadcast) tell 192.168.89.10, length 50
01:16:00.851653 ARP, Reply 192.168.89.1 is-at 00:1e:8c:53:c4:12 (oui Unknown), length 28
01:16:00.851848 IP 192.168.89.10.24628 > 192.168.89.1.tftp:  81 RRQ "/var/lib/tftpboot/openwrt-ar71xx-nand-vmlinux-initramfs.elf" octet blksize 1452
01:16:00.851939 IP 192.168.89.1.39135 > 192.168.89.10.24628: UDP, length 15
01:16:00.852094 IP 192.168.89.10.24628 > 192.168.89.1.39135: UDP, length 4
01:16:00.852129 IP 192.168.89.1.39135 > 192.168.89.10.24628: UDP, length 1456
01:16:00.852686 IP 192.168.89.10.24628 > 192.168.89.1.39135: UDP, length 4
01:16:00.852714 IP 192.168.89.1.39135 > 192.168.89.10.24628: UDP, length 1456
......
01:16:03.025903 IP 192.168.89.10.24628 > 192.168.89.1.39135: UDP, length 4
01:16:05.851686 ARP, Request who-has 192.168.89.10 tell 192.168.89.1, length 28
01:16:06.851632 ARP, Request who-has 192.168.89.10 tell 192.168.89.1, length 28
01:16:07.851651 ARP, Request who-has 192.168.89.10 tell 192.168.89.1, length 28
01:16:25.470731 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2, 3 group record(s), length 68
01:16:25.740688 IP6 :: > ff02::1:ff8f:3e3: ICMP6, neighbor solicitation, who has fe80::d6ca:6dff:fe8f:3e3, length 24
01:16:26.170939 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from d4:ca:6d:8f:03:e3 (oui Unknown), length 351
01:16:26.171285 IP 192.168.89.1.bootps > 192.168.89.10.bootpc: BOOTP/DHCP, Reply, length 300
01:16:26.172180 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from d4:ca:6d:8f:03:e3 (oui Unknown), length 363
01:16:26.198533 IP 192.168.89.1.bootps > 192.168.89.10.bootpc: BOOTP/DHCP, Reply, length 300
01:16:26.760791 IP6 fe80::d6ca:6dff:fe8f:3e3 > ff02::16: HBH ICMP6, multicast listener report v2, 4 group record(s), length 88
01:16:26.795924 IP6 fe80::d6ca:6dff:fe8f:3e3 > ff02::2: ICMP6, router solicitation, length 8
01:16:26.798426 IP6 fe80::d6ca:6dff:fe8f:3e3.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
01:16:27.530733 IP6 fe80::d6ca:6dff:fe8f:3e3 > ff02::16: HBH ICMP6, multicast listener report v2, 1 group record(s), length 28
01:16:27.840927 IP6 fe80::d6ca:6dff:fe8f:3e3.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
01:16:29.920831 IP6 fe80::d6ca:6dff:fe8f:3e3.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
01:16:30.796453 IP6 fe80::d6ca:6dff:fe8f:3e3 > ff02::2: ICMP6, router solicitation, length 8
01:16:31.197633 ARP, Request who-has 192.168.89.10 tell 192.168.89.1, length 28
01:16:31.197882 ARP, Reply 192.168.89.10 is-at d4:ca:6d:8f:03:e3 (oui Unknown), length 46
01:16:33.900854 IP6 fe80::d6ca:6dff:fe8f:3e3.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
01:16:34.137556 IP 192.168.89.10.63490 > 192.168.89.1.domain: 21913+ AAAA? 3.openwrt.pool.ntp.org. (40)
01:16:34.137603 IP 192.168.89.1 > 192.168.89.10: ICMP host 192.168.89.1 unreachable - admin prohibited, length 76
01:16:34.796781 IP6 fe80::d6ca:6dff:fe8f:3e3 > ff02::2: ICMP6, router solicitation, length 8
01:16:38.797095 IP6 fe80::d6ca:6dff:fe8f:3e3 > ff02::2: ICMP6, router solicitation, length 8
01:16:39.140460 ARP, Request who-has 192.168.89.1 tell 192.168.89.10, length 46
01:16:39.140465 ARP, Reply 192.168.89.1 is-at 00:1e:8c:53:c4:12 (oui Unknown), length 28
01:16:39.141414 IP 192.168.89.10.31398 > 192.168.89.1.domain: 52841+ AAAA? 3.openwrt.pool.ntp.org. (40)
01:16:39.141430 IP 192.168.89.1 > 192.168.89.10: ICMP host 192.168.89.1 unreachable - admin prohibited, length 76
01:16:41.550671 IP6 fe80::d6ca:6dff:fe8f:3e3.dhcpv6-client > ff02::1:2.dhcpv6-server: dhcp6 solicit
^C
6779 packets captured
6855 packets received by filter
76 packets dropped by kernel

Видно и имя файла и то что загруженное ядро начало работать.

или посмотрите соответствующие файлы журналов системы на которой работает TFTP и DHCP

# tail -n 200 /var/log/messages
Примечание Если вы настроили TFTP и DCHP но у вас почему-то не работает проверьте две вещи: firewall и права к файлам и каталогу где расположены образ для загрузки RB750. Не забывайте про SELinux !. Если что-то идёт не так я обычно первым делом отключаю SELinux. Отключается он и проверяется так:

# setenforce 0
# getenforce
Permissive

Проверить работу tftp можно при помощи tftp клиента:

# yum install tftp
# cd /root/
# tftp 192.168.89.1
get openwrt-ar71xx-nand-vmlinux-initramfs.elf
quit
# ls -l openwrt-ar71xx-nand-vmlinux-initramfs.elf
-rw-r--r--. 1 root root 4950500 Aug  1 00:56 openwrt-ar71xx-nand-vmlinux-initramfs.elf

Если на машине с которой будет проверяться работа tftp клиента, включён iptables, то обязательно нужно загрузить модуль nf_conntrack_tftp иначе сервер не сможет установить соединение в сторону клиента и оба отвалятся по таймауту. Вот как выглядит это у меня:

# lsmod | grep nf_conntrack_tftp
nf_conntrack_tftp      12910  0 
nf_conntrack           82780  8 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,xt_connmark,nf_conntrack_ftp,nf_conntrack_ipv4,nf_conntrack_tftp

Временно руками модуль грузится так:

# modprobe ip_conntrack_tftp

Если модуль нужен на постоянной основе, то в /etc/sysconfig/iptables-config нужно добавить опцию:

IPTABLES_MODULES="ip_conntrack_tftp"

Если у вас имеется там какая-то другая опция то добавьте ip_conntrack_tftp через пробел и перегрузите iptables и проверьте что после рестарта модуль подгрузился.

IPTABLES_MODULES="ip_conntrack_ftp ip_conntrack_tftp"

Когда всё в порядке то роутер загрузится в течении одной двух минут. После этого перевставьте кабель из порта 1 RB750 в его порт 2-4. Тоесть из WAN в LAN. Так как машина на которой у меня стоит DHCP и TFTP имеет четыре сетевые платы то я использовал одновременно два кабеля которые вставил в роутер в 1 и 2 порты. Загруженный по сети OpenWrt по началу пускает только изнутри из LAN, а это порты 2-4.
Заходим на RB750. Помните я не рекомендовал использовать сеть 192.168.1.0/24 ?
А вот ответ почему:

$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------


BusyBox v1.19.4 (2012-06-20 22:03:36 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 ATTITUDE ADJUSTMENT (Bleeding Edge, r32466)
 -----------------------------------------------------
  * 1/4 oz Vodka      Pour all ingredients into mixing
  * 1/4 oz Gin        tin with ice, strain into glass.
  * 1/4 oz Amaretto
  * 1/4 oz Triple sec
  * 1/4 oz Peach schnapps
  * 1/4 oz Sour mix
  * 1 splash Cranberry juice
 -----------------------------------------------------
root@OpenWrt:/# 

Вот наш баннер OpenWRT. На этом этапе мы добились что по сети можем загружать нужную прошивку и экспериментировать с ней. Старая прошивка тем временем остаётся неизменной и находится в двух блоках вот здесь:

root@OpenWrt:/# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00020000 "booter"
mtd1: 003c0000 00020000 "kernel"
mtd2: 07c00000 00020000 "rootfs"

Теперь нам нужно будет установить свою прошивку на постоянно. Надеюсь что при конфигурировании ядра вы не выбросили из него утилиты mtd для работы с флешками. С её помощью освобождаем блоки для ядра и корневой файловой системы.

root@OpenWrt:/# mtd erase kernel
Unlocking kernel ...
Erasing kernel ...
root@OpenWrt:/# mtd erase rootfs
Unlocking rootfs ...
Erasing rootfs ...
root@OpenWrt:/# 

Создаём два временных каталога. Они исчезнут при перезагрузке так как находятся в tmpfs (в памяти)

root@OpenWrt:/# mkdir /mnt/kernel /mnt/rootfs

и монтируем ядро из блока mtd1

root@OpenWrt:/# mount -t yaffs2 /dev/mtdblock1 /mnt/kernel

и монтируем корневую файловую систему из блока mtd2

root@OpenWrt:/# mount -t yaffs2 /dev/mtdblock2 /mnt/rootfs

Нам нужно воспользоваться scp для копирования файлов на роутер поэтому нужно установить пароль. Это отключает telnet и включает ssh.

root@OpenWrt:/# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root

На компьютере где строили прошивки переходим в каталог trunk/bin/ar71xx. Здесь находятся все построенные файлы. Нам понядобятся два из них.
openwrt-ar71xx-nand-rootfs.tar.gz
openwrt-ar71xx-nand-vmlinux.elf
Их нужно скопировать во временный каталог RB750

# scp openwrt-ar71xx-nand-rootfs.tar.gz openwrt-ar71xx-nand-vmlinux.elf root@192.168.1.1:/tmp
root@192.168.1.1's password:
openwrt-ar71xx-nand-rootfs.tar.gz         100% 1827KB   1.8MB/s   00:01
openwrt-ar71xx-nand-vmlinux.elf           100% 2719KB   1.3MB/s   00:02

После мы компиляции позаботились о том чтобы kernel влез в вот эти 3 свободных мега. Очень мне интересно куда исчезло 768.0К а это почти 20%. Слабо верится что yaffs2 имеет такие накладные расходы.

root@OpenWrt:/tmp# df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                    14.2M      4.8M      9.4M  34% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock1            3.8M    768.0K      3.0M  20% /mnt/kernel
/dev/mtdblock2          124.0M      1.1M    122.9M   1% /mnt/rootfs

Переносим из временного каталога kernel.

root@OpenWrt:~# mv /tmp/openwrt-ar71xx-nand-vmlinux.elf /mnt/kernel/kernel
root@OpenWrt:~# chmod +x /mnt/kernel/kernel
root@OpenWrt:~# umount /mnt/kernel

И переносим rootfs и сразу распаковываем

root@OpenWrt:~# cd /mnt/rootfs
root@OpenWrt:/mnt/rootfs# tar -xvzf /tmp/openwrt-ar71xx-nand-rootfs.tar.gz
./
./proc/
./sys/
./mnt/
./init
./bin/
./bin/egrep
./bin/touch
./bin/gunzip
./bin/true
./bin/chgrp
./bin/ubus
./bin/sync
./bin/cp
...
Распаковался архив...
...
./lib/modules/3.3.8/xt_limit.ko
./lib/modules/3.3.8/xt_multiport.ko
./lib/modules/3.3.8/crypto_algapi.ko
./lib/modules/3.3.8/crc-ccitt.ko
./lib/modules/3.3.8/nf_nat_irc.ko
./lib/modules/3.3.8/pppox.ko
./lib/lua/
./lib/lua/ubus.so

Теперь отмонтируем rootfs и kernel и перезагрузим роутер.

root@OpenWrt:/mnt/rootfs# cd /
root@OpenWrt:~# umount /mnt/rootfs
root@OpenWrt:~# umount /mnt/kernel
root@OpenWrt:~# reboot

Сейчас нужно снова поставить пароль рута. Прежний был в RAM и удалился при перезагрузке.

# telnet 192.168.1.1
# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root

Ключ сгенерированный для ssh тоже находился в памяти и исчез при перезагрузке поэтому при входе через ssh по тому-же адресу (192.168.1.1) вы получите ошибку:

$ ssh root@192.168.1.1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
60:97:95:75:f2:ed:e6:11:98:28:2c:56:5e:54:ba:82.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:2
RSA host key for 192.168.1.1 has changed and you have requested strict checking.
Host key verification failed.

Чтобы небыло этой ошибки удалите из файла /root/.ssh/known_hosts строку с адресом 192.168.1.1
После этого вы нормально войдёте в роутер.

Далее можно заниматься настройкой роутера на своё усмотрение.