DLINK Dir-300 перепрошивка. OPENWRT настройка
Значит так есть роутер dir-300, есть интернет и есть пиво — хотим улучшить возможности железки.
Есть в сети такой линукс — называется OpenWRT — это 2 метровый AirOS с возможностью установки доп модулей и прочей билеберды — главное, что он позволит сделать все задачи связанные с маршрутизацией. Что мы имеем в начале — dir-300 может получать в wan порт интернет и натить его для lan-портов и wifi сети + есть возможности подключится к pptp серверу как клиент или pppoe клиентом стать. Есть также безсмысленный telnet который не позволит ничего сделать так как запись на устройство запрещена почемуто — кому интересно:
login: Alphanetworks
password: wrgg19_c_dlwbr_dir300
Зачем можно перепрошить этот девайс на openwrt — ну например надо влепить на железку pptpd сервер или требуется потдержка vlan-ов или комуто понадобился например RIP или OSPF, в общем на openWRT есть все что умеет любой Linux — если функционал железки позволяет сделать задачи поставленные вами — то баловаться не стоит но если все таки захотелось получить за 350 грн мегадевайс то вперед.
Итак нам надо:
1.Выход в сеть
2.Пиво
3.Linux машина
4.D`link DIR-30
Качаем с сети такой файлик «dir300-flash.sh» лежит тут (http://x-alina.freifunk-potsdam.de/downloads/dir300-flash/).
Ставим tftpd, netcat — если вдруг нету ip ставим и его
Распаковываем dir300-flash и в каталоге с распакованными файлами пишем
тянем с сети саму прошивку http://downloads.openwrt.org/kamikaze/8.09. s-root.squashfs
http://downloads.openwrt.org/kamikaze/8.09. os-vmlinux.lzma
ВНИМАНИЕ ТЯНУТЬ ТОЛЬКО С ОФФИЦИАЛЬНОГО САЙТА В ДРУГОМ МЕСТЕ МОЖЕТ БЫТЬ БИТАЯ — САМ НА ЭТО НАПАРОЛСЯ
openwrt-atheros-root.squashfs и openwrt-atheros-vmlinux.lzma ложим рядом со скриптом dir300-flash.sh
— втыкаем провод одним концом в комп а вторым в девайс в WAN. порт
— выключаем девайс (вынимаем провод питания)
запускаем $ dir300-flash.sh eth0 (ну или eth1 смотря куда засунули кабель)
и сразуже втыкаем провод питания в железку обратно
идем курить)
возвращаемся если все хороше то нам напишут Happy hacking! иначе чтото там страшное про способ востановить родную прошивку
после прошивки система будет доставляться – минут от 3 до 15
перетыкиваем кабель в LAN порт — ставим себе ип 192.168.1.2/24
пишем в броузере 192.168.1.1 и пьем пиво
после того как установите пароль на девайсе будет работать ssh
в интерфейсе веб морды разобраться не сложно — и с неё можно ставить модули — тыкаем обновить список модулей и выбираем что доставить — мне надо были mc, pptpd, tc, ip, mini-snmpd — всё это влезло
Есть минус — пропадает кудато WAN порт — или я не могу его настроить. Ну это не страшно — пишем алиасами несколько адресов на lan, заходим по ssh и в скрипт /etc/init.d/firewall пишем в секцию старта чтоб было гдето так — вобщем уже зависит от уровня извращенности ума.
start() <
. /lib/firewall/uci_firewall.sh
fw_init
iptables -I INPUT -s 172.16.0.0/16 -p tcp —dport 80 -j DROP
iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING -d 172.16.0.0/16 -j SNAT —to 172.16.22.85
iptables -t nat -I POSTROUTING -s 192.168.1.10 -j MASQUERADE
>
stop() <
. /lib/firewall/uci_firewall.sh
fw_stop
>
Все замечания и вопросы по почте asad@online.ua Александр Туткевич.
Перепрошивка 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):
По-умолчанию 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.