Главная > TL-MR3020 > TL-MR3020: из роутера в Linux-коробку по шагам.

TL-MR3020: из роутера в Linux-коробку по шагам.

Когда-то давно я собирался сделать из упомянутого в названии роутера интернет-радио для мамы на кухню, и даже почти сделал его, однако проект заглох по причине отсутствия интереса к нему со стороны того, кому предназначался конечный продукт. Тем не менее, я наверняка сделаю на этом роутере еще что-то, тем более что сейчас у меня появился второй экземпляр. Надо сказать, что это событие и подвигло меня на написание этой статьи — прежде всего как напоминалки себе на будущее, ибо в процессе конфигурирования выяснилось, что с момента запуска первого роутера я многое забыл и мне снова пришлось лазить по wiki OpenWRT.

Эта статья освещает следующие вопросы:

1. Установка OpenWRT на роутер. Если кто не знает, OpenWRT — по сути полноценный линукс, под которым можно делать почти все что угодно.

2. Настройка доступа по Wi-Fi.

3. Подключение флешки.

4. Установка интерпретатора Lua / редактора nano.

При этом «роутерный» функционал сознательно отодвигается на второй план. Т.е., конечная цель — получение маленькой Linux-коробки с вайфаем, из которой дальше можно делать что угодно.

Приступим.

1. Установка OpenWRT.

Тут нет ничего сложного. Прежде всего выкачиваем самую новую прошивку и куда-нибудь ее складываем. Да, чтобы не было возможных конфликтов сетей, всю дальнейшую настройку роутера (до поднятия Wi-Fi и включения в домашнюю сеть) производить желательно с компьютера, подключенного исключительно к этому роутеру и ни к чему более. Я, например, использовал для этого ноутбук — после выкачивания прошивки отключил Wi-Fi и подключил роутер в ethernet.

Итак, выкачав прошивку, идем в WEB-интерфейс роутера (не забываем, что его адрес по умолчанию — 192.168.0.254, а не 192.168.1.1 или 192.168.0.1) и выбираем штатную опцию обновления:

1

Указываем скачанный файл, жмем обновить, немного ждем и…

2

…а-а-а!!1111 Все сломалось, на 192.168.1.1 (адрес роутера по-умолчанию после установки OpenWRT) та же картина!

На самом деле ничего не сломалось и все хорошо. Просто в базовой поставке OpenWRT нет предустановленного WEB-интерфейса. Да и кому он нужен, учитывая, что мы собираемся с этим роутером делать дальше? Разве только слабым духом и девушкам. Впрочем, думаю, слабых духом среди нас нет; девушек — тем более, они уже сдали все экзамены и потому электроникой (и уж тем более мной и моим блогом) не интересуются до следующей сессии, потому продолжим так, как есть.

Свежеустановленная OpenWRT сразу после первой загрузки ждет, пока к ней подключатся через telnet и установят пароль root’а (основного пользователя, имеющего неограниченные права; хоть системный раздел затереть — никто не остановит). Ага-ага, тру-Ъ-кул-рил-олдскул линуксоиды в этом месте могут ужаснуться — мы будем постоянно сидеть под root’ом. В основном потому, что 90% нашего времени будет занимать настройка разных конфигов, что гораздо приятнее делать не приписывая каждый раз «sudo«; кроме того, я исхожу из мысли, что мы хорошо знаем, что делаем. А вообще, если устройство превратится в кирпич, мы всегда можем это поправить.

Итак, прежде всего нам надо установить пароль root-а. Заходим по telnet — если кто не знает, прямо в консоли Windows, той, которая cmd, пишем telnet 192.168.1.1, подключаемся

3

и попадаем в консоль Linux.

4

Здесь командой passwd устанавливаем новый пароль. При вводе пароля он отображаться не будет, даже звездочками. Пугаться не надо, все ОК. Просто в Linux так принято.

После этого telnet отключится и все дальнейшее общение роутер будет ожидать через SSH. Для SSH я предпочитаю использовать PuTTY. Подключаемся к 192.168.1.1, у нас спрашивают логин, пароль и пускают в консоль.

5

Бинго! Теперь на нашей карманной железке крутится полноценная система.

2. Настройка доступа по Wi-Fi.

