Linux роутер d link

Стал у бедного админа виснуть роутер от 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, жирным выделено то, что я вводил в консоли, курсивом — мои комментарии.

Источник

С некоторым удивлением обнаружил, что мой домашний роутер D-LINK DIR-300 внутри себя имеет линукс. Обнаружилось это чисто случайно — под настроение решил найти и посмотреть на встроенный в роутер компорт. В результате вижу следующее :

Читайте также:  Проброс портов на роутере мгтс zte f680

BusyBox v1.00 (2009.04.03-11:08+0000) multi-call binary

#uname
Linux DIR-320 2.4.20 #1 Fri Apr 3 19:05:05 CST 2009 mips unknown

Причем, хотя telnetd во внутренней файловой системе имеется, но при старте роутера он не запускается. То есть консоль наружу нигде не торчит, спрятанная от посторонних глаз.
Нигде на сайте и форуме длинка исходных текстов прошивки я не нашел. Получается, что D-LINK принципиально забил на GPL. Это странно. Обычно уж кто-кто, а разработчики busybox уже должны были поднять срач по этому поводу.

Может, я плохо искал и кто-нибудь ткнет меня носом в сорцы прошивки?

Пальцем в сорсы не ткну, но, полагаю, что они выложены. D-Link, обычно, соблюдает GPL, даже твёрдую копию лицензии в коробку с продуктом кладут.

>даже твёрдую копию лицензии в коробку с продуктом кладут.
Подтверждаю (Dlink 500T)

>С некоторым удивлением обнаружил, что мой домашний роутер D-LINK DIR-300 внутри себя имеет линукс

еще бы там было что то другое, почти все железки D-Link , особенно SOHO
работают на линуксе

>Нигде на сайте и форуме длинка исходных текстов прошивки я не нашел. Получается, что D-LINK принципиально забил на GPL.

я тоже не нашла, D-Link вообще достаточно неохотно и после многочисленных пинков выкладывают исходники для уже к тому времени устаревших железок,
DLink.ru кстати в этом плане пинать бесполезно, они «люди маленькие» и выложат только тогда , когда соответствующее ЦУ даст их центральный (глобальный) офис

а вот для DIR-300 и вообще в каталоге /Router/ исходников нет.

Как ты туда зашел? У меня по ССХ: >ssh: connect to host 192.168.0.1 port 22: Connection refused

Может я чего-то не так понимаю, но если они не изменяли исходнии, обязательно ли их выкладывать?

>Как ты туда зашел? У меня по ССХ: >ssh: connect to host 192.168.0.1 port 22: Connection refused

В админке sshd включён? Пароль на девайс поставлен?

Ни разу не видел там sshd, для этого пароль нужно поставить?

dlink про linux и gpl пишет обычно в конце бумажной инструкции, поищи

Обязательно.

>Может я чего-то не так понимаю, но если они не изменяли исходнии, обязательно ли их выкладывать?

Обязательно. Лицензионное соглашение заключается между пользователем и производителем, и только с производителя пользователь может требовать, а лицензионное соглашение (GPL) требует предоставить исходники. Кроме того, не имея исходников и сборочной цепочки трудно убедиться, что они ничего не изменили. А так, собрал, md5 посчитал.

>Ни разу не видел там sshd, для этого пароль нужно поставить?

Да, только для этого нужно предварительно поставить openwrt. 🙂

Источник

Собираем прошивку

