вторник, 10 марта 2015 г.

TP-Link WDR4300 + snmpd, очередная версия.

Собрал последнюю EN-версию с включенным snmpd: 3.14.1 Build 141113 Rel.41164n. Установил на свой домашний роутер. Из нововведений - переделан вход в web-админку, и нет совместимости со старыми бинарными конфигами. Уже не раз писал об "удобвстве" бинарных конфигов. Пришлось небольшую базу из резервированных MAC вручную добавлять.

Вот. Повторюсь - шьете на свой страх и риск. Однако замечу, что этот риск нисколько не выше, чем шить "фирменную" 3.14.1-en, поскольку в моей добавлены только snmpd, необходимые ему библиотеки и подправлен rcS, для автозапуска.

Обратил внимание на то, что в новой прошивке встроен dropbear, который нормально запускается вместе с роутером, но залогиниться на него невозможно: root-овый пароль не принимает, а admin-ский прокатывает, но на стороне клиента пишется следующее:


PTY allocation request failed on channel 0
shell request failed on channel 0

т.е. похоже ребята забыли создать соответствующие консоли. А рута не логинит наверняка в связи с тем, что его консоль не прописана в securetty. Имхо.

TP-Link WDR4300 GPL 2.6.31

Намедни попытался собрать прошивку "по следам" последней версии en. Вставить snmpd, добавить функционала в busybox и пересобрать ядро. Всё собралось прекрасно, только вот виснет после распаковки ядра.

Пришлось вспоминать, как дебрикать роутер. Вкратце: необходимо иметь хост с адресом 192.168.0.100 на котором должен работать tftp-сервер. В корень этого сервера необходимо разместить прошивку с отрезанным u-boot. Такую можно получить из любой стоковой путем "отрезания" от нее 257 блоков по 512 байт:

dd if=stock-fw-with-boot.bin of=stock-fw-wo-boot.bin skip=257 bs=512
Назвать ее надо по особому - 6F01A8C0.img. После этого подключиться консолью к роутеру - обресетить его и в момент, когда он скажет "Autobooting in 1 seconds" быстро ввести ему tpl и нажать Enter(у меня никак не получалось, пока я в буфер обмена сие не запихал и в нужный момент правой кнопкой мыши в окне putty не кликнул;)). В появившемся приглашении - сказать tftboot. Если tftp-сервер настроен верно - начнется загрузка фёрма. После загрузки его надо "прошить" и "обресетить" роутер:

db12x> erase 0x9f020000 +7c0000

First 0x2 last 0x7d sector size 0x10000                                                                                                                                                                                                  125
Erased 124 sectors

db12x> cp.b 0x81000000 0x9f020000 0x7c0000

Copy to Flash... write addr: 9f020000
done

db12x> reset

После этих пассов роутер обязан "взлететь". Проверено дважды. Первый раз - пытался вернуться на сток после OpenWRT: процесс прошивки прошел криво - ядро грузилось, а корневая ФС не могла, из-за чего роутер вошел в циклический ребут. Понятное дело, в этом состоянии он не пытался грузить файл с tftp. Второй раз - сегодня из-за того, что самосборное ядро работать не схотело. Вопрос - почему? Вроде всё по фирменному мануалу собирал...

пятница, 6 марта 2015 г.

TP-Link WDR4300 snmpd. Part4

После сборки прошивки со встроенным snmpd месяц наблюдал за трафиком. Что-то в графиках не так. Есть у меня серверочек, который торренты сидирует. С него вылетает ~200Кбайт/с. А роутер говорит, что в сторону прова от меня скорость ~50Кбит/с. Думал, что snmp собрался неверно.

Однако, когда что-то скачивается через wifi - трафик наблюдается во всех местах, где ему положено быть. И в ожидаемых объемах. А по эзернету - ~50Kbit/s даже в том случае, когда качается файло со скоростью 8Мбайт/с! Если snmp умеет показывать правильные результаты - значит, он не виноват.

Вспомнил, что на WDR4300 имеется Hardware NAT. Отключил. Трафик появился. Странно. И непонятно, стоит ли включать HW NAT назад. Скорость без него не упала ни на чуть. Нагрузки на проц как не было, так и нет. Да и со включенным HW NAT чип, который посвящен эзернетам греется так, что палец не терпит. Наверное месяцок поюзаю роутер с выключенным HW NAT.

среда, 4 марта 2015 г.

Мысль про роутеры.

Как я писал в предыдущей статье, после перешивки нетгирьки загрузка процессора на нем серьезно упала. Подумалось - чем же занимался процессор роутера, который использовался как АР, т.е. ему даже NAT выполнять было не надо? Ответ прост - выполнял какие-то задачи производителя.