В этой главе мы будем продолжать наше светлое дело превращения TL-MR3020 в полноценный миникомпьютер, так как сейчас платформа все еще продолжает считать себя роутером — Wi-Fi сконфигурирован в режиме точки доступа (и отключен), работает DHCP-сервер и т.п. И потому перед нами стоит цель отучить систему от всего этого, научить подключаться к имеющейся сети/точке доступа Wi-Fi в режиме обычного клиента и соединяться через нее с интернетом для собственных нужд, а не для трансляции данных кому-то еще. А интернет нам понадобится обязательно, ибо, пока мы не установим поддержку флешек, другого способа добычи нужных программ у нас не будет.

Здесь надо сделать небольшое отступление и рассказать о замечательной штуке в составе OpenWRT, которая называется uci. Это консольная утилита, которая позволяет заменить долгое копание в десятках конфигурационных файлов простой настройкой с помощью консольных команд. Полную справку по поддерживаемым параметрам можно получить, просто введя в консоли «uci» без параметров. Я перечислю только самые интересные для нас.

Первый случай — uci show <имя конфига>. Эта команда показывает состояние интересующей конфигурации. Например, uci show network покажет конфигурацию сети, uci show wireless — конфигурацию Wi-Fi.

Вторая важная команда — uci set <имя поля>=<значение>. Как нетрудно догадаться, устанавливает нужное значение в интересующее поле; именно этой командой мы и будем допиливать конфиги до необходимого вида. Да, чтобы убрать ненужное поле можно просто оставить значение пустым. Аналогично, если запрошенного поля нет, она его создаст. uci — умная утилита.

Наконец, uci commit <имя конфига> сохраняет измененные параметры.

Пара общих слов перед тем, как я покажу пример настроек, к которым мы будем стремиться.

Перед нами стоит задача настроить два сетевых интерфейса — для Ethernet и Wi-Fi. Оба они будут настроены на статические IP. Конечно, роутер поддерживает и получение DHCP, но тогда каждый раз, когда нам захочется подключиться к нему, мы должны будем какими-то джедайскими путями узнавать его адрес, что крайне неудобно.

Но прежде всего надо отучить его раздавать DHCP — мы же хотим, чтобы оно работало как обычный компьютер, без роутерских замашек. Для этого надо удалить dnsmasq, DNS/DHCP-сервер. Пишем в консоли

opkg remove dnsmasq

opkg — это пакетный менеджер, что-то типа Windows Installer (ага, линуксоиды тут опять вздрогнут, а у кого и глаз задергается). О нем будет разговор попозже; пока нам важно только, что приведенная команда удалит указанную программу.

ВНИМАНИЕ!

Сейчас наш компьютер (с которого конфигурируем) продолжает работать на адресе, выданном dnsmasq компьютеру еще тогда, когда OpenWRT только загрузилась. Если процесс будет прерван на этом моменте, то при следующем подключении выдать адрес компьютеру будет некому. Нужно будет настроить оный вручную в свойствах подключения. Роутер по умолчанию имеет адрес 192.168.1.1, компьютеру можно дать любой другой. Например, 192.168.1.2 (маска подсети 255.255.255.0).

Ну вот, а сейчас я покажу пример того, как должна выглядеть конфигурация сети, чтобы все работало (через точку с запятой будут мои комментарии; это НЕ стандартно и НЕ поддерживается системой конфигов, в выводе uci show этого не будет; все это дописано исключительно здесь ради большей понятности):