В стандартной прошивке ничего подобного об Ethernet WAN порте нет, поэтому интернет был исследован на наличие кастомных прошивок. Из поддерживаемых нашлась OpenWRT ( DD-WRT не поддерживает ), однако официальной поддержки нет. Это значит, что готовых сборок нет и нужно патчить и собирать из исходников самому.
На странице вики есть страница с описанием роутера и патчем для исходников. Вся суть патча состоит в том, чтобы добавить новую платформу для сборки в Makefile, при том, что описание платформы уже состоит в trunk версии.

  • cтягиваем исходники с SVN svn co svn.openwrt.org/openwrt/branches/backfire backfire
  • добавляем две строчки c нашем роутером
    # D-Link DSL-2650U
    $(call Image/Build/CFE,$(1),96358VW2,6358,DSL2650U)
    после
    # D-Link DSL-2740B
    $(call Image/Build/CFE,$(1),96358GW,6358,DSL2740B)
    в файл target/linux/brcm63xx/image/Makefile
  • делаем make menuconfig для настройки сборки ( возможно, необязательный пункт, но я его делал ), и заменяем созданный файл .config на файл с релиза: downloads.openwrt.org/backfire/10.03.1-rc5/brcm63xx/config ( нужно cкачать файл config и переименовать его в .config )
  • После этого просто make и ждем завершения сборки.
Читайте также:  Mikrotik vpn access sn mynetname net настройка

Компилировать оно будет долго, поскольку автоматически собирается toolchain, все зависимости и необходимые утилиты. После сборки появится папка bin/brcm63xx с образами для всех поддерживаемых роутеров. Нам нужен файл openwrt-DSL2650U-squashfs-cfe.bin .

Прошиваем роутер

Первая попытка скормить этот файл для обновления прошивки через веб-интерфейс роутера провалилась — веб-интерфейс возвращал не информативную ошибку о том, что этот образ нельзя прошить.
Еще была попытка прошить через tftp. Принцип прост, состоит в том, что при загрузке, bootloader запускает tftp сервер, и если поймать момент, можно залить прошивку. Сколько раз я не игрался с перезагрузкой роутера, результата не было. Почитать можно здесь.
На этом этапе у меня уже опустились руки и я смирился с покупкой нового роутера, как вдруг нашел на просторах интернета, что есть режим прошивки без проверки правильности прошивки.
Чтобы вызвать этот режим, нужно зажав кнопку ресет, включить/перегрузить роутер и держать кнопку ( ресета ) 10 секунд. После этого, при заходе в веб-интерфейс роутер предложит загрузить прошивку. Решившись рискнуть ( есть возможность сделать из роутера кирпич ), загружаем туда прошивку, ждем две минуты и о чудо, на нашем роутере OpenWRT.

Настройка

У нас есть роутер с OpenWRT, без веб-интерфейса, хотя веб-сервер работает и показывает пустоту.
Для начала нужно зайти на роутер через telnet , и, выполнив команду passwd , назначить пароль рута. После этого, мы можем общаться с роутером по ssh: ssh root@192.168.1.1 .
Как оказалось, прошить роутер не было самой большой проблемой, поскольку нужно еще по-умному настроить сеть. Перерыв много документации, понимаем, что нужно делать через VLAN — виртуальные сети. Нужно разбить порты свича на отдельные подсети, и настроить forwarding. Следуя этой странице вики, редактируем файл /etc/config/network .
У нас интерфейс свича совпадает с предполагаемым в руководстве — это eth1, и мы хотим вынести четвертый LAN порт в отдельную подсеть, поэтому мы большую часть конфига можем скопировать из документации. Единственное отличие в том, что у нас нет актуального WAN порта ( он есть, но не выведен железно ), поэтому мы не создаем отдельную extranet, а редактируем wan секцию, изменив ifname eth0 на ifname eth1.1 . Плюс этого изменения состоит в том, что в роутере все изначально настроено на раздачу интернета из wan в lan.
Полный конфиг:

config ‘switch’ ‘eth1’
option ‘enable’ ‘1’
option ‘enable_vlan’ ‘1’
option ‘reset’ ‘1’

config ‘switch_vlan’
option ‘vlan’ ‘0’
option ‘device’ ‘eth1’
option ‘ports’ ‘0 1 2 5t’

config ‘switch_vlan’
option ‘vlan’ ‘1’
option ‘device’ ‘eth1’
option ‘ports’ ‘3 5t’

config ‘switch_port’
option ‘port’ ‘3’
option ‘pvid’ ‘1’

config interface loopback
option ifname lo
option proto static
option ipaddr 127.0.0.1
option netmask 255.0.0.0