И вот, собственно, мысль: почему бы производителю роутера не написать софт, который будет исполнять распределенную задачу. К примеру, взламывать пароли. John The Ripper у нас вполне себе умеет OpenMP. Т.е. производитель firmware, который не предоставляет исходных кодов (или предоставляет не полностью) вполне может встроить в прошивку какую-нибудь распределенную задачу, а роутер будет периодически ходить на определенный сайт, чтобы слить то, что уже порешал и обновить задачи.

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

вторник, 3 марта 2015 г.

Netgear WNR3500Lv2 Router, part 2

В выходные пересобрал фирменную прошивку для старенького WNR3500Lv2. Оказалось, что периодически встроенный туда snmpd падает. А поскольку логи в стоковой прошивке написаны непонять как - причины невозможно выяснить. Кроме того, на роутере зачем-то крутится java-приложение, которое периодически лазает "на родину" и что-то пытается выкачать.

В общем, подумал, почитал и плюнул на сток. Прошил EntWare, которая от vampik'а. Стало полное заглядение - в данной прошивке можно выбрать роутеру режим AP, тогда все Ethernet-порты отдаются под свитч, а интернет ожидается откуда-то из внутренней сети. Что в моем случае и нужно - роутером у меня трудится TP-Link WDR4300, а нетгиря - дополнитьельный спот и свитч.

Два выходных потратил на сборку. Впрочем, нельзя сказать, чтобы совсем в пустую - потренировался собирать под mipsel-linux, Теперь можно прошивку vampik'а "покрутить" самому. Вот только зачем? В прошивке предусмотрено всё, что хотелось. Кстати, загрузка процессора на стоковой была 40-90% (java прожорливая), а на EntWare - изредка поднимается до 20% на пару мгновений.

При перешивке таки "закирпичил" роутер - после переходной прошивки прошил не для того роутера. Воспользовался советами отсюда, описано понятно. Потратил на раскирпичивание минут 10-15.

воскресенье, 1 марта 2015 г.

TP-Link WDR4300: httpd, который рулит всем, дубль два

Который день пытаюсь найти исходники типилинковского httpd, для чего рассматриваю строковые значения. Похоже, что даного сервиса в сырцах в открытом доступе нет. Однако софтописатели, которые его писали таки обладают толикой юмора - встретил среди строк такую:

Ahhhh! call 911!

Встречается она два раза, первый - в связи с dyndns, а второй - в непонятном контексте.

Вообще, в бинарнике, размером 1.5Мб встречено 200Кб строк, большинство из которых посвящены конфигурации системы. Совершенно неясно, почему разработчики tp-link не вынесли конфиги в отдельный файл. Как, впрочем, неясна причина, по которой httpd в GPL source не отдается в сырцах.

пятница, 27 февраля 2015 г.

TP-Link WDR4300: httpd, который рулит всем.

Во время подготовки образа со всключенным snmpd в данный роутер, обнаружил, что httpd-сервис этого роутера даже в GPL-коде вставлен бинарником, никаких сырцов не дадено. Поиск в интернетах ничего не дал.

Дальше стал искать, как включаются правила для iptables, для чего грепнул rootfs на предмет упоминания iptables. Очень удивился, когда в /etc упоминания оного были только о сбросе, зато в httpd встретилось упоминание. Посмотрел внутрь httpd и обнаружил все правила для запуска iptables. В бинарнике! Никак не понять мне скрытого смысла. Зачем помещать текстовые данные в текстовом виде внутрь бинарника? Причина только одна - спрятать бэкдоры и прочие вещи, о которых пользователю лучше не знать. Вот кусок вывода strings httpd:

iptables -F FORWARD_FILTER
iptables -F FORWARD_PARENTCTRL
iptables -I FORWARD_FILTER 1 -j FORWARD_ACCESSCTRL
sh /tmp/wr841n/parent.sh
iptables -I FORWARD_FILTER 1 -i %s -p udp --dport 53 -j FORWARD_PARENTCTRL
iptables -I FORWARD_FILTER 2 -i %s -p tcp --dport 80 -j FORWARD_PARENTCTRL
iptables -I FORWARD_FILTER 3 -i %s -p tcp ! --dport 80 -j DROP
iptables -I FORWARD_FILTER 4 -i %s -p udp ! --dport 53 -j DROP
iptables -I FORWARD_FILTER -m mark --mark %s -j FORWARD_ACCESSCTRL
iptables -I FORWARD_FILTER 1 -i %s -m mac --mac-source %s -j RETURN
iptables -A FORWARD_PARENTCTRL -i %s -j DROP
iptables -A FORWARD_ACCESSCTRL -i %s

Упоминание "/tmp/wr841n/parent.sh" наводит на мысль о том, что бинарный httpd особо извращенным способом читает данные из бинарного (!) пользовательского конфига, закидывает их во внешний шелл-скрипт, а потом запускает на исполнение. Считаю, что задумка хранить конфиг в бинарном виде - прекрасна, так же, как и хранение больших текстовых блоков внутри бинарника - даже если какой-то гад доберется до данного изврата, переизвратить не сможет!