root@OpenWrt:~# uci show network
network.loopback=interface ; первый сетевой интерфейс, классика, 127.0.0.1 - отвечатель 
сам себе. Тут ничего менять не надо.
network.loopback.ifname=lo
network.loopback.proto=static
network.loopback.ipaddr=127.0.0.1
network.loopback.netmask=255.0.0.0
network.lan=interface ; второй сетевой интерфейс, lan.
network.lan.ifname=eth0 ; подключен к ethernet'у.
network.lan.proto=static ; DHCP? Нет, спасибо.
network.lan.netmask=255.255.255.0
network.lan.ipaddr=192.168.2.1 ; Wi-Fi и ethernet для простоты лучше настроить на 
разные подсети.
network.wwan=interface ; третий сетевой интерфейс, я назвал его [w]ireless wan, т.к. с него будем 
подключаться к внешней для нас сети и интернету. Но по сути это lan, конечно.
network.wwan.proto=static ; не надо DHCP
network.wwan.netmask=255.255.255.0 ; маска подсети той сети, куда будем подсоединяться 
по Wi-Fi
network.wwan.ipaddr=192.168.1.20 ; желаемый адрес в сети, куда будем подключаться
network.wwan.dns=8.8.8.8
network.wwan.gateway=192.168.1.1 ; адрес настоящего роутера, к которому будем 
подключаться через Wi-Fi
root@OpenWrt:~# uci show wireless
wireless.radio0=wifi-device ; настройка физического Wi-Fi устройства. Тут ничего менять 
не надо.
wireless.radio0.type=mac80211
wireless.radio0.channel=11
wireless.radio0.hwmode=11ng
wireless.radio0.path=platform/ar933x_wmac
wireless.radio0.htmode=HT20
wireless.radio0.ht_capab=SHORT-GI-20 SHORT-GI-40 RX-STBC1 DSSS_CCK-40
wireless.radio0.disabled=0 ; ничего менять не надо, кроме этого. Ну, включить-то Wi-Fi 
надо... 0 - включено.
wireless.@wifi-iface[0]=wifi-iface ; настройка Wi-Fi интерфейса.
wireless.@wifi-iface[0].device=radio0
wireless.@wifi-iface[0].mode=sta ; sta - подключаться как клиент
wireless.@wifi-iface[0].ssid=<имя Wi-Fi сети>
wireless.@wifi-iface[0].key=<пароль Wi-Fi сети>
wireless.@wifi-iface[0].encryption=psk2 ; шифрование сети
wireless.@wifi-iface[0].network=wwan ; Wi-Fi будет прикручен к wwan.

Далее действуем очень просто. Смотрим через uci show network / uci show wireless конфиги, сравниваем с эталоном выше и корректируем несовпадающее / добавляем недостающее / удаляем лишнее. Как-то так:

uci set network.wwan=interface
uci set network.wwan.proto=static
uci set network.wwan.netmask=255.255.255.0

И так далее, и так далее. Когда все готово, сохраянем настройки и включаем Wi-Fi:

uci commit network
uci commit wireless
wifi

Все. Отключаем роутер от компьютера, для верности перезагружаем его. Теперь он должен подключиться к указанной сети и быть доступен через Wi-Fi + SSH по указанному адресу (в примере 192.168.1.20).

3. Настройка USB Storage.

Вне зависимости от того, что мы будем делать на этом роутере дальше, нам наверняка захочется подключить к нему флешку/жесткий диск/кард-ридер, ибо места в его собственной памяти не так много. Чтобы иметь возможность подключать устройства хранения, нам надо доустановить несколько системных модулей, отвечающих за:

  • собственно поддержку mass storage;
  • поддержку файловой системы на накопителе;
  • поддержку кодировок, в которых написаны имена файлов.

Как уже говорилось, за установку софта тут отвечает opkg — софтина типа Windows Installer’а. Опять же, полную справку по командам можно получить, просто написав в консоли «opkg» без аргументов. Для нас интересна команда install. «opkg install zzz» означает «выкачать из интернета и установить программу zzz со всем необходимым для ее работы».

Перед тем, как пользоваться opkg, надо обновить список доступного софта:

opkg update

А дальше просто устанавливаем необходимые для поддержки флешек пакеты.

Общая поддержка флешек:

opkg install kmod-usb-storage

Поддержка FAT-32:

opkg install kmod-fs-msdos

Поддержка кодировок:

opkg install kmod-nls-cp1251
opkg install kmod-nls-cp437
opkg install kmod-nls-cp866
opkg install kmod-nls-iso8859-1

Все. Втыкаем флешку и монтируем ее.

mount -t vfat /dev/sda1 /mnt

Если ругается, значит не хвататет какого-то модуля. Посмотреть, что не так, можно с помощью команды

dmesg | tail

Она покажет последние несколько сообщений системного лога. Там можно посмотреть, что не так, и доустановить недостающее.

Если смонтировалось успешно, содержимое флешки будет доступно в каталоге /mnt.

4. Установка интерпретатора Lua и редактора nano.

