Пользователь
0,0
рейтинг
4 февраля 2009 в 18:09

Администрирование → Перепрошивка WiFi-роутера от D-Link прошивкой dd-wrt из-под Linux.

Стал у бедного админа виснуть роутер от D-Link, модель DIR-400.
И стал админ искать пути решения проблемы.
Погуглив полчаса наткнулся на прошивку от dd-wrt.com.
Поглядел на её возможности, обрадовался, и стал искать мануалов — как же всё таки эту прошивку залить (ибо стандартный прошивальщик, ребятами из D-Link писаный, не годится).

Нашёл мануал по заливке прошивки через DBG-console. Но вот беда — мануал на виндовых юзеров рассчитан, а винды под рукой нету, только Линукс праведный…
Ну, да ладно. Разобрался админ. Детали — под катом.

DBG-console



Есть у продутов от D-Link такая интересная фича — при включении железки в электросеть загрузчик на 2 секунды (значение по-умолчанию) поднимает сервер telnet на порту 9000.
Если за 2 секунды успеть залогиниться и послать железяке '^C' — процесс загрузки остановится и мы получим доступ в инженерную консоль, в которой можно всякие интересные штуки делать — например, залить неофициальную похаченую linux-based прошивку. Приступим.

Подготовка



Немного теории:


Оговорюсь сразу — я дёргал питание роутера раз 20, с паузами 10-20 секунд, пока смог таки заставить железяку отдать мне инженерную консоль. В принципе это безопасно — достаточно дождаться полной загрузки роутера, и питание можно снова выдёргивать.
Ещё нюанс — линуховая версия telnet напрочь отказывается слать '^C' по нажатию Ctrl-C вв момент подключения, пришлось включать моск — слать не один символ, а два, примерно так: при нажатом Ctrl жмём сначала V, потом C, отпускаем Ctrl.
И ещё — не бойтесь опечататься в инженерной консоли, все команды проходят валидацию, консоль просто не даст вам опечататься.

Приступим к практике:


Во-первых нам понадобится tftp сервер.
Ставим, кто как умеет (я юзал yum):

yum -y intall tftp-server

По-умолчанию tftp дёргается из xinetd, посему нужно немного подредактировать /etc/xinetd.d/tftp: выставить параметр disable = no и по вкусу отредактировать корневую директорию сервера (по-умолчанию — /tftpboot/, я её не менял).

Не забываем рестартануть xinetd.

Далее, идём сюда: dd-wrt.com/dd-wrtv3/dd-wrt/downloads.html
Там внизу — нечто вроде файлового менеджера, идём в директорию /stable/dd-wrt.v24 SP1/Consumer/Dlink/DIR-400 и качаем файлы linux.bin и dir400-firmware.bin в директорию /tftpboot/ (ну или на что вы там её изменили в конфиге).

Выдёргиваем из подопытного роутера все Ethernet-кабеля, отключаем всех WiFi-клиентов, втыкаемся в один из LAN-портов железки.
Назначаем своей машине статический IP 192.168.0.2, роутеру — 192.168.0.1.

Начинаем веселье



Дальнейшие действия требуют сосредоточенности.
Набираем в консоли

telnet 192.168.0.1 9000 (Enter пока не жмём, просто набираем для экономии времени — помните про 2 секунды?)

Выдёргиваем питание из роутера, ждём пару секунд, втыкаем питание, считаем до трёх, жмём Enter…
Далее идёт мой telnet session transcript, жирным выделено то, что я вводил в консоли, курсивом — мои комментарии.

