"Овощная" прошивка Tomato на D-Link DIR-320
kayo — Ср, 11/08/2010 - 23:37
Сегодня я буду учить вас плохому, а именно, мы будем ставить прошивку Tomato, чтобы использовать возможности нашего роутера, купленного за 60 американских рублей, на все 120%.
Затравка
Недорогие домашние маршрутизаторы — железки обычно весьма скромной конфигурации. Изредка встречаются экземпляры с RAM 32Mb и USB портом, наподобие D-Link DIR-320. Девайс заинтересовал меня именно по этим причинам и был приобретён примерно год назад. Сразу же после получения сего устройства, принялся тестировать на нём возможности различных прошивок. К слову сказать, прошивки от аналогичных моделей ASUS понравились даже меньше, чем стандартная родная. Меня заведомо не устраивали типовые решения, и нужно было искать что-то с гораздо более широкими возможностями и, одновременно, легко настраиваемое под различные нужды. Весь год роутер бегал висел на стенке под управлением DD-WRT. За год использования роутер и модифицированная собственноручно версия прошивки в целом хорошо себя показали. Однако выявились некоторые проблемы, которые со временем стали очень досаждать и побудили меня пробовать что-то другое.
- Отсутствие нормального hotplug-а в DD-WRT. Нет возможности прописывать действия, вызываемые при появлении и исчезновении определённых устройств. Мне требуется загружать firmware в принтер при подключении его по USB, а также монтировать USB накопители и запускать torrent клиент, если нужный носитель присоединён.
- Плохо работающие драйверы USB. Иногда случается что-то и устройства становятся недоступны до перезагрузки маршрутизатора.
- Тяжёлый proftpd, требующий много памяти и падающий при перекачке вложенной структуры каталогов по ftp.
- dnsmasq не принимающий имена узлов локальной сети от них самих.
В процессе чтения анонсов и обсуждений в форумах, моё внимание привлекла прошивка Tomato. Удивило то, как разработчики умудрились затолкать в std столько всего и при этом осталось ещё место, так нужное мне для firmware принтера. Было решено немедленно попробовать этот странный овощ на вкус.
Пробуем
Я скачал Standard тип последней стабильной версии прошивки на ядре 2.4 отсюда, потому что мне обещали ещё свободных 300 Кб. Не порадовала тенденция архивирования образов rar-ом, ну что ж, пришлось ставить unrar для раскатки. Затем я воспользовался набором скриптов Firmware Mod Kit для распаковки и повторной упаковки прошивки.
Подготовка
Итак, для начала создаём рабочий каталог, затем переходим в него и берём последнюю версию Firmware Mod Kit из svn:
svn checkout http://firmware-mod-kit.googlecode.com/svn/trunk/ mod-kit
Затем качаем и распаковываем нужный нам образ Tomato. Я создал директорию firmware в рабочем каталоге и складываю образы туда. Также создал каталог target, где будет лежать распакованное содержимое образов. Для распаковки образа переходим в mod-kit и выполняем:
./extract_firmware.sh../firmware/наша_исходная_прошивка.bin../target
Смотрим содержимое каталога target. Вы должны увидеть подкаталог rootfs, содержащий корневую файловую систему прошивки.
Модификация
Мне не хотелось пока что-то радикально меня в структуре прошивки. Я решил добавить лишь мониторинг загрузки системных ресурсов и сделать необходимые вещи для работы USB принтера.
Монитор загрузки ресурсов
Мне захотелось мониторить загрузку системы с помощью такого скрипта:
#!/bin/sh gpio="gpio" led=4 delay=2 full=100 high=70 med=40 while sleep $delay; do set -- $(cat /proc/loadavg) load="${1%.*}${1#*.}" if [ $load -gt $full ]; then flash=4 led=3 elif [ $load -gt $high ]; then flash=3 led=4 elif [ $load -gt $med ]; then flash=2 led=4 else flash=1 led=4 fi cur=1 while [ $cur -le $flash ]; do $gpio disable $led usleep 25000 $gpio enable $led usleep 80000 cur=`expr $cur + 1` done done
Он мигает светодиодом на верхней кнопке перезагрузки в зависимости от степени загрузки ресурсов системы маршрутизатора. Я сохранил этот скрипт в target/rootfs/usr/sbin/loadmon и дал ему права на выполнение.
Файл прошивки принтера
Для печати в Tomato уже входит простой сервер печати p910nd. Теперь передо мной стояла задача включения в образ прошивки принтера. Мой принтер HP LaserJet P1005 требует для работы загрузки в себя firmware по USB (вот зачем инжинигры HP сделали нам пользователям такую пакость) Ищем нужную прошивку sihp в интернете (например тут) или делаем следующее:
- Ставим пакет foo2zjs
- Выполняем: sudo getweb p1005 (без прав суперпользователя он не сможет сохранить прошивку куда хочет)
- Идём в /usr/share/foo2xqx/firmware и, если всё получилось, видим файл sihpP1005.dl
Установите точно модель вашего принтера, для неё аргумент команды и имя полученного файла будут другие.
Итак, кидаем полученный файл в rootfs прошивки. Я разместил его в /usr/local/sihp/sihpP1005.dl.
Сборка образа прошивки
Собираем модифицированный образ, для этого создадим директорию с образами, например firmware-new, в рабочем каталоге, затем снова идём в mod-kit и выполняем:
./build_firmware.sh ../firmware-new ../target
Если всё удалось, получаем файлы прошивок с разными именами под разные устройства. На данном этапе важно проконтролировать размер полученной прошивки под наш роутер, под DIR-320 она не должна сильно превышать 3.5 Мб, иначе может не влезть.
Заливка на роутер
Я наступил на кучу граблей, следуя руководству по прошивке томатов. Конечно же я очистил nvram перед прошивкой. А когда закатил tomato, с ужасом обнаружил неработающий порт WAN. Перепробовал все способы заставить его работать: отключал и включал опцию Reduce Packet Size, выставлял вручную режим работы порта, пробовал статическую конфигурацию интерфейса, — но ничего не помогало. Множество пользователей отписались автору прошивки об аналогичной проблеме. Однако интерфейс WAN работает, если перешивать Tomato после DD-WRT не выполняя сброс nvram. Я так и поступил, ибо не очень хотелось копаться в значениях параметров nvram.
- Закатываем на роутер DD-WRT, если он уже не стоит
- Удостоверяемся что WAN интерфейс работает
- Вытаскиваем пароль пользователя для доступа к админке (nvram get http_passwd)
- Зашиваем на девайс Tomato
- Заходим на роутер и проверяем работу WAN
Собственно прошивка
Шить можно двумя способами:
- Через web-морду роутера
- Через bootloader
Первый спопоб прост и тривиален, вкратце опишем второй. В таких девайсах имеется некая программа начальной загрузки, именуемая bootloader-ом, всё, что она умеет делать, это стартовать девайс и обновлять его прошивку. Bootloader в DIR-320 умеет принимать прошивку по протоколу tftp. Во время начальной загрузки он выставляет адрес моста локальных интерфейсов в 192.168.0.1 и некоторое время слушает соединения на нём по tftp. Мы должны перевести локальный сетевой интерфейс в эту сеть и кинуть прошивку. У меня для этого написан небольшой скриптик flash.sh:
#!/bin/sh ifconfig eth0 192.168.0.2 up atftp —option "mode octet" —option "timeout 60" —verbose —trace -p -l "$1" 192.168.0.1 ifconfig eth0 down
- Отключаем автоматическую конфигурацию сети (network-manager или что там у вас)
- Отключаем питание маршрутизатора
- Соединяем его с компьютером LAN шнурком
- Запускаем прошивку: ./flash.sh ваш_образ.bin
- Смотрим на процесс и ждём
- Ждём ещё несколько минут пока прошивка из оперативки полностью пропишется во flash девайса (он как-то даст об этом знать)
Если мы прошились в Tomato после DD-WRT, дефолтный пароль будет вовсе не admin, а тот, который мы с вами получили прочтением переменной http_passwd из nvram.
Финальная донастройка
Тут всё просто, web-морда содержит все необходимые вещи. Признаться, интерфейс томатной прошивки удивил всем. Он очень простой и логично организованный, нет перегрузки вкладок как в dd-wrt, нет этих идиотских всплывающих меню как в LUCI, все возможности удобно расположены в древовидном меню слева.
Запуск мониторинга при старте
Идём в Administration > Scripts и видим вкладки с текстовыми областями для вставки текста скриптов.
Добавляем в Init:
loadmon &
Также на всякий случай в Shutdown:
killall loadmon
После того, как добавили это, нажимаем Save. Теперь при старте начнут мигать светодиоды подсветки верхней кнопки перезагрузки роутера в зависимости от текущей загрузки системных ресурсов.
Инициализация принтера при подключении
Сперва включим работу USB в USB and NAS > USB Support. Отмечаем Core USB Support, USB 2.0 Support, USB 1.0 Support OHCI, USB Printer Support, Bidirectional copying (если нужно).
Не спешим жать Save, ведь мы ещё не настроили загрузку прошивки в принтер при подключении. Видим почти в конце формы текстовую область Hotplug script, она то нам и нужна. Я написал несложный скрипт, который проверяет идентификатор устройства и выполняет при подключении загрузку прошивки и включение светодиода принтера на панели роутера, а при отключении гасит этот светодиод:
DLF=/usr/local/sihp/sihpP1005.dl # Путь к firmware LED=5 # Номер порта светодиодного индикатора # PRODUCT = "VendorID/DeviceID/Version" [ $PRODUCT = "3f0/3d17/100" ] && { # Проверяем ID устройства [ $ACTION = "add" ] && { cat $DLF > /dev/usb/lp0 # Закатываем firmware gpio enable $LED # Зажигаем индикатор } || { gpio disable $LED # Гасим индикатор } }
Вставляем скрипт, правим, если нужно и тогда уж жмём Save. Далее подключите этот сетевой принтер на машинах, на которых предполагается его использовать, тут всё просто, главное не забыть указать правильную модель принтера.
USB накопители и FTP сервер
Тут всё тоже весьма просто. Идём в USB and NAS > USB Support. Отмечаем Core USB Support, USB 2.0 Support,USB 1.0 Support OHCI, USB Storage Support, в Filesystem Support отмечаем модули каких файловых систем нам нужны, я отметил Ext2/Ext3. Теперь отметим также Automount, чтобы все разделы подключаемых устройств монтировались в подкаталогах с их именами внутри /mnt. Области для скриптов, выполняемых при монтировании и отмонтировании устройств, оставим пока пустыми, в дальнейшем мы обязательно применим их для запуска torrent клиента и других полезных вещей. Теперь нажимаем Save.
Всё хорошо, устройства подключаются и работают, однако мы не позаботились об их отсоединении. Хорошая идея использовать верхнюю кнопку сброса для этого. Идём в Administration > Buttons / LED и заголовок SESS/AUSS Button, это оно. Мы можем настроить действия, которые выполнятся при удерживании этой кнопки определённое число секунд. Например, пусть при удерживании кнопки сброса 4-6 секунд выполнится Unmount all USB Drives. Сохраняем, тестируем, должно работать.
Теперь настроим ftp сервер. Порадовало, что здесь более лёгкий vsftpd вместо proftpd, который используется в dd-wrt. Переходим в USB and NAS > FTP Server и выбираем нужную конфигурацию в Enable FTP Server. Далее настраиваем другие параметры на свой вкус. Я решил запретить анонимусам лазить на сервер и выбрал в качестве корня сервера директорию /mnt с подмонтированными накопителями.
В User Accounts задаём всех пользователей, которым разрешён доступ.
Финальные шаги
После настройки не забываем сделать бэкап конфигурации на случай если произойдёт сброс настроек и нужно будет их по быстренькому восстановить. Для чего идём в Administration > Configuration пишем имя файла бэкапа и сохраняем его. Осталось только перезагрузиться и проверить работу всего того, что мы только что настраивали.
Выводы
На мой субъективный взгляд, Tomato - единственная по-настоящему вменяемая прошивка из того, что довелось использовать до этого. В ней выдержан тонкий баланс между юзабильностью и функционалом, и выдержан не в ущерб одного другому, как обычно любят делать получается. Однако как всегда не обошлось без суровых граблей, рандомно разложенных тут и там.
Потом напишу ещё, как использовать optware на внешних накопителях, как запускать torrent клиенты и другой полезный софт.
Напоследок пруфпики моей сетки и скриншоты web-фейса помидорки:
Железо:
Вложение | Размер |
---|---|
tomato-ndusb-1.28.8748-std-by-kayo.trx | 3.39 МБ |

