Вдохновленный обзором Дмитрия Бачило, решил проделать аналогичное у себя дома.
Дома, до недавнего времени у меня работал дешевенький D-Link DIR-300 N150 (аппаратная ревизия D1), и, надо сказать, это та ещё дрянь. Во-первых, нормально он заработал только после заливки обновленной (v2.0.17) прошивки с официального сайта (при покупке на нем обреталась v1.0.4). Функционал этого девайса вполне себе нормальный для домашнего использования, но все же не хватало некоторых необходимых мне фич, как-то, например, клиент DDNS. Обычно я использую No-IP, но D-Link по дефолту предоставляет обслуживание только dyndns.com (который стал платным!), собственный кривой dlinkddns.com, и ещё некий мутный, и видимо тоже платный TZO.
Попытки прошить DIR-300 прошивкой от OpenWrt успехом не увенчались, из-за того что в моем устройстве в качестве процессора установлен Realtek RTL8196E, и хоть я и нашел способ скачать исходники для него (в официальных ветках их нет), но собрать не удалось. Может быть я вернусь к этому вопросу позже а пока...
Пока душа жаждала экспериментов. Придушив жабу я пошел в магазин и купил TP-Link TL-WR1043ND. В наших краях стоит он не много не мало 2500 руб., но поверьте, сабж стоит этих денег. Но, обо всем по порядку.
1. Комплект поставки
Собственно сам девайс выглядит так
![]() | |
Вид сверху |
![]() | |
Вид спереди: на срезанной передней кромке - светодиодные индикаторы, которые к сожалению не получились на фото :( |
![]() |
Вид сзади: интервейсы и органы управления. |
Кроме самого устройства в комплекте идут три штыревые антенны для Wi-Fi адаптера,
![]() |
Штыревые антены для Wi-Fi - подари соседям радость доступа в Интернет :) |
блок питания
![]() |
Блок питания |
и коротенький LAN-кабель
![]() |
Кабель LAN, идущий в комплекте |
В общем, стильный и симпатичный девайс. К недостаткам дизайна можно отнести только разве глянцевый корпус - залапывается отпечатками пальцев и пылится. А при протирке царапается. Но для нас это вопрос второстепенный, перейдем к делу.
2. Получение прошивки и подготовка образа
Идем на официальный сайт OpenWrt. Первое, что нас должно заинтересовать - поддерживается ли наше устройство. Это можно выяснить, посмотрев список поддерживаемых устройств, это первая ссылка на главной странице. В списке справа, смотрим интересующую информацию.
Что касается моего девайса, то мне в руки попал 1043ND версии 2.1, прошивки для которого в стабильной ветке нет. Однако по данному устройству имеется весьма подробное описание (вплоть до распиновки печатной платы) где сказано, что прошивку именно для версии 2.x можно взять в ветке trunk, вот тут.
Можно скачать готовую сборку, а лучше, и это я поясню ниже почему, взять генератор образа, так называемый ImageBuilder.
Я скачал готовую сборку, ибо не был уверен, что смогу грамотно собрать сам. Девайс для меня не дешевый, поэтому хотелось получить его в работоспособном виде, а уж потом доставить то, чего будет не хватать.
В итоге, прошив готовый образ, я получил работоспособное устройство, но без web-интерфейса. Доступен оказался только telnet-канал, через который я разруливал свои недоработки. Пришлось настраивать подключение к сети (у меня pppoe с вводом пароля) из командной строки. Для профи это не создаст проблем, я же в этом деле новичок, поэтому пришлось туговато. Выкрутился я подключив роутер к работающему в сети роутеру DIR-300 - просто подключил WAN-разъем поциента в свободный порт на D-Link'ке. По умолчанию в стандартной прошивке настроено подключение к сети с использованием DHCP, так что выход в сеть я получил, доставив все мне необходимое с помощью opkg - менеджера пакетов, доступного в OpenWrt.
В данном обзоре приведу Ъ-способ, связанный с самостоятельной сборкой прошивки, включающей сразу всё необходимое.
Итак, у нас эсть скачанный ImageBuilder. Распаковываем его и видим список всякой всячины.
![]() |
Содержимое архива генератора прошивок (на момент после сборки - в начале некоторые каталоги будут отсутствовать) |
Находясь в этом каталоге, даем команду
$ make info
в выхлопе которой нас интересует вот эта часть
TLWR1043:
TP-LINK TL-WR1043N/ND
Packages: kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev
TP-LINK TL-WR1043N/ND
Packages: kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev
Это - профиль по умолчанию, доступный для нашего устройства. Здесь указана модель роутера (TP-LINK TL-WR1043N/ND) а так же список пакетов, включенных в образ. Данные пакеты - модули ядра (приставка kmod - Kernel Module говорит сама за себя) драйверы USB, что хорошо, но для нашей цели недостаточно. Нам потребуется как минимум следующее
- uhttpd - миниатюрный web-сервер, на котором крутится web-интерфейс
- luci - сам web-интерфейс, стандартный для OpenWrt, построенный на Lua-скриптах.
- luci-i18n-russian - пакет русификации, ставим сразу.
- kmod-usb-storage - модуль ядра для поддержки флеш-накопителей.
- kmod-fs-ext4 - модуль ядра для поддержки файловой системы ext4.
- block-mount - утилиты для монтирования блочных устройств.
Последние три пакеты нужны, чтобы организовать работу с флешкой, используя её в качестве основного накопителя для роутера. Встроенная флеш-память девайса имеет объем в 8 Мб, которых маловато для реализации разнообразных хитрых штуковин :).
Чтобы собрать прошивку именно в такой конфигурации, выполняем команду
$ make image PROFILE="TLWR1043" PACKAGES="uhttpd luci luci-i18n-russian kmod-usb-storage kmod-fs-ext4 block-mount" -j8
где указываем выбранный профиль и список необходимых нам пакетов. Ключик -j8 означает что собираю я в восемь потоков - у меня Intel Core i7, поэтому грех не воспользоваться его четырьмя ядрами с гипертрейдингом - это существенно ускорит процесс. В вашем случае нужно указать число потоков, поддерживаемых установленным у вас процессором. Ждем пока прошивка соберется...
На выходе, в директории с ImageBuilder'ом, получаем каталог bin/ar71xx с набором файлов
![]() | ||
Результат сборки прошивки. |
Нас интересует файл openwrt-ar71xx-generic-tl-wr1043nd-v2-squashfs-factory.bin, соответствующий прошивке под имеющийся девайс (обращаем внимание на слова factory и v2 - прошивка именно для версии 2.x!!!)
Все готово, теперь можно приступить к самой прошивке
3. Прошивка через "родной" web-интерфейс
ВНИМАНИЕ: Всё нижеследующее Вы выполняете на свой страх и риск! Даже получение работоспособного устройства лишает Вас гарантии производителя! Автор не несет ответственности за порчу оборудования, вызванную действиями, описанными в данной статье!
Итак, приступим. Подключаем девайс к питающей сети через блок питания, соединяем любой LAN-порт устройства с сетевой картой компьютера, используя идущий в комплекте кабель.
Открываем браузер и заходим на http://192.168.0.1 - стандартный адрес веб-интерфейса TP-Link роутеров. Вводим логин - admin и пароль - admin, и видим такую картинку
![]() | ||
Стандартный веб-интерфейс TP-Link |
Приведенный скрин - это эмулятор TP-Link, любезно предоставленный на сайте производителя. Мой стандартный интерфейс умер быстро, я даже не посмотрел его как следует, хотя там достаточно много "вкусного". Так что пояснять процесс установки кастомной прошивки я буду используя эмулятор.
Идем в раздел System Tools, выбираем там Firmware Upgrade, и имеет следующую станичку
![]() |
Диалог обновления ПО. |
Жмем "Обзор" выбираем наш файлик с прошивкой (будьте внимательны на этом этапе!). Прошу обратить внимание на несоответствие - в эмуляторе указана версия железа v1, мы же прошиваем v2.1, так что пусть этот небольшой ляп вас не смущает - у вас всё будет верно, версии должны соответствовать.
![]() |
Выбор собранной нами прошивки. |
и жмем Upgrade, соглашаемся в ответе на вопрос "а действительно ли мы хотим..." и ждем пока закончится процесс, иллюстрируемый на экране подставными (как сказал Дмитрий Бачило) прогресс-барами.
После окончания прошивки страница попытается обновится, но окажется недоступна - теперь веб интерфейс будет доступен нам по адресу http://192.168.1.1, который надо набрать в адресной строке. Набираем, заходим и видим
![]() | |
Веб-интерфес LuCI. |
По умолчанию не задан пароль суперпользователя root, поэтому первым делом зададим его. Идем в меню "Система->Управление"
![]() | |
Создание пароля администратора. |
и задаем пароль. После этого становится доступен ssh-интерфейс, а при заходе на веб-интерфес будет выскакивать экран авторизации
![]() | |
Экран авторизации LuCI. |
Теперь можно настроить подключение к Интернет, в соответствии с учетными данными и инструкцией провайдера (в моем случае это pppoe с авторизацией) и в принципе - можно работать! Настраивать Wi-Fi и всё остальное что требуется вам для счастья ).
Из приятного стоит отметить, что имеющийся в OpenWrt name-сервер без проблем дает возможность установить статические ip для ваших компьютеров, и без бубнов с /etc/hosts получить возможность использовать разумные имена хостов, чего от оригинальных прошивок того же D-Link мне добиться не удалось. Вообще от богатства функционала тут с непривычки рябит в глазах.
Однако, оставлю читателя изучать веб-интерфейс самостоятельно, и перейду к следующему вопросу, который хотел бы рассмотреть
4. Настройка флешки в качестве системного диска
Располагаемых 8 мегабайт встроенной памяти может не хватить, если вы захотите устанавливать на роутер дополнительное ПО. Поэтому, попробуем расширить доступное дисковое пространство.
![]() |
Флешка для эксперимента - Sandisk 16 Gb |
Дико извиняюсь за качество фото - снимаю телефоном с порядком "ушатанной" камерой, но думаю понятно, что (по опыту Дмитрия) выбран миниатюрный форм-фактор - так сабж прекрасно интегрируется с роутером.
![]() |
Накопитель на рабочем месте - выглядит как "родной". |
Если же отбросить эстетику - подойдет любая флешка.
Заходим в shell на роутере
$ ssh root@192.168.1.1
Поулчаем приглашение такого оригинального вида, с рецептурой ацкого коктейля, которая отличается в каждой из веток исходников прошивки).
BusyBox v1.19.4 (2014-01-30 20:48:26 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
BARRIER BREAKER (Bleeding Edge, r39424)
-----------------------------------------------------
* 1/2 oz Galliano Pour all ingredients into
* 4 oz cold Coffee an irish coffee mug filled
* 1 1/2 oz Dark Rum with crushed ice. Stir.
* 2 tsp. Creme de Cacao
-----------------------------------------------------
root@OpenWrt:~#
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
BARRIER BREAKER (Bleeding Edge, r39424)
-----------------------------------------------------
* 1/2 oz Galliano Pour all ingredients into
* 4 oz cold Coffee an irish coffee mug filled
* 1 1/2 oz Dark Rum with crushed ice. Stir.
* 2 tsp. Creme de Cacao
-----------------------------------------------------
root@OpenWrt:~#
Для начала кое-что доустановим, чтобы сделать нашу жизнь более комфортной. Обновим список доступного ПО из репозитария OpenWrt
# opkg update
После чего дадим команду
# opkg install nano mc
установив редактор nano (ну не люблю я дефолтный vi, ну что поделать...) и наш любимый Midnight Commander (да-да, командер на роутере), после чего мы получаем довольно дружественный интерфейс
![]() |
Согласитесь - так намного лучше! |
Почва на роутере готова, теперь готовим её на флешке. Для начала надо убить на ней стандартный раздел с FAT32 и создать необходимые Linux-разделы с помощью доступных интсрументов (gparted, cfdisk, fdisk). Подробно об этом рассказывал Дмитрий Бачило, я же ограничусь описанием своей схемы разметки
sda1 - 4 Гб - корневой раздел / (ext4)
sda2 - 128 Мб - раздел подкачки (swap)
sda3 - все остальное место, чуть менее 12 Гб - /home (ext4)
Подготовленную флешку вставляем в роутер, и прежде всего убеждаемся, что флешка видится системой как надо
# ls /dev/sd*
должно показать
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
что говорит о том, что система нашла флешку и её разделы. Теперь приступим к настройке. Её можно выполнить через веб-интерфейс, но я предпочел настроить монтирование через /etc/config/fstab, руководствуясь мануалом
Открываем указанный конфиг для редактирования
# nano /etc/config/fstab
удаляем всё что там есть (осторожно!!!) и набиваем следующее
# Общие параметры монтирования
config global
option anon_swap '0'
option anon_mount '0'
option auto_swap '1'
option auto_mount '1'
option delay_root '5'
option check_fs '0'
option anon_swap '0'
option anon_mount '0'
option auto_swap '1'
option auto_mount '1'
option delay_root '5'
option check_fs '0'
# Монтирование корневой ФС
config mount
option device '/dev/sda1' # Нода раздела
option enabled '1' # Разрешаем монтирование
option fstype 'ext4' # Тип файловой системы
option is_rootfs '1' # Использовать как корневую ФС
option device '/dev/sda1' # Нода раздела
option enabled '1' # Разрешаем монтирование
option fstype 'ext4' # Тип файловой системы
option is_rootfs '1' # Использовать как корневую ФС
# Монтирование раздела подкачки
config swap
option device '/dev/sda2'
option enabled '1'
config swap
option device '/dev/sda2'
option enabled '1'
# Монтирование домашней директории
config mount
option enabled '1'
option device '/dev/sda3'
option target '/home'
option fstype 'ext4'
Наверное вы обратили внимание, что fstab выглядит несколько непривычно - это используемый в OpenWrt стандарт uci. Сохраняем конфиг.
Теперь необходимо (обязательно!!!) перенести содержимое текущего корня на флешку. Для этого монтируем корневой раздел накопителя
# mkdir /mnt/sda1
# mount /dev/sda1 /mnt/sda1
и переносим корень на неё
#
tar
-C
/overlay
-cvf - . |
tar
-C
/mnt/sda1
-xf -
это необходимо, чтобы все наши настройки оказались на месте, после перезагрузки, которую выполняем после окончания переноса
# reboot
Когда устройство перезагрузится, можно вглянуть что получилось у нас. В веб-интерфейсе идем в "Система -> Точки монтирования" и видим картину
![]() | |
Точки монтирования после настройки. |
Как видим, всё на месте. Теперь у нас есть достаточный объем дискового пространства для экспериментов.
Окончательно собираем роутер, наводим порядок на рабочем месте
![]() |
Перешитый и настроенный TP-Link TL-WR1043ND на месте постоянной прописки. |
5. Расшариваем удаленный доступ
Мне, по роду деятельности, приходится работать удаленно на домашней машине - выполнять трудоемкие вычисления на своей мощной "числодробилке". Поэтому вопрос удаленного доступа стоит как никогда остро.
Таковой доступ у меня был, но захотелось немного более продвинутых вкусностей, например удаленного включения домашних машин. Поэтому встал вопрос о расшаривании роутера из внешней сети. Провайдер выдает мне динамический ip, который я связываю с доменом 3-го уровня на http://noip.com. Как я говорил выше, старый роутер не поддерживал возможности использовать указанный сервис. OpenWrt (да и стандартная прошивка TP-Link, к слову) такую возможность предоставляет.
Итак, прежде всего доустановим некоторые пакеты
# opkg install luci-app-ddns sudo shadow
Поясню:
- luci-app-ddns - плагин для веб-интерфейса - позволяет настраивать DDNS-сервис
- sudo - утилита, для получения прав суперпользователя под обычным аккаунтом
- shadow - пакет системных утилит для администрирования (добавление/удаление пользователей и групп, назначение прав и т.п.)
Первое понятно - настройка DDNS-клиента на роутере. Имея аккаун на noip.com с зарегистрированным там хостом, идем в меню "Сервисы -> Динамический DNS"
![]() |
Настройка DDNS-клиента |
Параметры своего аккаунта по понятным причинам не показываю. Обратите внимание на список доступных сревисов - он гораздо шире, чем в "родной" прошивке.
Теперь наш роутер станет доступен по указанному адресу хоста. Теперь мы должны сделать следующее - запретить вход по ssh-протоколу для пользователя root. Делаем это для защиты от банального брутфорса - при открытом доступе к рут-шеллу злоумышленнеку известно имя пользователя, что несколько облегчает ему задачу. Поэтому ограничимся доступом для обычного юзера, которого надо создать
# useradd -d /home/<имя пользователя> -s /bin/ash -m
обращаем внимание, что шелл по умолчанию - ash, а не bash как в большинстве домашних линуксов. Задаем пароль нашему юзеру
# passwd <имя пользователя>
Теперь запрещаем root-у заходить по ssh. Идем в "Система -> Управление" и снимаем галку
![]() |
Убираем возможность удаленного входа под root-ом |
Администраторский доступ мы можем получисть через su уже после входа в систему (для этого ставили shadow) или можем настроить sudo. Теперь у нас есть возможность для удаленного администрирования всей нашей домашней сети :)
Заключение
Итак, мы превратили наш роутер в настоящую линукс-машину, обеспечив себе неисчерпаемые возможности для разного рода экспериментов и реализации интересных возможностей в домашней сети. Спасибо за внимание и успехов :)
Комментариев нет:
Отправить комментарий