Что же скрывает от нас TP-Link? Может быть он перехватывает данные, которые наши iPhone шлют в АНБ и шлет копию этих данных в китайские спецслужбы?

среда, 25 февраля 2015 г.

Netgear WNR3500Lv2 Router

Есть у меня в дому еще один старенький роутер означенной модели. Скорость на его wifi выше 130мбит/с не поднимается, но ethernet-порты у него гигабитные, и есть пачка устройств, которым быстрее чем 130 и не нать, типа телефонов да принтеров. А портов в дому не хватает. Потому - решил и его заюзать.

Проблема на нем та же, что и в tp-link'е - нет поддержки snmp, а хотелось бы, поскольку домосеть как-то неимоверно быстро растет - уже более 30 разных устройств - андроиды, яблоки, телевизоры и прочая хрень...

Нашел на их сайте GPL source, скачал, почитал инструкцию. Увидел в ней
You will need to use the 4.2.3 Linux 2.6 MIPS Cross Compiler and Tools (mipsel-uclibc toolchain), which should have also been posted to your account. If you still can't find it, please download the toolchain from the GPL source package WNR3500Lv2-V1.2.0.16_40.0.66_src.tar.zip, which also includes the toolchain.
но вот беда - нету тулчейна в комплекте... При чем инструкция в каждой из примерно 7 версий прошивок говорит, что есть!

Ну, в итоге, нашел нужный тулчейн, и собрал прошивку as-is. Далее - скачал готовый образ, отрезал от него rootfs и сравнил. Вроде все соответствует. Надо бы подрихтовать Makefile, чтобы snmpd встраивался. Не умею я это дело совсем. Придется изучать.

вторник, 24 февраля 2015 г.

make 3.82: mixed implicit and normal rules

При сборке образа для роутера Netgear WNR3500Lv2 наткнулся на ошибки Makefile. Кто бы мог подумать, что в версии make 3.82 возникнут проблемы со сборкой:

mixed implicit and normal rules
Откатился на 3.81 - make работает успешно.

воскресенье, 8 февраля 2015 г.

TP-Link WDR4300 snmpd. Part3

Оказалось, что отсутствующие модули, о которых я писал в предыдущем сообщении удалены не зря - после того, как был загружен xt_tcpudp.ko перестал работать форвардинг и перестали раздаваться адреса по dhcp. Не первый раз наблюдаю, что firmware пишется хреново - модули удалили, а почистить стартовый скрипт на предмет загрузки удаленных модулей - забыли. Всё равно ж никто не видит, что там, на консоли, происходит...

Ну, короче, сделал я прошивку, в которую встроен snmpd, который запускается автоматически. Вот она. Сделана на базе 3.13.33 Build 140715 Rel.41693n. После перешивки весрию показывает ту же самую. Понятное дело, если кто-то станет шить - на свой страх и риск.

TP-Link WDR4300 snmpd и другое

Нашел на просторах инструмент для сборки-разборки стоковых имиджей TP-Link. Он входит в комплект firmware-mod-kit, что позволило разобрать-проверить-собрать правленый и дополненый имидж.

Пересобрал busybox и дополнил его полезными фичами, добавил net-snmp, прошил. Snmpd не запустился автоматически, но после изучения лога загрузки возникло понимание, что snmpd не смог понять с командной строки, кто такой daemon (-u daemon -g daemon), видимо надо цифровой id поставить.

Зато теперь есть netstat. Тут же выяснилось странное - на нескольких портах висят листенеры:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:33344           0.0.0.0:*               LISTEN
tcp        0      0 [local-net]:49152       0.0.0.0:*               LISTEN
tcp        0      0 [local-net]:49153       0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:49154           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:20005           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:1900            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:1041            0.0.0.0:*               LISTEN

Ну там 80-й и 1900-й порты еще понятны, но что делают остальные - неясно. Кроме того, обнаружилось, что в предоставляемом GPL Source Three нет исходников httpd, а как я понял, основные функции по работе с mtd производит он.

Да, вчитываясь в лог загрузки увидел совсем уже полное безобразие - отсутствуют модули ядра:

insmod: cannot open module `/lib/modules/2.6.31/kernel/x_tables.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/xt_tcpudp.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/iptable_raw.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/flashid.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/harmony.ko': No such file or directory

И это в стоковой прошивке! Первые два были найдены в GPL sources после сборки ядра, но первый ставиться не захотел:

# insmod ./x_tables.ko
[41243.332000] x_tables: exports duplicate symbol xt_free_table_info (owned by kernel)
insmod: cannot insert `./x_tables.ko': Invalid module format (-1): Exec format error

Видимо забыли вычеркнуть из спискм загрузки. Второй нормально загрузился. Где взять остальные пока неясно...