[root@localhost ~]# telnet 192.168.0.1 9000
Trying 192.168.0.1... (после появления этой надписи я нажал Ctrl и начал попеременно жать V и C, это видно далее)
^C
Connected to 192.168.0.1.
Escape character is '^]'.
^C (всё ещё Ctrl-V-C)
RedBoot> RedBoot> ^C
^C (это уже по инерции)
RedBoot>(тут уже чудом начал работать полноценный Ctrl-C, нажал два раза...)
RedBoot>
RedBoot> ip_address -l 192.168.0.1/24 -h 192.168.0.2 (назначаем роутеру локальный IP и говорим, что tftp-сервер живёт на 0.2)
IP: 192.168.0.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.0.2
RedBoot> fis init (инициализируем прошивальщик)
About to initialize [format] FLASH image system - continue (y/n)? y (после нажатия y - ждём, пока появится приглашение консоли)
*** Initialize FLASH Image System
And a descriptor for the configuration data size = 10000
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
RedBoot> load -r -b 0x80041000 linux.bin (после этой команды где-то с минуту ждём, пока бинарь зальётся по tftp на железку)
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x803bafff, assumed entry at 0x80041000
RedBoot> fis create linux (снова ждём :) )
... Erase from 0xbfc40000-0xbffba000: ........................................................
... Program from 0x80041000-0x803bb000 at 0xbfc40000: ........................................................
prog_ok
flash_addr = 0xbfc40000
mem_addr = 0x80041000
entry_addr = 0x80041000
length = 0x37a000
img_size = 0x37a000
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
RedBoot> fconfig (прошивка установлена, поздравляю. Теперь проведём базовую конфигурацию.)
Run script at boot: true (Enter)
Boot script:
.. fis load -l vmlinux.bin.l7
.. go
Enter script, terminate with empty line
>> fis load -l linux
>> exec
>> (Enter)
Boot script timeout (1000ms resolution): 2 (тут можно задать значение побольше - тогда не нужны будут танцы с telnet и ^C при последующих издевательтвах :) Просто будет больше времени на то, чтоб прервать процесс загрузки)
Use BOOTP for network configuration: false (Enter)
Gateway IP address: (Enter, пока оставляем пустым, потом в веб-морде его всё равно ещё раз прописывать)
Local IP address: 192.168.0.1 (Enter)
Local IP address mask: 255.255.255.0 (Enter)
Default server IP address: 192.168.0.100 (Enter)
Console baud rate: 9600 (Enter)
GDB connection port: 9000 (Enter)
Force console for special debug messages: false (Enter)
Network debug at boot time: false (Enter)
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xbffe0000-0xbfff0000: .
... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
RedBoot> reset (после этой команды роутер уйдёт в ребут)