Если мы хотим делать что-то на роутере, то, наверное, мы хотим писать под него свои приложения. Однако тут есть небольшой облом — кросс-тулчейн существует только под Linux и только в исходниках; я же не использую Linux на десктопе и не горю желанием красноглазить, собирая тулчейн под minGW. Однако, к моему счастью, существуют уже собранные под роутер интерпретатор и компилятор Lua — достаточно приличного языка, похожего на продукт постмодернистского скрещивания Pascal и JavaScript. Ну а писать можно прямо на роутере в редакторе nano — достаточно приличном редакторе, типа EDIT в MS-DOS (кто-то из линуксоидов тут упадет в обморок). Установим:

opkg install lua
opkg install nano

Заключение.

После всех перечисленных действий роутер превратился в универсальный миникомпьютер, который подключается по Wi-Fi в локальную сеть, в который можно втыкать флешки и под который можно писать на Lua. Как его развивать дальше — отдельная история… Может быть, я об этом еще напишу.

Рубрики:TL-MR3020
  1. Павел
    22/09/2014 в 00:47

    Настроил доступ по wi-fi. Оставил адрес как в примере 192.168.1.20. Теперь не могу подключиться к роутеру ни по wifi ни по кабелю… Что делать?

    • YS
      22/09/2014 в 16:34

      Wi-Fi включен? Как подключаетесь кабелем? Надеюсь, через другой роутер?

      • Pavel
        22/09/2014 в 16:42

        Пытался с помощью кабеля, подключенного к порту №1 и по wi-fi, который раздает другой роутер.

        • YS
          22/09/2014 в 20:23

          «Порт №1» это WAN, что ли? Или просто один из eth-портов вашего основного роутера? В WAN втыкать его не надо.

          1. Не забывайте, что Ethernet и Wi-Fi имеют разные адреса и подсети, если вы делали четко по моему мануалу. У меня в настройках LAN настраивается на 192.168.2.1, а Wi-Fi на 192.168.1.20. На LAN’е основного роутера подсеть правильная?

          2. Вы включили Wi-Fi? Т.е. установили wireless.radio0.disabled в ноль?

          • Pavel
            23/09/2014 в 13:59

            Да, это ethernet порт. Делал четко по мануалу. Подсеть на основном роутере еще не проверял…

            • YS
              23/09/2014 в 16:00

              Чтобы не заморачиваться на разборки с роутером, попробуйте сделать по тому аварийному варианту, что я описал в статье, с прямым соединением компьютера и MR3020 и проверьте настройки Wi-Fi.

  2. Maks
    05/03/2014 в 21:18

    Разобрался, пытался настроить интерфейс который еще не создал🙂
    Настройки все прописал. Теперь не хочет стартовать wi-fi:

    root@OpenWrt:~# wifi
    command failed: Device or resource busy (-16)
    Command failed: Not found
    Successfully initialized wpa_supplicant
    Command failed: Not found

    • YS
      05/03/2014 в 22:31

      Странно. Я, поскольку сам виндоусофил, посоветую перезагрузиться.🙂 Мне помогало (кажется, как-то раз тоже такую ошибку видел).

  3. Maks
    05/03/2014 в 19:49

    Привет! Пытаюсь по мануалу настроить сеть:

    root@OpenWrt:~# uci set network.wwan.proto=static
    uci: Invalid argument

    выплевывает ошибку. Что я делаю не так?

  4. Георгий
    11/01/2014 в 00:04

    Эх, а я ожидал, что ты его через UART прошивать будешь ^^

    • YS
      11/01/2014 в 12:57

      Зачем? Главный принцип Даосизма — недеяние, что следует понимать как «недеяние лишнего».🙂 Я четко следую ему, хотя сам скорее конфуцианец.😀

  5. Mike
    11/11/2013 в 22:03

    А ты сам пробовал подключиться к mr3020 после его настройки своим кодом?Работает?Я не могу подключиться к нему по wifi? В чем может быть дело?

    • YS
      13/11/2013 в 01:02

      Естесственно. После шага 2 все остальное я делал через WiFi. Более того, сия железка сейчас успешно работает, доступ через WiFi.

      Адреса правильно настроены? Роутер не имеет ничего против статических адресов (иногда бывает нужно специально выделить кусок адресного пространства под статику).

    • YS
      13/11/2013 в 01:11

      Да, у меня там есть строчки «настройка физического Wi-Fi устройства. Тут ничего менять
      не надо.»

      На самом деле — надо.🙂 Вы дочитали комментарии до конца?🙂

  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s