ftp и web сервер на осове openwrt и dir320
Эта статья родилась как следствие моих экспериментов с прошивкой и настройкой dir320. По сути она является компиляцией документации с различных источников и не претендует на первичность и эксклюзивность описанных тут знаний :)
Итак, у нас есть само устройство dir320.
Вот его краткие характеристики:
- Процессор: Broadcom BCM5354 240Мгц.
- Оперативная память: 32Мб.
- ПЗУ: 4Мб.
- Порт USB 2.0
- Интерфейс WAN 10/100BASE-TX Ethernet
- Интерфейс LAN 4 х 10/100BASE-TX Ethernet
Именно наличие USB 2.0 лично для меня сыграло основную роль в выборе сего девайса...
Внимание
Устанавливая не фирменную прошивку, Вы:
- Нарушаете гарантийные условия и теряете гарантию на устройство.
- Можете полностью "убить" ваше устройство.
- Вам потребуются знания и понимание принципов работы операционной системы Linux.
Данное руководство НЕ является официальным. К моменту прочтения данного руководства оно уже могло устареть. Автор не несет никакой моральной, финансовой или физической ответственности за описанные здесь методы прошивки устройства. Применяйте описанные здесь методы на свой страх и риск.
Пожалуйста, прежде чем приступить к прошивке устройства дважды подумайте: А надо ли оно вам?
Начало
Для начала определимся, какую прошивку будем устанавливать. В околоорбитных интернетах было найдено http://www.dd-wrt.com/ иhttp://openwrt.org/. openwrt лично мне понравился больше, хотя бы потому, что процесс сборки и кастомайзинга прошивки лучше документирован, и по сути проходит с использованием всего нескольких команд.
Собираем свою прошивку
Вся сборка будет проходить на Linux машине. В моем случае это была старенькая Gentoo.
Для начала получим последние стабильные исходники прошивки (на данный момент это бранч backfire)
Для начала получим последние стабильные исходники прошивки (на данный момент это бранч backfire)
svn co svn://svn.openwrt.org/openwrt/branches/backfire dir320
Рекомендуется также обновить дерево дополнительных скриптов
./scripts/feeds update -a && ./scripts/feeds install -a
Эти скрипты отвечают за установку дополнительного программного обеспечения, такого как vsftpd, iptraf и т.д. Кстати, если вы не планируете использовать дополнительное ПО, этот шаг можно невозбранно пропустить.
Теперь самое время приступить к конфигурированию прошивки.
Мой первый эксперимент с конфигурянием прошивки с нуля и ее установкой завершился неудачно. И пришлось восстанавливать девайс через recovery console.
Посему, я взял конфиг от уже собранных сборок:
wget http://downloads.openwrt.org/backfire/10.03/brcm47xx/OpenWrt.config cp OpenWrt.config .config
Теперь мы готовы начать настройку нашей прошивки:
make menuconfig
Процесс очень похож на процесс сборки ядра linux.
- Есть одно незначительное отличие:
- Пакеты отмеченные как * -- будут собраны и установлены в прошивку.
- Пакеты отмеченные как M -- будут собраны и окутано сложенны в каталог packages.
- Пакеты не отмеченные, не будут собраны вообще (Что не сомненно логично).
Позднее, пакеты собранные в каталог packages можно будет невозбранно установить используя встроенный пакетный менеджер opkg.
Рекомендую сразу отключить опцию:
Global build settings -> Select all packages be default
С одной стороны, если эта опция будет отмечена, у вас будут собраны все доступные пакеты дополнительные пакеты (с опцией M). С другой стороны, это займет ОЧЕНЬ много времени и 99% этих пакетовы вы вряд ли будете использовать... Выбор за вами, не забудьте после изменения это опции, выйти, сохранив конфиг, и опять запустить make menuconfig
Так же прошу обратить внимание, dir320 имеет всего 4Мб (На самом деле доступный объем ~3.6Mb) ПЗУ, поэтому не стоит отмечать все пакеты как *, а наоборот, лучше сделать образ прошивки как можно меньшим. Впрочем, не переживайте, мы собираемся позднее перенести корневую файловую систему на внешний накопитель, что позволит вам по желанию расширять набор установленных пакетов.
Если вы собираетесь подключать внешние носители к устройству -- обязательно включите модули:
kmod-usb-core | Kernel support for USB |
kmod-usb-ohci | Kernel support for USB OHCI controllers. Alternative to uhci |
kmod-usb-uhci | Kernel support for USB UHCI controllers. Alternative to ohci |
kmod-usb2 | Kernel support for USB2 (EHCI) controllers |
usbutils | USB devices listing utilities: lsusb, … |
kmod-usb-storage | Kernel support for USB Mass Storage devices |
kmod-usb-storage-extras | optional Kernel support for some more drivers, such as for SmartMedia card readers |
block-mount | optional Scripts used to mount and check block devices (filesystems and swap) |
block-hotplug | optional Scripts used to automatically check and mount filesystem and/or swap |
kmod-fs-ext3 | Kernel module for ext3 filesystem support |
Я собираюсь использовать файловую систему ext3. Вы можете использовать любую другую по вашему желанию, не забывайте включить нужные модули в ядро :)
Рекомендую в настройках busybox выключить сборку usage messages, a также собрать busybox утилиты для управления Login/Passwd. В довесок в мой набор входили пакеты, отмеченные как [M]: openssh, vsftpd, lighttpd, screen, sudo, iptraf, mc, irssi, rtorrent :)
Если вы готовы начинать сборку:
make
Теперь можно пойти выпить чашечку кофе или съездить на рыбалку, зависит от мощности вашего компьютера и количества выбранных пакетов.
По окончании сборки создастся имадж прошивки: bin/brcm47xx/openwrt-brcm47xx-squashfs.trx
И ipk пакеты собранные в bin/brcm47xx/packages
И ipk пакеты собранные в bin/brcm47xx/packages
Установка прошивки
Установка прошивки на dir320 происходит в несколько этапов:
1. Устанавливаем на свой компьютер пакет atftp
2. Устанавливаем на свой компьютер ip адресс 192.168.0.1/24
3. Соединяем патч-кордом компьютер и dir320 (используем lan 1 порт)
4. Делаем reset для dir320 (для этого надо стилусом или спичкой удерживать reset 5-10 секунд)
5. Выключаем питание
6. Включаем питание :)
6. Как только загорится индикатор lan1 -- выполняем команду:
2. Устанавливаем на свой компьютер ip адресс 192.168.0.1/24
3. Соединяем патч-кордом компьютер и dir320 (используем lan 1 порт)
4. Делаем reset для dir320 (для этого надо стилусом или спичкой удерживать reset 5-10 секунд)
5. Выключаем питание
6. Включаем питание :)
6. Как только загорится индикатор lan1 -- выполняем команду:
atftp --trace --option "timeout 1" --option "mode octet" \ --put --local-file bin/brcm47xx/openwrt-brcm47xx-squashfs.tx 192.168.0.1
В идеале, должна начаться передача файла прошивки. Заметьте, что dir320 подымает tftp на этапе загрузки всего на несколько секунд. Если вы не поймали нужный момент -- попробуйте повторить процедуру с 4-ого шага.
Будем наедятся, что у вас все получилось. И прошивка успешно залилась на устройство. После заливки прошивки будет запущен процесс.... прошивки :) который займет до 10 минут. НЕ выключайте и НЕ делайте Reset девайса в это время!
Спустя некоторое время, будем наедятся, что ваш девайс начнет пинговатся и вы сможете зайти на него через telnet:
telnet 192.168.0.1
Базовая настройка
Сразу смените пароль root аккаунта и отключите telnet:
passwd && /etc/init.d/telnet disable
Теперь можно выйти и зайти через ssh.
Подключение внешнего usb носителя
Надеюсь у вас все получилось и вы успешно перепрошили свой девайс и имеете к нему доступ через ssh :) Приступим к более интересным вещам...
Подключите ваше(и) накопительные устройства к dir320.
У меня в хламе был найден старенький кардридер, a так же неиспользуемые 2Gb MMC и 512Mb MemoryStick карточки.
Вот как выглядел мой dmesg после подключения кардридера:
usb-storage: device found at 2 usb-storage: waiting for device to settle before scanning scsi 0:0:0:0: Direct-Access Generic USB SD Reader 1.00 PQ: 0 ANSI: 0 scsi 0:0:0:1: Direct-Access Generic USB CF Reader 1.01 PQ: 0 ANSI: 0 scsi 0:0:0:2: Direct-Access Generic USB SM Reader 1.02 PQ: 0 ANSI: 0 sd 0:0:0:1: [sdb] Attached SCSI removable disk sd 0:0:0:2: [sdc] Attached SCSI removable disk sd 0:0:0:0: [sda] 4062208 512-byte logical blocks: (2.07 GB/1.93 GiB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00 sd 0:0:0:0: [sda] Assuming drive cache: write through scsi 0:0:0:3: Direct-Access Generic USB MS Reader 1.03 PQ: 0 ANSI: 0 sd 0:0:0:3: [sdd] 982016 512-byte logical blocks: (502 MB/479 MiB) sd 0:0:0:3: [sdd] Write Protect is off sd 0:0:0:3: [sdd] Mode Sense: 03 00 00 00 sd 0:0:0:3: [sdd] Assuming drive cache: write through sd 0:0:0:0: [sda] Assuming drive cache: write through sda: sda1 usb-storage: device scan complete sd 0:0:0:0: [sda] Assuming drive cache: write through sd 0:0:0:0: [sda] Attached SCSI removable disk sd 0:0:0:3: [sdd] Assuming drive cache: write through sdd: sdd1 sd 0:0:0:3: [sdd] Assuming drive cache: write through sd 0:0:0:3: [sdd] Attached SCSI removable disk
Если ваше накопительное устройство опознано -- отлично! Если нет, проверьте, установлены ли у вас описанные ранее kmod-usb модули, и загружены ли они: lsmod
Установка rootfs на внешний носитель
Отсоединяем его от dir320 и подключаем в компьютеру для разметки и форматирования.
Для себя я решил разбить устройства следующим образом:
Disk /dev/sdd: 502 MB, 502792192 bytes 32 heads, 32 sectors/track, 959 cylinders Units = cylinders of 1024 * 512 = 524288 bytes Disk identifier: 0x00000000Device Boot Start End Blocks Id System /dev/sdd1 3 514 262144 83 Linux /dev/sdd2 515 959 227840 82 Linux swap / SolarisDisk /dev/sda: 2079 MB, 2079850496 bytes 47 heads, 28 sectors/track, 3086 cylinders Units = cylinders of 1316 * 512 = 673792 bytes Disk identifier: 0x00000000Device Boot Start End Blocks Id System /dev/sda1 2 3087 2030080 83 Linux
512Mb MemoryStick были разбиты на два раздела по ~256 каждый. Первый будет отдан для roofs, а второй под swap раздел.
2Gb MMC создан только один раздел. В последствии он станет /home
2Gb MMC создан только один раздел. В последствии он станет /home
Разбиваем диски по собственному желанию используя fdisk
Форматируем разделы используя mkfs.ext3 для ext3 разделов и mkswap для swap (К.О. где-то рядом).
Форматируем разделы используя mkfs.ext3 для ext3 разделов и mkswap для swap (К.О. где-то рядом).
Теперь опять подключаем накопительные устройства к dir320. Монтируем раздел для rootfs и копируем roofs с dir320 на новый раздел:
mount -t ext3 /dev/sda2 /mnt cp /rom/* /mnt -a umount /mnt
Надеюсь, что вы не забыли установить пакет block-extroot (если нет то установите его используя opkg)
Настраиваем /etc/config/fstab:
root@OpenWrt:~$ cat /etc/config/fstab config global automount option from_fstab 1 option anon_mount 1 config global autoswap option from_fstab 1 option anon_swap 0 config mount option target / option uuid b87e2a54-1f90-468f-8d54-48b45ac2db64 option fstype ext3 option options rw,sync option enabled 1 option enabled_fsck 1 option is_rootfs 1
Обратите внимание, что вместо имени устройства я использую uuid. Это позволит в будующем избежать проблемм пр подключении дополнительных внешних носителей.
Получить uuid устройств можо командочкой blkid:
root@OpenWrt:~$:~# blkid /dev/sdd1 /dev/sdd2: UUID="5a24d7bc-cda4-4436-abbb-dae39519e00b" /dev/sdd1: UUID="b87e2a54-1f90-468f-8d54-48b45ac2db64" /dev/sda1: UUID="af3628b1-d771-4614-be4b-745c608a90d8"
Делаем reboot. Не пугайтесь если после ребута вас не пустит по ssh :) Все настройки сброшены, поэтому повторяем: telnet, passwd, отключаем сервер telnet, логинимся по ssh
Настраиваем /etc/config/fstab: (Но теперь для /home и swap разделов)
root@OpenWrt:~$ cat /etc/config/fstab config global automount option from_fstab 1 option anon_mount 1 config global autoswap option from_fstab 1 option anon_swap 0 config mount option target /home option uuid af3628b1-d771-4614-be4b-745c608a90d8 option fstype ext3 option options rw,sync option enabled 1 option enabled_fsck 1config swap option uuid 5a24d7bc-cda4-4436-abbb-dae39519e00b option enabled 1
Создаем /home и делаем reboot. После перезагрузки в mount можно увидеть:
root@OpenWrt:~$ mount rootfs on / type rootfs (rw) /dev/root on /rom type squashfs (ro,relatime) none on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime) tmpfs on /dev type tmpfs (rw,relatime,size=512k,mode=755) devpts on /dev/pts type devpts (rw,relatime,mode=600) /dev/sdd1 on /overlay type ext3 (rw,sync,relatime,errors=continue,data=writeback) mini_fo:/overlay on / type mini_fo (rw,relatime) debugfs on /sys/kernel/debug type debugfs (rw,relatime) /dev/sda1 on /home type ext3 (rw,sync,relatime,errors=continue,data=writeback) none on /proc/bus/usb type usbfs (rw,relatime)
Заметье, что /dev/sdd1 примонтирован в /overlay, а уж потом mini_fo:/overlay смонтирован в /
Настройка системы
Поскольку я собирал себе минимальный образ, без web-морды для настройки девайса, всю настройку пришлось делать вручную, что впрочем не так трудно (а некоторые аспекты возможно сделать только через правку конфигов)
Настраиваем hostname в /etc/config/system
config system option hostname hellion
Настраиваем ip адреса в /etc/config/network
root@hellion:~$ cat /etc/config/network #### VLAN configuration config switch eth0 option enable 1config switch_vlan eth0_0 option device "eth0" option vlan 0 option ports "1 2 3 4 5"config switch_vlan eth0_1 option device "eth0" option vlan 1 option ports "0 5"#### Loopback configuration config interface loopback option ifname "lo" option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0#### LAN configuration config interface lan option type bridge option ifname "eth0.0" option proto static option ipaddr 192.168.0.1 option netmask 255.255.255.0#### WAN configuration config interface wan option ifname "eth0.1" option proto static option ipaddr x.x.x.x option netmask 255.255.255.0 option gateway x.x.x.x option macaddr xx:xx:xx:xx:xx:xx option dns x.x.x.x
У меня статический внешешнй адрес, а macadr мне нужен для изменения дефолтного MAC адреса на eth0.1. В случае если у вас dhcp -- используйте соотвествуюзщий proto класс.
Настраиваем /etc/config/wireless
root@hellion:~$ cat /etc/config/wireless config wifi-device radio0 option type mac80211 option channel 11 option macaddr xx:xx:xx:xx:xx:xx option hwmode 11g# REMOVE THIS LINE TO ENABLE WIFI: option disabled 0config wifi-iface option device radio0 option network lan option mode ap option ssid foss.org.ua option encryption psk2 option key mycoolenckey
По сути -- все. Делаем reboot (Чтобы обновить hostname и рестартовать сервисы. Можно конечно вручную :) После загрузки -- можно подключатся к wifi и пользоваться этими вашими интернетами.
Установка дополнительных пакетов
На компьютере настраиваем веб или ftp сервер для каталога bin/brcm47xx/packages и запускаем его.
Настраиваем в /etc/opkg.conf свое локальное зеркало:
brezerk@hellion:~$ cat /etc/opkg.conf src/gz packages http://192.168.0.2/ dest root / dest ram /tmp lists_dir ext /var/opkg-lists option overlay_root /overlay
Я решил использовать sshd вместо dropbear, а также поднять ftp и http сервисы используя vsftpd и lighttpd.
Устанавливаем пакеты:
opkg install vstftp lighttpd sudo openssh-server
Опционально можете доставить любое нужно вам ПО (например торрeнты или irssi :)
Чтобы включить старт сервиса при загрузке:
/etc/init.d/vsftpd enable
Чтобы выключить удалить сервис из процеcса загрузки:
/etc/init.d/bropbear disable
По умолчанию, настройки firewall блокируют входящие соединения из wan, чтобы разрешить их, надо добавить правила в /etc/firewall.user
brezerk@hellion:~$ cat /etc/firewall.user # This file is interpreted as shell script. # Put your custom iptables rules here, they will # be executed with each firewall (re-)start.iptables -A input_rule -p tcp -d 109.86.58.241 --dport 22 -m state --state NEW -j ACCEPT iptables -A input_rule -p tcp -d 109.86.58.241 --dport 80 -m state --state NEW -j ACCEPT
Кстати, если будете выставлять ssh в мир, рекомендую отключить аутентификацию по паролю и использовать publickey.
Hints and tips
Если вы планируете в будущем обновлять прошивку, рекомендую держать все важные настройки в одном месте в: /etc/config/ при этом делая симлинк из оригинального местоположения.
brezerk@hellion:~$ ls -al /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf -> /etc/config/lighttpd
Recovery mode
Если прошивка не удалась или по ошибке залили чужую прошивку и маршрутизатор стал свичем, то можно сделать следующее:
1. При нажатой кнопке Reset включить питание и удерживать кнопку в течении 15 секунд.
2. После этого зайти на 192.168.0.1 через web-интерфейс.
2. После этого зайти на 192.168.0.1 через web-интерфейс.
Будет доступна консоль восстановления.
Следуя инструкции прошить фирменную прошивку: http://ftp.dlink.ru/pub/Router/DIR-320/Firmware
Следуя инструкции прошить фирменную прошивку: http://ftp.dlink.ru/pub/Router/DIR-320/Firmware
Восстановление фирменной прошивки:
1. Скачиваем фирменную прошивку: http://ftp.dlink.ru/pub/Router/DIR-320/Firmware
2. Устанавливаем пакет atftp
3. Устанавливаем на компьютер ip адресс 192.168.0.1/24
4. Соединяем патч-кордом компьютер и dir320 (используем lan 1 порт)
5. Делаем reset для dir320
6. Выключаем питание
7. Включаем питание :)
8. Как только загорится индикатор lan1 -- выполняем команду:
2. Устанавливаем пакет atftp
3. Устанавливаем на компьютер ip адресс 192.168.0.1/24
4. Соединяем патч-кордом компьютер и dir320 (используем lan 1 порт)
5. Делаем reset для dir320
6. Выключаем питание
7. Включаем питание :)
8. Как только загорится индикатор lan1 -- выполняем команду:
atftp --trace --option "timeout 1" --option "mode octet" \ --put --local-file firmware.bin 192.168.0.1
Источники
- Сборка прошивки OpenWrt Backfire для D-Link DIR-320
- OpenWrt Buildroot
- OpenWrt usb.essentials
- OpenWrt usb.storage
- USB накопитель в качестве корня файловой системы используя block-extroot для OpenWRT
Удачи! :)
Метки: linux, openwrt, dir320, block-extroot, usb
Взято тута: http://foss.org.ua/lib/thread.so.552
Комментариев нет:
Отправить комментарий