Содержание
Наконец, нашелся человек, который смог портировать прошивку OpenWRT на этот роутер (https://code.google.com/p/openwrt-on-dir-320-b1/). Без OpenWRT данный роутер лично для меня неинтересен и провалялся в шкафу долгое время в ожидании нормальной прошивки.
OpenWRT является сторонней, но универсальной и более продвинутой прошивкой, по сравнению со многими другими, поставляемыми производителем по умолчанию. Если сравнивать ее с прошивкой от D-Link, то возможностей у ней как минимум раза в два больше, а безопасность и стабильность зачастую выше. Если Вы еще не пробовали ее, то рекомендую попробовать. Стоит только перечислить функционал, который появится при переходе от прошивки D-Link к OpenWRT: SSH доступ, подключение флеш карт и жестких дисков большого объема с практически любыми файловыми системами, лучшая поддержка модемов EDGE3G4G, и конечно возможность устанавливать дополнительные пакеты прямо во внутреннюю флеш память, что позволяет расширить функционал настолько, насколько хватит ресурсов этого устройства. Роутер с OpenWRT успешно раздает интернет даже с подключенного по USB мобильного телефона.
К слову о ресурсах, их у роутера DIR320/NRU не так много (8MB Flash, 32MB RAM, 300MHZ MIPS CPU). Однако, для стандартного набора функций «торрент качок + wifi шаринг» этого достаточно. Так как ревизия B1 собрана совершенно на другом чипсете RT5350 (общим со старой моделью DIR320 можно найти только корпус), энергопотребление и нагрев этого роутера очень небольшие. Роутер не рассчитан на подключение множества девайсов через USB порт. Как правило, он будет глючить при подключении одновременно жесткого диска и 3G модема через пассивный USB хаб без внешнего питания.
Схемотехнические доработки
Фотография платы роутера представлена ниже. Роутер можно «разогнать» для подключения большего количества USB устройств двумя способами: покупкой USB хаба с внешним питанием или закорачиванием двух резисторовдросселей на печатной плате перемычками из проволоки, как показано на рисунке. Кому как понравится.
USB 3G модемы в режиме EDGE могут создавать помехи, которые будут вызывать глюки других устройств вроде USB HDD или самого роутера, поэтому их желательно подключать через USB удлиннитель и убирать подальше.
Установка OpenWRT
Устанавливается прошивка из специального аварийного режима роутера (как войти и установить, есть на странице http://wiki.openwrt.org/toh/d-link/dir-320_revb1). По-русски: выключаем роутер, зажимаем спичкой кнопку Reset и держим. Включаем питание, ждем 10-15 морганий индикатора питания роутера и отпускаем спичку. Роутер запустится в аварийном режиме, в котором отключены блокировки роутера на загрузку сторонних прошивок. Компьютеру присваиваем адрес 192.168.0.2, подключаем к роутеру кабелем в порт LAN. Заходим в браузере на 192.168.0.1, и загружаем прошивку. По указанной выше ссылке имеются прошивки AA и BB — это версии Attitude Adjustment (стабильная) и Barrier Breaker (тестовая), соответственно ставить лучше AA. Есть версии со встроенными mpcs, oscam, если этот софт не нужен, лучше ставить обычную прошивку std.
Начальная настройка и внутреннее устройство прошивки
OpenWRT имеет веб интерфейс для настроки роутера + SSH доступ с терминалом Linux для продвинутых пользователей. Поэтому, прошивка очень похожа на стандартную от производителя, но имеет гораздо больше настроек и возможностей. После перепрошивки роутера, нужно поменять адрес сетевой карты на 192.168.1.2 (к примеру), или установить DHCP клиент на этот интерфейс (получать сетевой адрес автоматически в Windows). Когда роутер загрузится (индикатор питания перестает мигать), можно зайти на страницу управления роутером (веб интерфейс) по адресу 192.168.1.1.
При первом посещении страницы, роутер попросит Вас установить пароль администратора, что нужно обязательно сделать. После установки пароля, Вы сможете заходить на роутер с этим паролем по SSH. Можно переключить язык на русский, если Вам так удобнее в меню «System->system->Language and style», правда в данной статье подразумевается работа с английским языком. Это и есть вся начальная настройка, далее настройки делаются в зависимости от того, что мы будем подключать к этому роутеру
OpenWRT разметка диска состоит из двух разделов — squashfs и jffs2. Squashfs представляет по сути сжатый архив, эта ФС работает только в режиме чтения. Если компилировать прошивку самому и заранее включить пакеты в этот раздел, то свободного места будет больше. Так как это дело трудозатратное, лучше скачать готовую прошивку, а софт ставить на второй раздел jffs2, который имеет размер всего лишь 1 с лишним мегабайт. Нужно заранее определиться, какие пакеты будете ставить, т.к. вычистить место удалением старых пакетов непросто — остаются зависимости и прочий мусор.
Имеется возможность сохранения конфигурации. Это понадобится для того, чтобы не переустанавливать все пакеты после апгрейда прошивки и не перенастраивать роутер. Правда, иногда не все настройки могут быть перенесены, желательно не менять прошивку AA на BB, так как они сильно различаются.
Подключение интернета
Роутер поддерживает массу вариантов подкючения интернета:
1) Через кабель в порту Internet (WAN). Используются различные интернет протоколы для доступа в интернет: статический адрес, DHCP клиент, PPTP, PPPoE, L2TP, и прочие, которые и мне не доводилось использовать. Этот вариант настройки зависит от параметров Вашего подключения к провайдеру и инструкция к подключению должна быть предоставлена провайдером в договоре о предоставлении услуг.
2) Беспроводной доступ по UMTS(3G)/GPRS/EDGE//4G. В этом случае нужно подключить модем или телефон через USB в роутер и создать интерфейс для подключения, указав точку доступа, логин и пароль.
В любом случае, нужно создавать новый интерфейс в меню Network->Interfaces. Пример настройки для 3G модема МТС ниже:
Важно! OpenWRT имеет довольно неплохой фаервол, позволяющий повысить безопасность и настроить правила. Не забудьте назначить новому интерфейсу его группу, интернет подключения должны находиться в группе WAN, а локальные интерфейсы (Ethernet и Wifi) в группе LAN, иначе работать не будет.
Подключение клиентских ПК и рекомендации по увеличению безопасности
Подключаются ПК через свитч LAN кабелем или же через WiFi. При подключении кабелем взломать Вас никто не сможет, а вот для WiFi нужно обязательно использовать шифрование. В настоящее время популярна тема про взлом WiFi сетей, так как большинство используемых протоколов шифрования взламываются перебором паролей или через найденные уязвимости. Единственным протоколом, который может защитить от взлома является WPA2+AES, остальные протоколы типа WEP сейчас приравниваются к открытым сетям для тех, кто в теме. Сети с защитой WPA2+AES тоже ломаются с помощью перебора, но для того чтобы взломать сложный пароль из 6 символов (это минимальный размер пароля), требуется очень много времени, конечно если пароль не представляет собой словарную фразу типа Elizaveta или 111111. Пароль должен быть как можно длиннее и содержать символы малых, больших букв, цифр и знаков сразу. Такой пароль сломать будет неимоверно трудно обычными средствами.
Есть также протокол WPS, позволяющий подключать клиентские ПК к защищенным сетям автоматически. Этот протокол ломается за 1-2 дня с помощью перебора, если не предусмотрено мер по сдерживанию атак по перебору. Заметим, что WPS включен по-умолчанию на прошивках от производителей, поэтому такой роутер взломать не составит труда с помощью программы Reaver. Конечно, со временем производители стали вводить такие меры, как максимальное число попыток или задержку между подключениями. Лучше не использовать WPS вообще.
Шаринг файлов (сетевой диск) Для подключения к роутеру наиболее стабильно работающей файловой системой является ext3. Прочие ФС могут быть более требовательны к ресурсам и будут вызывать проблемы при интенсивной работе вроде зависания роутера с последующей перезагрузкой.
В качестве протокола для передачи файлов можно выбрать Samba, NFS или обычный FTP. Samba является лучшим вариантом в данном случае, ведь с ней могут работать обе операционные системы Windows и Linux, а роутер с ней хорошо справляется. NFS подойдет типичным линуксоидам, а FTP позволит сделать хранилище доступным. В линуксе FTP можно примонтировать без проблем как сетевой диск.
Необходимые пакеты: samba36-server, luci-app-samba.
Как настроить: 1.) Сервер: после установки пакетов и перезагрузки заходим в Web интерфейсе на страницу System/Mount Points. Там находим точку монтирования жесткого диска для шары, обычно она будет по пути /mnt/sdb1. Проверить содержимое диска можно, выполнив команду ls -l /mnt/sdb1 через SSH. На странице Services/Network Shares добавляем эту точку монтирования: В качестве владельца и группы файлов удобно использовать nobody/nogroup, т.к. информация о владельце всеравно будет утеряна на клиентских машинах под гостевым доступом.
1 |
192.168.1.1:/remote /mnt/remote cifs guest,rw,uid=user,gid=group,cache=none 0 0 |
192.168.1.1:/remote /mnt/remote cifs guest,rw,uid=user,gid=group,cache=none 0 0
Вместо user ставим своего пользователя, выполняем mount -a. Чтобы удаленная ФС стала доступна сразу нескольким локальным пользователям, другого пользователя можно добавить в группу (adduser user group). В Windows шара появится в сетевом окружении автоматически.
Торрент качалка Нужно использовать клиент Transmission, т.к. пока ему нет альтернатив.
Необходимые пакеты: transmission-daemon, transmission-remote, luci-app-transmission.
Как настроить: после установки и перезагрузки заходим на страницу Services/Transmission и настраиваем торрент сервер. Для разрешения удаленного доступа, нужно настроить доступ по RPC:
На клиентской машине с Linux (Debian) следует установить пакет «transgui»:
Что еще не забыть сделать Создайте на внешнем диске swap файл, и добавьте в автозагрузку роутера:
1 2 |
:~$ swapon /mnt/sdb1/swapfile :~$ wifi |
:~$ swapon /mnt/sdb1/swapfile :~$ wifi
Первая строчка активирует своп файл, вторая поднимает Wifi, если он автоматически не включается после перезагрузки. Когда настраиваете новые сервисы, не забудьте разрешить их на странице System/Startup.
Этот пост был написан примерно год назад и вообще для вражеского сайта и не совсем соответствует тематике ЕЕ. Но, думаю, может быть интересен. На вражеском сайте пост стал недоступен после того, как я с гневом выпилил оттуда свой аккаунт после очередного произвола НЛО. Так что пускай тут полежит, в моём персональном блоге. 🙂 Не секрет, что стоимость роутера значительно зависит от возможностей встроенного программного обеспечения. Так что, покупая недорогое устройство, многие пользователи не ждут от родной прошивки ничего хорошего и устанавливают альтернативную прошивку. Но, как правило, на этом всё и заканчивается. Пользователь изучает встроенный веб-интерфейс и радуется новым возможностям поумневшего устройства. Однако, прошивка роутера — полноценная операционная система на базе Linux, позволяющая воплотить многие задумки, выходящие далеко за рамки привычной функциональности роутера. В этом посте я хочу поделиться своим опытом по созданию сервера на основе роутера D-Link DIR-320. На роутере были подняты Веб-сервер, FTP, настроена видеотрансляция. Хотя статья и предполагает использование DIR-320, для другого роутера процесс настройки будет отличаться незначительно.
Аппаратное обеспечение
Я использовал роутер DIR-320. Данный девайсик имеет MIPS32-микроконтроллер Broadcom BCM5354 с тактовой частотой 240 МГц, оперативную память объёмом 32 МБ, энергонезависимую память объёмом 4 МБ. Сетевые интерфейсы, 2.4 ГГц RF-модуль, USB-контроллер интегрированы в микроконтроллер. Ещё в устройстве установлен 100-мегабитный свитч на 4 порта. Кстати, микроконтроллер достаточно сильно грелся, но после того, как на него был посажен на термопасту небольшой медный радиатор, температура снизилась до нормальных 40-50 градусов. Кроме того, на плате не был установлен экран на высокочастотном модуле, хотя и была предусмотрена площадка для его пайки. Впрочем, эти небольшие недостатки конструкции компенсируются сравнительно низкой ценой устройства, хорошим потенциалом для моддинга, поддержкой альтернативных прошивок, лёгкостью восстановления стандартной прошивки после неудачных экспериментов. Кроме роутера был использован 4-портовый USB-хаб Manhattan, UVC-камера A4-Tech PK-750MJ на китайской микросхеме VC0332, USB-флешка Kingston на 2 ГБ, пара патч-кордов по 1,5 м. Питание осуществляется от стандартного блока питания на 2 Ампера из комплекта роутера. Запаса мощности вполне хватает для питания дополнительных устройств. При подключении более серьёзных потребителей (например, HDD) желательно установить блок питания по приличней, Meanwell’овский юнит например.
Выбор прошивки
Первой прошивкой, на которую я обратил внимание, была DD-WRT. Эта прошивка порадовала качеством, стабильностью и обширным набором дополнительных пакетов — Optware. DD-WRT поддерживает множество устройств, легко устанавливается, имеет удобный веб-интерфейс, множество возможностей доступно сразу после заливки прошивки в роутер. Однако DD-WRT основана на старом ядре 2.4, что накладывает серьёзные ограничения. Например, ядро 2.4 не поддерживает модуль uvcvideo, который требовался мне для подключения камеры. Погуглив, я узнал о прошивке OpenWrt. Последний релиз OpenWrt 10.03 под кодовым именем Backfire, вышедший 8 апреля 2010 г, поддерживает ядро 2.6.32. Для этой прошивки создан набор дополнительных пакетов — X-Wrt, в котором можно найти очень много полезного портированного софта и админку WebIf. Главная особенность OpenWrt — перезаписываемая файловая система, которая монтируется поверх стандартной файловой системы, что позволяет устанавливать пакеты в роутер и выполнять конфигурирование привычным редактированием файлов. Возможно монтирование как части энергонезависимой памяти роутера, незанятой прошивкой (с использованием файловой системы JFFS2), так и внешнего носителя. Для установки пакетов используется менеджер opkg. OpenWrt вместе с дополнительными пакетами распространяется в исходниках.
Сборка прошивки
Нам понадобится любая операционная система на основе Linux. Я использовал Arch Linux. Для получения исходников, нужно установить subversion: Скачиваем Buildroot OpenWrt: Скачиваем и устанавливаем дополнительные пакеты и патчи: Проверяем наличие всех нужных для сборки пакетов и инициализируем конфигурацию прошивки: Конфигурируем прошивку: В процессе конфигурирования, нужно выбрать систему, пакеты, и настроить будущую прошивку. В принципе, базовая конфигурация прошивки вполне работоспособна, нам нужно просто доконфигурировать прошивку по вкусу. Выбираем систему: Выбирать пакеты можно как для установки в прошивку, так и просто для сборки. Пакеты, собранные без установки образуют наш мини-репозиторий, из которого их можно будет устанавливать уже после заливки прошивки в роутер. Памяти в DIR-320 всего 4 МБ, причём обязательно должно остаться немного свободного места для использования JFFS2. Так что будем устанавливать минимально необходимый набор пакетов, а остальное соберём для последующей установки на внешний носитель. Чтобы выбрать пакет для установки в прошивку, нужно нажать Y. Я добавил в прошивку пакеты, требуемые для монтирования флешки: Также, добавил веб-админку. Без админки не удастся установить пароль для входа по ssh: Затем, выбираем пакеты для сборки без установки. Не стоит выбирать много лишних пакетов, чтобы время сборки не увеличивалось до неразумных пределов. Чтобы выбрать пакет для сборки без установки, нужно нажать M. Многие пакеты можно установить и из основного репозитория, однако нужные модули ядра стоит собрать, т.к. в репозитории могут быть несовместимые версии. Я выбрал модули ядра, необходимые для подключения UVC-камеры — kmod-video-core и kmod-video-uvc. Также можно настроить некоторые параметры прошивки, например сетевой адрес по умолчанию. Я установил адрес 192.168.0.1 (адрес роутера по умолчанию — 192.168.1.1): Image Configuration -> LAN IP Address -> 192.168.0.1 При необходимости, можно сконфигурировать ядро. Я оставил всё по умолчанию. Собираем прошивку: В процессе сборки прошивки также будут скачиваться и собираться необходимые инструменты для кросс-компиляции, скачиваться исходники ядра, пакетов и т.д. Сборка займёт от 30 минут до нескольких часов, в зависимости от производительности сети и компьютера. После завершения сборки, в папке bin будут находиться созданные образы прошивки в различном формате и собранные пакеты. Нам понадобится образ прошивки в формате squashfs — openwrt-brcm47xx-squashfs.trx.
Заливка прошивки
Для заливки прошивки понадобится TFTP-клиент (неважно, под Linux или Windows), я использовал GUI’шную утилитку под Windows, которую можно найти на сайте DD-WRT. Нужно подключить PC к LAN-порту роутера, выставить на сетевом интерфейсе PC статический IP 192.168.0.10 и маску подсети 255.255.255.0. В TFTP-клиенте выбрать файл прошивки и выставить IP сервера 192.168.0.1. Включить роутер и дождаться линка, затем отправить прошивку в роутер. Загрузчик ждёт прошивку в течении пары секунд, так что, возможно, понадобится несколько попыток, также, при необходимости, стоит сразу разобраться с фаерволом, чтобы отправить прошивку без лишней задержки. После того, как прошивка будет отправлена на роутер, нужно подождать пару минут, пока загрузчик не завершит внутренний цикл прошивки и не включится диагностический светодиод. Перед заливкой новой прошивки стоит запастись оригинальной прошивкой — если заливка пройдёт неудачно, можно будет вернуть оригинальную прошивку через консоль восстановления. Для этого нужно включить роутер, удерживая Reset, затем зайти браузером на 192.168.0.1. После завершения прошивки, настраиваем сетевой интерфейс компа на получения адреса с помощью DHCP, перезагружаем роутер. OpenWrt загружается несколько дольше оригинальной прошивки, причём диагностический светодиод светится во время загрузки и гаснет при завершении. Если всё прошло успешно, заходим браузером на роутер. На этом этапе не обязательно настраивать роутер — после подключения внешнего накопителя, настройки будут храниться на нём и придётся заново настраивать. Достаточно лишь установить пароль.
Подготовка накопителя
Накопитель нужно разбить на разделы fdisk’ом и отформатировать. Я создал 3 раздела — под систему, под домашние директории и под своп. Не забудь заменить /dev/sdb на имя съёмного накопителя в своей системе: Форматируем:
Настройка прошивки для загрузки с внешнего накопителя
Заходим на роутер SSH-клиентом, используя логин root и пароль, установленный через веб-админку. Редактируем файл /etc/config/fstab. Редактируем одну секцию «mount» для монтирования раздела накопителя поверх основной файловой системы. Для монтирования других разделов, будет использоваться файл fstab, хранящийся на внешнем накопителе: Перезагружаем роутер, заходим в веб-админку. Если всё прошло успешно, админка должна снова попросить установить пароль — устройство успешно смонтировалось и настройки теперь хранятся на нём.
Настройка прошивки
Заходим на роутер SSH-клиентом, создаём точку монтирования для домашних директорий: При желании установить собранные вместе с прошивкой пакеты, расшариваем их (папку bin Buildroot’а) FTP-сервером, затем прописываем наш мини-репозиторий в файле /etc/opkg.conf, добавив строку: Обновляем список пакетов: Если при обновлении будут получены списки пакетов из основного репозитория, их можно удалить: Устанавливаем нужные пакеты: Основное конфигурирование удобно выполнять через веб-админку. Устанавливаем имя хоста, часовой пояс, добавляем точки монтирования, настраиваем сетевые интерфейсы и т.д. Я смонтировал раздел для домашних директорий с опциями async и noatime, чтобы продлить жизнь флешке. Перезагружаем роутер и проверяем результат:
Устанавливаем FTP-сервер
Создадим группу админов сервера: Создадим пользователя ftp для анонимного входа, добавим его в группу nogroup (65534), и пользователя ftpadmin для администрирования файлов, доступных по FTP. Зададим пароль для пользователя ftpadmin Установим pure-ftpd — быстрый и лёгкий FTP-сервер Настройки сервера находятся в файле /etc/config/pure-ftpd. Разрешим анонимный вход и выберем отдельный лог отредактировав следующие строки: Также удалим опцию peruserlmits, чтобы убрать ограничения на количество входов пользователей. Запустим сервер: Зайдём в веб-админку на вкладку Services и отметим pure-ftpd для автоматического запуска. Чтобы сервер был доступен из интернета, нужно зайти на вкладку Firewall и открыть 21 порт.
Устанавливаем веб-сервер
Создадим домашнюю директорию для файлов и пользователя, который будет владеть этой директорией: Зададим пароль для пользователя wwwadmin: Установим веб-сервер lighttpd с нужными плагинами: Установим PHP: Сконфигурируем lighttpd. Настройки хранятся в файле /etc/lighttpd/lighttpd.conf. Подключим нужные нам плагины: Установим директорию для документов: Зададим имена документов по-умолчанию: Укажем CGI-обработчик для PHP: Желательно указать UID и GID для сервера, чтобы он не работал с правами суперпользователя: Настроим PHP, отредактировав файл /etc/php.ini. Подключим нужные модули, раскоментировав соответствующие строки: Изменим параметр doc_root на пустую строку, иначе интерпретатор будет искать скрипты не в том месте: Чтобы сервер заработал, нужно сначала перевесить веб-админку роутера с 80 порта на какой-нибудь другой порт. Запустим сервер: Создадим в /home/srv/www файл test.php с таким содержимым: Откроем 192.168.0.1/test.php. Если всё прошло удачно, увидим таблицу с настройками PHP: Перейдём на вкладку Services веб-админки и разрешим автоматический запуск lighttpd. На вкладке Firewall откроем 80 порт чтобы сервер был виден из интернета.
Настраиваем видеотрансляцию
Для начала, нужно установить нужные для камеры модули и убедиться, что камера успешно подхвачена системой: Для видеотрансляции будем использовать пакет MJPEG-Streamer. Это довольно тяжелый пакет, но его можно немного твикнуть. Вернёмся к Buildroot’у. Получим исходники пакета: Поправим код для сжатия в JPEG. Путь может немного отличаться для разных версий пакета и библиотек: Найдём в коде строку инициализации параметров сжатия: После этой строки можно переопределить некоторые параметры сжатия JPEG. Выберем быстрый целочисленный метод для DCT: Сохраним изменения, скомпилируем пакет, обновим индекс пакетов: Подключимся к роутеру по SSH. Включим наш репозиторий в /etc/opkg.conf. Установим MJPEG-Streamer: Настройки пакета находятся в файле /etc/config/mjpg-streamer. Отредактируем нужные строки: Если камера отдаёт поток в формате MJPG, на этом настройка закончена. Моя камера отдаёт несжатый поток в формате YUV, для неё нужно включить JPEG-сжатие. Отредактируем файл /etc/init.d/mjpg-streamer. Найдём командную строку запуска демона: Добавим параметр —yuv для плагина input_uvc: Стартуем демон: Если всё прошло нормально, должен включиться светодиод на камере. Для проверки работы сервера зайдём на 192.168.0.1:310/?action=stream. Не все браузеры нормально поддерживают MJPG-поток. Статическая картинка доступна по адресу 192.168.0.1:310/?action=snapshot. Для отображения видео на веб-странице можно использовать встроенную поддержку браузера (имеется в Firefox, Chrome, частично в Opera), Javascript или Java-апплет. Страничка с примерами есть дистрибутиве MJPEG-Streamer.
Индикация посетителей
Мне хотелось сделать какую-нибудь индикацию приходящих посетителей. Для этого я взял яркий RGB светодиод, подключил его к USB через самодельный переходник на микроконтроллере. Программу для управления написал и отладил в Visual C, затем портировал и собрал под роутер с помощью Buildroot’а OpenWrt. Приходящие посетители, активность веб-сервера и FTP и другие события обозначаются вспышками разных цветов. Впрочем, эта система заслуживает отдельного поста.
Регистрация домена
Я зарегистировал домен для своего проекта в зоне RU у 2domains.ru меньше чем за 100 рублей. Регистратор мне понравился, на верификацию ушло всего 4 часа.
P.S. На всякий случай
Я новичок в мире Linux, к тому же, в первый раз пишу такой большой пост, так что могут быть ошибки. Если так, то они сделаны не из вредности. Вскрытие и перепрошивка роутера лишают тебя гарантии на девайс. Возможны и другие проблемы. Впрочем новые роутеры (например, DIR-320) сложно убить перепрошивкой — загрузчик зашит в энергонезависимую память микроконтроллера (в отличии, например, от RedBoot, использовавшегося в более ранних моделях), так что в любой момент можно сделать откат на оригинальную прошивку. Но в любом случае, ты ковыряешь роутер на свой страх и риск. Удачи!
Когда-то давно я собирался сделать из упомянутого в названии роутера интернет-радио для мамы на кухню, и даже почти сделал его, однако проект заглох по причине отсутствия интереса к нему со стороны того, кому предназначался конечный продукт. Тем не менее, я наверняка сделаю на этом роутере еще что-то, тем более что сейчас у меня появился второй экземпляр. Надо сказать, что это событие и подвигло меня на написание этой статьи — прежде всего как напоминалки себе на будущее, ибо в процессе конфигурирования выяснилось, что с момента запуска первого роутера я многое забыл и мне снова пришлось лазить по 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) и выбираем штатную опцию обновления:
Указываем скачанный файл, жмем обновить, немного ждем и…
…а-а-а!!1111 Все сломалось, на 192.168.1.1 (адрес роутера по-умолчанию после установки OpenWRT) та же картина!
На самом деле ничего не сломалось и все хорошо. Просто в базовой поставке OpenWRT нет предустановленного WEB-интерфейса. Да и кому он нужен, учитывая, что мы собираемся с этим роутером делать дальше? Разве только слабым духом и девушкам. Впрочем, думаю, слабых духом среди нас нет; девушек — тем более, они уже сдали все экзамены и потому электроникой (и уж тем более мной и моим блогом) не интересуются до следующей сессии, потому продолжим так, как есть.
Свежеустановленная OpenWRT сразу после первой загрузки ждет, пока к ней подключатся через telnet и установят пароль root’а (основного пользователя, имеющего неограниченные права; хоть системный раздел затереть — никто не остановит). Ага-ага, тру-Ъ-кул-рил-олдскул линуксоиды в этом месте могут ужаснуться — мы будем постоянно сидеть под root’ом. В основном потому, что 90% нашего времени будет занимать настройка разных конфигов, что гораздо приятнее делать не приписывая каждый раз «sudo«; кроме того, я исхожу из мысли, что мы хорошо знаем, что делаем. А вообще, если устройство превратится в кирпич, мы всегда можем это поправить.
Итак, прежде всего нам надо установить пароль root-а. Заходим по telnet — если кто не знает, прямо в консоли Windows, той, которая cmd, пишем telnet 192.168.1.1, подключаемся
и попадаем в консоль Linux.
Здесь командой passwd устанавливаем новый пароль. При вводе пароля он отображаться не будет, даже звездочками. Пугаться не надо, все ОК. Просто в Linux так принято.
После этого telnet отключится и все дальнейшее общение роутер будет ожидать через SSH. Для SSH я предпочитаю использовать PuTTY. Подключаемся к 192.168.1.1, у нас спрашивают логин, пароль и пускают в консоль.
Бинго! Теперь на нашей карманной железке крутится полноценная система.
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. Как его развивать дальше — отдельная история… Может быть, я об этом еще напишу.
Используемые источники:
- http://v1ron.ru/2013/06/stavim-openwrt-na-dir320nru/
- http://we.easyelectronics.ru/lifelover/prevraschaem-nedorogoy-router-v-domashniy-server.html
- https://embedderslife.wordpress.com/2013/08/11/tl-mr3020-install-openwrt/