config interface lan
option type bridge
option ifname eth1.0
option proto static
option ipaddr 192.168.1.1
option netmask 255.255.255.0
option nat 1

Читайте также:  Какое ip для настройки роутера

config interface wan
option ifname eth1.1
option proto dhcp

Перезапускаем службу сети, выполнив команду /etc/init.d/network restart
Опытным путем было выявлено, что port 3 в конфиге соответствует реальному первому порту. Поскольку меня такой вариант удовлетворял, я не стал пробовать еще, но подозреваю, что port 0 будет реальным четвертым портом.
Втыкаем интернет провод в первый провод, и радуемся раздачи интернета. Если нужно подключаться через VPN, прошивка и такое может.

Последние штрихи

Для настройки Wifi нужно править файл /etc/config/wireless . Настройка вайфая описана тут.
Самый распространенный веб-интерфейс это Luci. Для установки, при подключенном интернете нужно выполнить:
opkg update
opkg install luci

В итоге мы имеем полноценный linux на роутере, на котором можно поднять торент-клиенты, всяческие кеширующие службы, прокси и т.п. А поскольку есть разьем USB, можно сделать сетевое хранилище или интернет-качалку.
Минус OpenWRT в том, что мы теряем функцию DSL модема, но поскольку отсутствие DSL и подвигло на такое решение, то это не критично.

Источник

Интерестно, есть ли на форуме люди, которые представляют себе, как собрать Линуксовое ядро и установитить его в маршрутизатор D-link, ну или любой другой!?

4 ответа 4

Задача сборки прошивки для девайса(роутер или что-то еще,- не важно) вообще говоря достаточно сложна:

Чтобы собрать прошивку надо иметь исходники ядра, rootfs и тематического софта(того, который делает железки разными: веб-интерфейсы, приложения и т.п.). Скорее всего Ваша железка не содержит процессора х86 семейства. Соответственно Вам потребуется набор кросстулов(gcc, binutils) для компиляции ядра на x86 хост-машине.

Скорее всего у Вас нет такого набора тулов от производителя железки, т.е. придется сначала собрать тулы. Уже на этом первом шаге у Вас могут возникнуть проблемы, типа: есть вероятность, что Вы не сможете найти правильный пакет gcc, который сможет генерить код на Вашу target железку.

Если Вы нашли и собрали кросстулы, следующий пункт сборка ядра, модулей ядра(если они есть) и rootfs, если ее нет готовой. Здесь проблема в том, что у Вас скорее всего нет исходников всех необходимых драйверов/модулей (хотя может для роутера найдется все — я хз).

Следующий пункт сборка приложений(если они есть), конфигурирование и укладка всего что есть в target файловую систему для сборки образа для заливки(это если у Вас прошивка единим образом кладется. Бывают случаи когда ядро и rootfs отдельно, а все остальное отдельно ставится уже после установки ядра и rootfs).

Теперь если у Вас образ для заливки на руках, то надо разбираться со способом залики образа на коробку, мне известны следующие варианты:

поднимаем на хосте прошивочный сервер, соединяем железку с хостом езернетом — жмем кнопки на железке и включаем ей питание. После начала процеса прошивки отпускаем кнопки.

записываем образ на USB-флеху, втыкаем в железку USB-флеху, жмем кнопки — вкл. питание.

используем JTAG — шьем аппаратно.

загружаем железку в bootloader(сюда заходим через сериал-терминал), в бутлоадере скачиваем прошивку через tftp, там же прошиваем.

загружаем железку в bootloader, в бутлоадере монтируем образ ядра через nfs, загружаемся в линукс с nfs.

В процессе сборки/прошивки могут возникать следующие проблемки:

криво собрались/прошились,- бутлоадер в наличии — пересобираемся/прошиваемся заново)

криво прошились,- убили бутлоадер,- железка не встала — ищем JTAG)

криво прошились,- железка не встала, сдохла флеха на железке — несем ее на свалку)

Источник