Всё, после ребута роутер будет доступен по IP 192.168.1.1 через http и telnet (потом можно будет SSH включить) с полноценным Linux унутре :)
Маленький нюанс: сначала нужно зайти на роутер через http и задать имя пользователя и пароль — только потом можно будет попасть на роутер через telnet.
br0ziliy @br0ziliy
карма
83,6
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (55)

  • +4
    Еще один способ заливания прошивки ).

    1) использование tftp клиента, описан в вики и на форуме на dd-wrt
    2) пишем в браузере 192.168.0.1 (ентер не жмем); выключаем роутер; одну руку заносим над ентер'ом, другой включаем роутер; считаем до 3 и жмем ентер — попадаем в ГУЙ прошивальщика. (подсказал друг, который недавно купил DIR-320)
    • +1
      Я точно также перепрошил свой Linksys WRT54G.
      Через консоль перепрошли, и теперь у меня DD-WRT прошивка. И после этого рутет уже не зависает.
  • –1
    Как бы это не странно от меня звучало, шить лучше в вантузе. Там это немного все проще, ну и на сайте ко всем моделям написано как их шить и как восстановить обратно.

    У меня вопрос по dd-wrt, они там научились держать русскую реализацию pptp :) (VPN), когда основной vpn находится за шлюзом? или все продолжать игратся с самодельными скриптами?
    • 0
      Сие мне неведомо ибо данная фича не нужна — перепоршивал чисто с целью избавиться от зависаий роутера…
      Вообще ежель по правде — немного подофигел, когда в ГУЙ попал первый раз после перепрошивки — столько опций…
      • 0
        Возникает вопрос, за что мы платим производителю -)
        Я вот лучше бы платил за dd-wrt прошивку для развитие дальше.
        • 0
          Ну, какбе производитель и не гарантировал, что его прошивки будут работать в СНГ :)
          • 0
            Есть официальное представительство в РФ, есть сертифицированная продукция. И если производитель не обещает что оно будет работать, как его тут вообще продают? Если серые поставки, то вина покупателя Факт. Во всех остальных случаях товар можно вернуть =)
            • +1
              Представительство != техотдел. Оф. преддставительство только продажами занимается.
              Вспомни зухели с прошивкой от «Вектора»…
    • 0
      Мне в корбине удавалось настроить PPTP без всяких скриптов, только скорость получалась маленькая, я думаю потому что не все параметры можно задать в интерфейсе + не знаю работала ли локалка. Версия прошивки что то в духе preSP2
    • 0
      научились… у самого была данная ситуация…
      • 0
        А вы ба не могли объяснить, как заставить маршрутизатор с DD-WRT видеть локалку провайдера и Интернет по VPN?
        • 0
          давно писал на форуме своего провайдера, Вам дам ссылку
    • 0
      Там russian pppoe реализуется через vlan1. Ставите его в unbridget и прописываете IP и маску локалки провайдера.
  • 0
    А на мануал, расчитанный на виндовых юзеров по заливке прошивки, ссылочку не дадите?
    • +2
      вот: www.shadowandy.net/2008/06/flashing-guide-for-dir-320.htm
      это для DIR-320, свой по нему прошивал, но другие модели — так же
      • 0
        Спасибо
    • +1
      ну все просто
      идем www.dd-wrt.com/dd-wrtv3/dd-wrt/hardware.html Выбираем свой роутер

      вам выдадут все нужные файлы и инструкции, включая tftp сервер для windows.
      Главное понимать как этот tftp работает.
      Но об этом можно почитать так же на сайте.
      Работа тут для новичков тонкая, так что с наскока не надо =) а то получите кирпич!
      • 0
        на оф сайте интрукции не очень внятные, по крайней мере для dir-400…
        • 0
          без обид, как шится с tftp написано на сайти в вики и форуму. Что подтверждает первый комментарий :) Там замечательный поиск на сайте.
          • 0
            Wiki не смотрел, спорить не буду.
            Там рядом с бинарными файлами прошивки валяется текстовый файл, с именем flashing.txt или как то так — судил по нему. Там не всё очевидно.
    • 0
      www.66.ru/user/19035/blog/21016/
      Это та статья, которую я использовал для написания поста на Хабр. Там вобщем всё то же самое, но некоторые нюансы не описаны.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Для некоторых длинков помагает, там где явно проблема в прошивки.
    • 0
      Угу, помогло. 5 часов — полёт нормальный :)
      А раньше каждые 30-40 минут приходилось ребутить.
  • 0
    Заливал я это, в общем скорость роутинга по лану не устроила, откатился на заводскую, и тут выяснилось, что dd-wrt затирает служебную область при инсталляции, и теперь WiFi c шифрованием больше не пашет :-)
    • 0
      В следующей версии прошивки вроде исправили этот досадный баг
  • –1
    А у меня последняя бета родной прошивки вроде хорошо работает, тфу-тфу-тфу.
    Тоже Dir-400.
    • 0
      Да как то народ не сильно любит оф прошивки, судя по ссылкам из гугла… Но тут опять же — похоже, как повезёт.
      • 0
        Я и сам, честно говоря, подумывал dd-wrt поставить, но потом взвесил и решил не браться, раз всё и так работает. К тому же гарантия ещё пока действует, жалко терять.
      • 0
        У меня кстати тоже DIR-400, и с родной прошивкой (еще самая первая версия) вроде терпимо работает.
        Читал статью по перепрошивке (http://www.dd-wrt.com/wiki/index.php/Installation#D-Link_DIR-400), но решил что лучше не трогать то, что не пытается на меня напасть :)
  • 0
    >Оговорюсь сразу — я дёргал питание роутера раз 20, с паузами 10-20 секунд, пока смог таки заставить железяку отдать мне инженерную консоль

    я как-то раз пробовал прошивать DIR300. в общем, спасло меня то, что телнет-сервер он поднимал тогда же, когда начинал откликаться на пинги. соответственно на этом я нужный момент и ловил

    но роутер перепрошивкой я потом таки убил :(
    • 0
      а восстановить нет? правда думаю там уже паяльник нужен =) Ну или хороший знакомый.
      • 0
        судя по всему нет =/ при включении горит только лампочка питания, при втыкании в него провода с другой стороны провода ничего не видно. кажется, ёк :(
        • 0
          Обратитесь на форум, может быть там помогут.
    • 0
      проблема DIR-400 в том, что телнетом он откликается _только_ после 2-х пингов на протяжении 2-х секунд… То есть не совсем сразу.
  • 0
    У меня с Linksys WRT54G таже трабла была — тоже успешно перешел на dd-wrt.
    • 0
      а вы там, случаем, pppoe не пользуете?

      Провайдер хочет чтобы я к нему этой штукой приходил, теперь ищу как это сделать.
      • 0
        часом не Киев? не qt?
        • 0
          нет, симферополь.
          • 0
            просто очень похоже :) запретили ставить свои роутеры, чтобы мы не висели всем домом на одном акаунте, и при этом берут 50 грн за то, чтобы три поля в конфигураторе заполнить. при этом ставят свой пароль на точку, так что перенастроить невозможно. и при всем при этом еще и к ним едь…
      • 0
        нет, у меня легальная домашняя сеть — использую DHCP и легально подключил комп и ноут
      • 0
        в настройках есть такой зверь.
        гляньте dd-wrt control panel demo если сомневаетесь шить/не шить.
        • 0
          Да, спасибо!

          Я уже прошился на dd-wrt, но у меня там pppoe при выборе нет.

          Пойду в прошивках пороюсь, мож обновиться надо :)
    • 0
      А какая именно трабла? Частые зависания?
      • 0
        именно.
        Купил в штатах, там пользовался месяц — все ок. Домой вернулся — через каждые пару часов зависал.
        Прошил — уже больше года все ok, стабильно работает больше месяца без перезагрузок.
        • 0
          Думаю, дело в питании — в штатах 110 и относительно стабильно, у нас 220 и черти-что. Родной сетевой адаптер — универсальный 110/220, докупил только переходник.
  • 0
    У меня, кстати, этот же роутер постоянно терял PPPoE соединение, приходил вручную пересоединяться через веб-интерфейс или ребутить девайс.

    Залил без особых надежд прошивку Firmware Version: 1.03, Mon, 17 Nov 2008 — аптайм без ручных реконнектов что-то около двух месяцев.
    • 0
      родная 1.05 на офсайте есть уже с русфикацией даже :)
      • 0
        А вот в том-то и дело, что я теперь не рискну обновиться :)
        • 0
          у меня была лажа как раз на 1.03 — обновился до 1.05 — кажется стало нормально. стало меньше танцев с бубном при загрузке. до этого приходилось вырубать питание и инет-шнур, врубать питание, дожидаться загрузки, втыкать провод, вручную поднимать впн. сейчас просто вручную поднимать впн :)
  • 0
    Было такое, спасал только ребут с потерей коннекта
  • 0
    У меня Di 624, вот вы говорите 2 секунды? у меня больше проходит пока комп реконнекнится к нему(
    пытаюсь разбираюсь
  • 0
    У меня какието буковки есть в 192.168.0.1:5678/igd.xml что это? )
  • 0
    Спасибо, только благодаря этому топику сегодня смог перепрошить его. С винды вчера не прошился, превратился в кирпич, а сегодня с убунты залил в него всё и настроил.
  • 0
    Не моуг пробитьсЯ, не с линукса ни с винды.

    У меня только одна проблема (которую и пытаюсь решить)
    стоит прошивка от билайна ( описание homenet.beeline.ru/index.php?showtopic=287062&st=0 )

    Там много всего вырезанно относитель но родной прошивки, в частноти возможность отката, програмной перепрошивки и перепрошивки посте ребута (30/30/30)

    По tftp и телнету не конетиться…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.