Спасибо, за статью. Очень
Александр (не проверено) — Пт, 19/11/2010 - 18:17Скорость копирования с винта
kayo — Сб, 04/12/2010 - 00:16Скажите пожалуйста, если я
Sacred (не проверено) — Ср, 01/12/2010 - 01:47Вовсе не обязательно ребутить
kayo — Сб, 04/12/2010 - 00:24Вовсе не обязательно ребутить маршрутизатор, но если очень хочется, то можно примерно так:
Прошу прощения что долго не появлялся ;-)
доброго времени суток
Гость (не проверено) — Вс, 12/12/2010 - 21:25Я так понимаю, речь идёт об
kayo — Чт, 16/12/2010 - 17:14Ну так а чего с торрентом -
Alex (не проверено) — Сб, 08/01/2011 - 23:29Самый простой путь -
kayo — Вс, 09/01/2011 - 20:50Категорически приветствую
KARaS'b (не проверено) — Втр, 11/01/2011 - 13:19Если так уж нужно то
kayo — Втр, 11/01/2011 - 16:41Примного благодарен!
KARaS'b (не проверено) — Чт, 13/01/2011 - 15:57Всем добрый день! У меня 3G
Gennadis (не проверено) — Пт, 14/01/2011 - 18:58Ну как быстрое решение могу
kayo — Сб, 15/01/2011 - 02:58у меня аналогично,
mdolf (не проверено) — Втр, 03/05/2011 - 18:39у меня аналогично, решение:
галочку на Automatically mount all partitions to sub-directories наоборот снимаем, прописываем Hotplug script:
gpio disable 3
mkdir -p /tmp/mnt/mydisk
mount -o noatime /dev/discs/disc0/part1 /tmp/mnt/mydisk
gpio enable 3
теперь постоянно по адресу /tmp/mnt/mydisk флешка подключена, даже горячая замена работает
Скажите пожалуйста, в какое
TNT (не проверено) — Сб, 22/01/2011 - 19:57Вообще-то сам скрипт у меня
kayo — Сб, 05/02/2011 - 15:16А не подскажите почему wan
zales (не проверено) — Сб, 26/02/2011 - 00:19Вообще сам никогда не
kayo — Сб, 26/02/2011 - 02:14Вообще сам никогда не поднимал pppoe непосредственно на роутере, однако слышал про некоторые проблемы с провайдерами в этой стране.
Нужно посмотреть что у вас в логах, так что cat /tmp/var/log/messages и все другие интересные логи из /tmp/var/log сюда, будем разбираться.
Спасибо за участие. Со вчера
zales (не проверено) — Сб, 26/02/2011 - 16:12Похоже он соединяется, но
kayo — Сб, 26/02/2011 - 22:18Похоже он соединяется, но сеть не поднимается. Tomato с ядром 2.4 имеет такую проблему на некоторых устройствах, наверно стоит попробовать версию с ядром 2.6. Тут описывается похожая ситуация, даже сделали кастомную прошивку, чтобы влезла в DIR-320.
Странно это все, но не
zales (не проверено) — Вс, 27/02/2011 - 20:37Ребят, подскажите, можно в
Юля (не проверено) — Пт, 01/04/2011 - 11:37Ребят, подскажите, можно в овощной прошивке сделать качание торрентов по расписанию?
Т.е. сделать так, чтобы качалось только ночью, а днём канал был свободен от тех тысяч пиров/сидов которые наглухо забирают весь канал на себя, и сёрфинг жутко тормозит?
Можно, если качает у вас
kayo — Втр, 03/05/2011 - 15:46Здравствуйте. такая вот
Artem (не проверено) — Втр, 05/04/2011 - 01:07Здравствуйте. такая вот проблемка есть. может вы поможете. был у меня дир320 с опенврт камиказе, там всё отличненько работало,но пришлось отдать (
Купил новый, на стандартной всё работало,прошился сразу на камиказе, и у меня не поднялся wan такие вот логи писал
гугление по Timeout waiting for PADS packets, конкретного ничего не дало.
Прошился на дд-врт. ван заработал,но кривенько,бывают разрывы и бывает инет пропадает. Пытался прошиться на томато, через дд-врт, по логам вебморды прошивку он посылает. но при этом после ребута либо я не получаю айпишнека и никак не могу приконектится в диру, либо запускается снова вебморда дд-врт. что за черная магия такая?
Через интерфейс dd-wrt
kayo — Втр, 03/05/2011 - 15:58В результате поставил всё
atom (не проверено) — Втр, 05/04/2011 - 23:52В результате поставил всё таки томато из прикреплёного к статье архива.В первый день всё хорошо работало, установил торент.качало. все супер.
пережило ночь. на утро из за электричества перезагрузился. переключал в другую розетку.
после этого wan соединение не поднималось.а логи писали следующее
Уважаемый kayo, может вам
feodul (не проверено) — Пнд, 11/04/2011 - 21:40Уважаемый kayo, может вам приходилось сталкиваться с такой проблемой - в томатной прошивке версия vsftpd "понимает" только кодировку UTF8, что в принципе естественно. Однако это сильно неудобно, при обращание к ftp-серверу например из-под Win файлы с русскими именами на внешнем харде отображаются некорректно, а уж тем более нет возожности залить файлы с русскими именами в хранилище, так как исходная кодировка win1251. Поэтому требуется некая перекодировка. С такой проблемой уже давно столкнулись и есть даже решения - http://vsftpd.devnet.ru/rus/
Проблема заключается в адаптировании этой "исправленной" версии vsftpd к томатной прошивке. Если есть идеи и желание помочь в адаптации буду Вам очень признателен в помощи, так это единственное, что недостает в этой замечательной томатной прошивке. :) Сам являюсь счастливым обладателем Asus RT-N16 (Tomato Firmware v1.28.9054 MIPSR2-beta K26 USB Ext) c extHDD WD 2Tb.
Собрать программу для роутера
kayo — Втр, 03/05/2011 - 16:03День добрый уважаемый kayo,
Sergey (не проверено) — Чт, 28/04/2011 - 01:43Добрый день, как раз она то и
kayo — Втр, 03/05/2011 - 15:53День добрый, столкнулся с
Sergey (не проверено) — Чт, 28/04/2011 - 15:54Так обновить конечно же не
kayo — Втр, 03/05/2011 - 15:54Подскажите на usb web-камеру
Влад (не проверено) — Чт, 16/06/2011 - 13:19Для камеры нужно собирать v4l
kayo — Чт, 23/06/2011 - 17:32Не могу прошить именно
EHOT (не проверено) — Пт, 17/06/2011 - 01:56Не могу прошить именно Томатовской прошивкой.
Оригинальная, Асус (wl500gpv2) и DD-WRT - прошиваются и отлично работают. Пробовал прошивать через tftp. После прошивки роутер не поднимается. HW - A2
Единственное отличие от оригинальной комплектации - 64 RAM. В DD-WRT, АСУС- все отлично работает.
попробуй эту -
Влад (не проверено) — Пт, 17/06/2011 - 23:42попробуй эту - http://tomatousb.ru/viewtopic.php?f=8&t=26 через восстановление, предварительно сбросив настройки.
Dir-320 +Tomato v1.28.0168 ND
Принц_еП (не проверено) — Вс, 19/06/2011 - 20:33Dir-320 +Tomato v1.28.0168 ND USB Std
имеется МФУ принтер Samsung SCX-4623 Series
принтер работает в сканер НЕТ!!
подскажите пожалуйста как запустить сканер???
С этими МФУ обычно всегда
kayo — Чт, 23/06/2011 - 17:30Здравствуйте! Спасибо за
Moto (не проверено) — Чт, 04/08/2011 - 18:43Так оно на linux-хосте
kayo — Втр, 16/08/2011 - 09:08А какой ip на eth интерфейсе
SED (не проверено) — Втр, 16/08/2011 - 06:36192.168.1.1 если нет то
kayo — Втр, 16/08/2011 - 09:10Здраствуйте, Kayo!Я не не
Noqrax (не проверено) — Вс, 28/08/2011 - 00:18Здраствуйте, Kayo!
Я не не знаю по адресу ли я или нет (ни в программировании, ни в прошивках я ничего не понимаю). Но возможно Вы знаете ответ на мой вопрос. Я приобрёл МФУ Samsung SCX-3200 и владею роутером DIR-320. Проблема состоит в том, что я не могу удалённо сканировать изображения. Я слышал, что существуют какие-то программы для удалённого сканирования, однако ничего конкретного не нашел. У меня два ноутбука с Win7 32 и 64-bit, а так же ПК с XP 32-bit.
Буду очень признателен за помощь!
Заранее спасибо,
Noqrax.
Сканнер скорее всего не так
kayo — Втр, 30/08/2011 - 02:01Помгите с такой проблемой,
Арте (не проверено) — Втр, 30/08/2011 - 11:47Проброс портов через
kayo — Сб, 17/09/2011 - 14:55Отличная статья по
Гость (не проверено) — Ср, 08/02/2012 - 13:27Девайс от меня переехал к
kayo — Сб, 17/03/2012 - 00:02Отправить комментарий