Как прошить роутер linux

Обновлено: 07.07.2024

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

Введение

SOHO-роутеры у большинства обычных пользователей, как правило, ставятся по принципу «настроил и забыл». Основное их предназначение в раздаче интернета для домашней сети, однако в отдельных случаях возникает необходимость в чем-нибудь более экзотическом, к примеру — в файловом сервере. В стандартных прошивках таких возможностей может и не быть. Но, поскольку ПО абсолютного большинства современных роутеров для домашнего использования (исключая, быть может, Huawei, где используется ОС собственной разработки) основано на ядре Linux, а некоторые фирмы в свое время даже открыли часть исходников, не исключено, что для твоего роутера существуют и кастомные прошивки, в одной из которых может найтись столь желанная возможность — как знать? А если даже и не найдется, то при некоторых усилиях ты можешь эту возможность добавить самостоятельно.

WARNING

Будь внимателен! Неправильная прошивка роутера может превратить его в бесполезный кусок железа и пластмассы.

На данный момент наиболее популярными прошивками считаются следующие:

    — пожалуй, самая известная из альтернативных прошивок. Возможности ее включают, например, ФС с функцией записи (как правило, реализуется путем создания раздела jffs2 и использования overlayfs для объединения со squashfs), пакетный менеджер opkg с репозиторием, в котором более 3000 пакетов, способностью использовать внешний накопитель для увеличения свободного пространства в /. При этом основная часть прошивки очень маленькая. Фактически это даже не прошивка, а полноценный дистрибутив для роутеров с соответствующими возможностями. — тоже достаточно популярная прошивка. В отличие от предыдущей, заточена для тех, кто не хочет ковыряться в конфигурационных файлах, устанавливать программы… Разумеется, там есть возможность это сделать, но придется столкнуться с некоторыми затруднениями. предназначена для роутеров на чипе Broadcom. Одно из преимуществ данной прошивки — при обновлении сохраняется старая конфигурация. — совершенно свободная прошивка от FSF. Как водится, отпочковалась от OpenWRT и практически ничем, кроме отсутствия проприетарных драйверов, от последней не отличается. Примечательна тем, что из-за нее FSF немного изменил свои принципы: если до этого одним из условий «свободы» была необходимость иметь возможность компиляции приложения на том же устройстве, на котором оно запускается, то теперь это необязательно.

Разумеется, в списке упомянуты не все прошивки, но их настолько много, что всех и не упомнишь. Дальше я буду рассматривать роутер TP-LINK TL-WDR4300 и прошивку OpenWRT, как наиболее гибкую.

Прошивка TP-LINK TL-WDR4300 из «родного» firmware

Прошивка TP-LINK TL-WDR4300 из «родного» firmware

Установка и начальная конфигурация OpenWRT

Первым делом необходимо прошить роутер. В моем случае в этом не было ничего сложного, главное — выбрать правильный вариант прошивки. Для этого необходимо внимательно смотреть на название — для обновления со стоковой прошивки TP-LINK я использовал файл openwrt-ar71xx-generic-tl-wdr4300-v1-squashfs-factory.bin . В названии закодированы семейство чипсетов (ar71xx), конфигурация ядра (generic), название и версия аппаратной части роутера, тип ФС и для какой именно цели предназначен образ — прошивка с нуля (factory) или обновление существующей OpenWRT (sysupgrade). Ни в коем случае не используй sysupgrade для установки со стоковой прошивки — так ты просто превратишь роутер в кирпич. И вообще, поскольку для каждого роутера все индивидуально, читай внимательно соответствующий сайт.

UCI (United Configuration Interface) представляет собой попытку сделать унифицированные файлы (и средства) конфигурации. Все настройки UCI хранятся в каталоге /etc/config . Для тех служб, которые используют свои файлы конфигурации, скрипты OpenWRT при запуске генерируют их на основе шаблона и файла UCI — так, например, сделано с Samba. Да, возможно, это уменьшает гибкость, зато в большинстве случаев упрощается конфигурирование тех или иных параметров, путем ли редактирования файлов конфигурации (с использованием vi) или же используя утилиту uci.

Вернемся к командной строке. Что делают первые три команды, в общем-то, ясно: первая устанавливает протокол (возможно выбрать статический IP, PPP, PPPoE, L2TP и еще несколько менее используемых вариантов), вторая устанавливает флаг broadcast в пакете dhcp, третья устанавливает MAC-адрес для интерфейса. Четвертая команда устанавливает поле ClientID в пакете dhcp (option 61) равным MAC-адресу. Последние две команды используются для сохранения изменений и перезапуска сети.

После этого (и после обязательной проверки работоспособности) я бы посоветовал поставить веб-интерфейс, так как базовые настройки с ним реально проще рулить. Для OpenWRT таковых существует как минимум две. Поставим LuCI — де-факто стандартный веб-интерфейс:

И ставим пароль root.

Замечу, что после установки пароля ты уже не сможешь использовать Telnet, только SSH. Теперь зайди в веб-интерфейс и настрой необходимые тебе параметры.

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

Веб-интерфейс OpenWRT

Веб-интерфейс OpenWRT

Создание extroot

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

Запиши текущий вывод команды mount — он тебе еще пригодится в дальнейшем.

После этого подготовь и подмонтируй флешку (ее ты можешь отформатировать в ext3 как на настольном Linux, так и в самом OpenWRT) и клонируй на нее текущий оверлей:

Только после этого ты можешь редактировать файл /etc/config/fstab , записывая в него параметры для использования extroot:

После этого перезагрузись. Если тебе необходимо вернуть все обратно, ты находишь в ранее записанном выводе команды mount оригинальное устройство с оверлеем, монтируешь его и ставишь в файле etc/config/fstab на смонтированном старом оверлее option enabled в 0.

Редактирование файла /etc/config/fstab для включения extroot

Редактирование файла /etc/config/fstab для включения extroot

Качаем торренты и настраиваем Samba

Раз уж роутер практически не выключается и места для установки стороннего ПО в нем теперь достаточно, грех не использовать его в качестве загрузчика торрентов. Но сперва нужно настроить файлообмен. Поскольку сеть у меня гетерогенная, выбор пал на Samba.

В задачи статьи не входит детальное описание настройки Samba, а с веб-интерфейсом ты способен разобраться и сам. Несколько замечаний, однако, стоит сделать. Во-первых, на вкладке Edit template вместо «security = user» стоит написать (хотя бы для начала) «security = share», во-вторых — дай гостевой доступ к расшаренным папкам, в-третьих — смени владельца расшариваемого каталога на nobody и, наконец, не забудь запустить саму службу:

Теперь перейдем к настройке торрент-клиента. В качестве его будет выступать transmission — не в последнюю очередь из-за того, что он поддерживает веб-интерфейс. Установка его стандартна:

Рассмотрим наиболее важные опции файла конфигурации /etc/config/transmission :

После этого ставим его в автозапуск и стартуем.

Заходим в веб-интерфейс, по умолчанию находящийся на порту 9091, грузим торрент-файл и наслаждаемся.

ФС, используемые в роутерах

Из-за особенностей (и, как правило, малого объема) флеш-памяти, в основном и применяемой в роутерах, для них не подходят ФС для настольных компьютеров. Поэтому кратко опишу различия двух основных файловых систем, в них используемых.

  • SquashFS — только для чтения. Поддерживает сжатие, что немаловажно для систем с ограниченным объемом флеш-памяти.
  • JFFS2, в отличие от SquashFS, рассчитана на чтение/запись. Также поддерживает сжатие, но в меньшей степени. Журналируемая.

В случае OpenWrt эти две ФС разнесены по разным mtd-разделам и монтируются хитрым образом. Сперва SquashFS монтируется в /rom, а JFFS2 в /overlay. Затем с помощью overlayfs эти две ФС объединяются в одну и при попытке изменения файла в SquashFS изменяет его в JFFS3, обеспечивая таким образом поддержку не только чтения/записи, но и возможность загрузки в безопасном режиме для восстановительных работ.

Краткий обзор DD-WRT

DD-WRT необходимо шить с оригинальной заводской прошивки — возможность прошить из-под OpenWrt не предусмотрена. После прошивки и перезагрузки мы обнаруживаем в браузере требование сменить пароль. Оно, конечно, правильно, но непонятно — зачем скрывать под звездочками еще и имя пользователя. Установили его и сразу автоматически переходим на вкладку Status -> Sys-Info, где видим, что все отключено. Как только мы пытаемся перейти на другую вкладку, у нас спрашивают пароль. Беглый обзор вкладок дал следующую информацию о доступном ПО:

  • Samba и ProFTPD;
  • OpenVPN и PPTP;
  • nstx — позволяет создавать туннель IP over DNS, что позволяет в некоторых случаях использовать роутер как «окно» в интернет, если ты подключаешься через какую-нибудь платную точку доступа, а денежки тебе жаль;
  • несколько вариантов HotSpot-серверов — для того случая, если ты желаешь организовать свой хотспот;
  • SIP-прокси.

Чтобы включить доступ к optware (дополнительному ПО), придется повозиться. Замечу, что в некоторых версиях прошивки есть раздел JFFS2, а в некоторых нет, так что лучше для этой цели использовать флешку. DD-WRT подходит тому, кто хочет быстро получить доступ к отдельным функциям, которые в большинстве роутеров отсутствуют, но не желает заморачиваться с установкой дополнительного ПО. В общем-то, его возможности покрывают процентов 90 пользователей альтернативных прошивок. Те же, у кого потребности слишком специфичны или кто желает получить больший контроль над роутером, вполне могут разобраться и с другими прошивками.

Веб-интерфейс DD-WRT

Веб-интерфейс DD-WRT

Настройка DLNA-сервера

Да, твой роутер может выступать и в этом качестве. Если коротко, DLNA-сервер раздает различный медиаконтент в сети. Многие современные мультимедиаустройства, такие как телевизоры, игровые приставки, музыкальные центры и Blu-ray-плееры, поддерживают этот стандарт. В OpenWRT есть minidlna - легковесный и несложный в настройке DLNA-сервер, который мы сейчас и установим:

Файл конфигурации находится в стандартном для UCI-конфигов месте — /etc/config/minidlna . Разберем его основные параметры:

В принципе, после этого minidlna можно уже запускать, предварительно скопировав медиафайлы в нужные папки.

Однако есть небольшой нюанс. Захотел ты добавить музыку или видео, скопировал — а на плеере она не появилась. Дело здесь в том, что по умолчанию minidlna использует inotify, который по загадочным причинам в нем не работает. Чтобы обновить список, необходимо остановить запущенный демон и произвести ручное сканирование, набрав следующую команду:

Сборка своего собственного образа OpenWRT

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

Собирать мы будем текущую нестабильную версию OpenWRT и материалы (feeds). Скачаем их.

После этого проверим зависимости — мало ли, вдруг какой-нибудь необходимый для сборки пакет не установлен.

Сборка необходимых инструментов

Сборка необходимых инструментов

Если все нормально, можем конфигурировать образ. Для чего вводим

И выбираем, точно так же, как и при конфигурации ядра, нужные тебе вещи. Единственное отличие от «ядерного» menuconfig — звездочка означает, что объект будет встроен в образ, а M — что будет доступен в виде пакета ipk, который позже можно будет установить отдельно. Сильно увлекаться, однако, не советую — помни о том, что места на внутренней флеш-памяти не просто мало, а очень мало.

В основном процесс конфигурирования включает в себя следующие шаги:

  • Выбор конкретной целевой системы и профиля. Их необходимо указывать как можно точнее — если укажешь неправильно, ты рискуешь превратить роутер в кирпич.
  • Выбор пакетов. Здесь действует правило — чем меньше ты встроишь их в образ, тем лучше. Поэтому выбирай только самые необходимые. Я бы посоветовал включить LuCI.
  • Настройки сборки. Тут ты можешь разве что в разделе Global build settings включить/выключить IPv6. В Advanced configuration options стоит лезть, только когда ты четко знаешь, для чего, к примеру, служит та или иная опция GCC, достаточна ли мощность процессора для включения защиты стека и так далее.
  • Выбор модулей ядра. Тут те же самые рекомендации, что и при выборе пакетов. Загляни в секцию USB Support и включи опцию kmod-usb-storage. Остальные включай по желанию.

Выбор опций при сборке кастомной прошивки

Выбор опций при сборке кастомной прошивки

Учти, что если ты потом сделаешь очистку, то конфиг ядра не очистится. Для его очистки набери

После всего этого можешь смело набирать команду

для сборки образа. Это займет длительное время, по истечении которого в каталоге bin/ появятся файлы образа.

Существует несколько путей для того, чтобы залить прошивку. Самый легкий из них — через веб-интерфейс, и описывать его я смысла не вижу. Второй способ — использовать утилиту scp на хостовом компьютере вкупе с mtd на роутере для залития образа и его прошивки. Поскольку сейчас стоит уже OpenWRT, то можно прошивать как factory-, так и sysupgrade-образ. В моем случае команды были такими:

Вторая команда шьет (write) свежескачанную прошивку в раздел, именуемый firmware, и вслед за этим роутер перезагружается (-r). В случае обновления OpenWRT со стабильной версии до текущей я бы советовал не восстанавливать сохраненную конфигурацию, а настроить все заново — у меня по каким-то причинам старые конфиги не подошли к свежескомпилированной версии.

Копирование прошивки в роутер

Копирование прошивки в роутер

Безопасность альтернативных прошивок

В плане безопасности со стороны всяческих атак на сервисы из интернета роутеры нынче защищены по умолчанию. Тем не менее расслабляться не следует. Опишем несколько возможных векторов атак на роутеры с альтернативной прошивкой.

  • Отсутствие пароля в OpenWRT. И если в веб-интерфейсе (который обычно еще нужно устанавливать) хоть как-то предупреждают об этом, то при заходе по Telnet молчат. Хотя можно было бы написать скрипт, который требовал бы установки пароля, а после его установки отключал Telnet как таковой.
  • Отсутствие тайм-аута при неправильных попытках ввода пароля. В домашней сети это вроде и ни к чему… но можно подцепить малварь, которая атакует роутер и перешивает его. Пользователь может долгое время не подозревать, что он в ботнете, — и даже переустановка ОС, понятно, ничего не даст.
  • Отсутствие проверки подлинности пакетов в OpenWRT. Пакеты ipk не имеют цифровой подписи. В том случае, если репозиторий будет скомпрометирован (или хотя бы произойдет подмена DNS-адреса), это будет чревато заражением роутеров малварью.
  • В DD-WRT Wi-Fi по умолчанию включен и никак не шифруется, что само по себе рискованно, а при выключенном SSH рискованно вдвойне.

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

Заключение

Альтернативные прошивки дают большую свободу для пользователей. Некоторые из них, такие как DD-WRT, Tomato, прошивка от Олега, заточены под нужды большинства — в них есть поддержка NAS, VPN, есть принт-серверы… Другие же (Open/LibreWRT) содержат минимально необходимые возможности, но при этом позволяют их расширять и затачивать под свои нужды. Возможно, прочитав эту статью, ты захочешь стать одним из разработчиков прошивок, благо область довольно новая и толком до конца не освоенная. Дерзай.

Нашёл мануал по заливке прошивки через 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.

Выдёргиваем из подопытного роутера все Ethernet-кабеля, отключаем всех WiFi-клиентов, втыкаемся в один из LAN-портов железки.
Назначаем своей машине статический IP 192.168.0.2, роутеру — 192.168.0.1.

Начинаем веселье

Дальнейшие действия требуют сосредоточенности.
Набираем в консоли

telnet 192.168.0.1 9000 (Enter пока не жмём, просто набираем для экономии времени — помните про 2 секунды?)

Выдёргиваем питание из роутера, ждём пару секунд, втыкаем питание, считаем до трёх, жмём Enter…
Далее идёт мой telnet session transcript, жирным выделено то, что я вводил в консоли, курсивом — мои комментарии.

Openwrt - даже не прошивка, а операционная система linux для роутеров. Причин, для того, что бы ваш роутер был под управлением Openwrt много. Ведь перед вами хоть и урезанная, но система linux, с возможностью установки пакетов (приложений). Помните, перепрошивка роутера в openwrt лишает вас гарантии. Все действия, которые вы выполняете со своим роутером - вы делаете на свой страх и риск.

В первом повествовании не будем вдаваться во многие тонкости. Рассмотрим, как прошить роутер и настроить сеть через веб-интерфейс на примере TP-Link TL-WR740N v.5.

Установка и настройка Openwrt

Шаг 1. Подготовка и прошивка

И так, первый шаг: заходим в админку роутера, смотрим модель и версию:


Переходим на страницу нашего устройства, смотрим версию устройства и качаем ту прошивку, в которой присутствует слово factory. Прошивка Sysupgrade нужна для обновления уже установленной системы:


Скачали, в веб интерфейсе нашего устройства нажмите выберите файл. Выбираем то, что скачали, затем нажмите Обновить:



Шаг 2. Первоначальная настройка

Рекомендую сразу установить пароль и выбрать интерфейс "lan" для подключения по SSH:


Шаг 4. Настройка PPPOE

Теперь настроим подключение к интернету. Если ваш провайдер раздаёт интернет по DHCP, то этот шаг мы пропустим. По умолчанию WAN настроен на DHCP client. Если же pppoe, то идем далее:

Переходим в Network -> Interfaces -> Add new interface. Задаём имя интерфейса, протокол (PPPoE). Cover the following interface выбираем тот, который с wan. Вообще, в моём случае в роутере есть свич - eth0.1 и отдельно адаптер ethernet - eth1. В некоторых случаях нет адаптера, есть только свич eth0 и он разделен вланами - eth0.1 будет wan, а eth0.2 свич.


Нажав Submit мы попадаем далее, здесь нужно указать логин/пароль от PPPoE:


Не применяя настроек, переходим в Firewall Settings и выбираем зону WAN. Сохраняем, применяем.


Если все сделано правильно, то, перейдя в Network -> Interfaces видим, что наш pppoe подключился. Проверяем интернет, должен работать.


Шаг 5. Настройка WiFi

По умолчанию в Openwrt выключен WiFi, что бы включить, переходим в Network -> Wireless -> Edit:

Тут можно выбрать канал, на котором будет работать наша Wi-Fi сеть, либо оставить auto, тогда канал будет сам выбираться, в зависимости от загруженности.

  • Режим работы (mode) - выбираем Access Point (точка доступа), о других режимах, мы поговорим в следующих статьях.
  • ESSID - имя сети Wi-Fi.

Далее перейдите на вкладку Wireless Security:

Не рекомендуется ставить пароль просто из 8 цифр, такой пароль очень уязвим!После всех настроек нажимаем Enable.


На этом пока всё. В дальнейших статьях мы рассмотрим конфигурационные файлы, логи, доступ через SSH, переназначение одного из LAN портов на WAN и так далее.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Это обзорная статья о том, какие возможность существуют у пользователя обычного домашнего роутера, и как этими возможностями воспользоваться.

Рано или поздно каждый пользователь интернета покупает себе домой роутер, поскольку количество устройств, требующих интернета, растёт. А у многих растут дети, которые тоже требуют подключения к интернету :) Но мне больно и обидно видеть, что люди не всегда понимают, что можно и нужно делать для достижения максимального комфорта.

Небольшой дисклаймер (не знаю как это по-русски).
Я буду употреблять слово «правильно» в том смысле, что я сам считаю правильным для себя. Пройдя путь от «нуба» в Линуксе до уровня «могу советовать другим», я считаю, что мои советы по крайней мере не хуже других советов, которые можно встретить на различных форумах.

Речь пойдёт о прошивке роутера на основе известного дистрибутива DD-WRT. Это прошивка, превращающая роутер в «обычный» линукс-сервер с весьма жёсткими ограничениями памяти и быстродействия. Несмотря на это, функционал такого сервера может получиться весьма богатым.

1) Выбор оборудования

Первая и наиболее важная задача — выбрать правильную модель роутера, так как это — «билет в один конец». Оценивая свои финансы и свои амбиции, важно выбрать золотую середину. Возможным фактором риска могла бы быть боязнь «запороть» дорогой роутер своими неправильными действиями. Я сам, покупая дорогую вещь, опасаюсь что-то с ней делать, особенно если нет опыта. Однако могу вас заверить: шансы убить роутер новыми прошивками практически равны нулю. Современные модели имеют режим восстановления, и надо очень сильно захотеть, чтобы угробить роутер (и то не навсегда — просто потребуется специальное оборудование для реанимации).

    , модель начального уровня, зато непревзойдённая по надёжности. Покупалась более 3 лет назад, до сих пор в строю, «ни единого разрыва»… Характеристики: WiFi (b/g) + 4 LAN 10/100, 4Mb flash, 16Mb RAM, no USB. , современный и весьма дешёвый роутер, 3 месяца в строю, также нет нареканий по работе. Характеристики: WiFi(b/g) + 4 LAN 10/100, 4Mb flash, 16Mb RAM, 1 USB.
  • Совместимось данных моделей с прошивками DD-WRT. Возможности «родных» прошивок не рассматривались вообще: зачем выбирать цвет обоев в новой квартире, если впереди — всесокурушающий ремонт?
  • Объем памяти RAM. Почти все современные роутеры имеют 16Mb RAM. Этого как раз хватает для нормальной работы, но, как известно, каждая программа стремится захватить весь доступный объём памяти. Если есть желание выжать максимум из своего роутера или есть лишняя сумма денег, лучше найти модель с 32Mb памяти.
  • Наличие портов USB, ибо весь расширенный функционал удобнее всего ставить именно на внешнем носителе, т.к. flash-память роутера не сможет вместить всех новых программ. Мой первый роутер не имел USB, поэтому приходилось немного изгаляться и «работать напильником».
2) Прошивка роутера

Прошивка — это совсем не больно! Это на самом деле простая операция, ну такая как перректальное удаление гланд… Нет, правда ничего сложного.
При самой первой смене прошивки потребуется чуть больше усилий, зато каждая следующая пойдёт всё легче и легче.
Не следует опасаться, что смена прошивок будет происходить регулярно. Выбрав для себя набор программ, входящих в одну из готовых прошивок, можно на этом успокоиться и наслаждаться жизнью. Если понадобится дополнительный функционал — всегда можно установить новые программы отдельно, для этого существует специальный механизм. Но на первых этапах может случиться так, что выбор прошивки окажется неудачным, например в прошивке не окажется такой нужной возможности как поддержка SAMBA. Не беда, скачиваем другую прошивку, 2 движения мышкой — вуаля!

Некоторые модели роутеров (в частности Asus) перед прошивкой на DD-WRT требуют специальных действий (очистка памяти или что-то в этом роде). Внимательно следуйте инструкциям на конкретную модель роутера! Особенно внимательно нужно отнестить к требованиям «выждать 5 минут после окончания прошивки». Я был немного самоуверен и, перепрошивая своему коллеге роутер, слегка поторопился выключить питание после окончания прошивки. Результат — процедура восстановления и всё по-новой.
Если сказано «подождите 5 минут» — возьмите песочные часы на 5 минут и ждите! Это серьёзно.

Я не буду рассматривать сам процесс перепрошивки (tftp, смена адреса на 192.168.0.1, интерфейс и т.д.) — это всё изложено на форумах DD-WRT.

Но, наконец, вы закончили с прошивкой, и перед вами — чудесный новый WEB-интерфейс вашего роутера. Что дальше?

3) Подготовка к установке OPTWARE

Базовый функционал вы уже получили, выбрав версию прошивки. Осталось настроить параметры подключения к вашему провайдеру (DHCP, PPTP etc), и уже можно начинать бороздить просторы вселенной. Многим домашним пользователям этого уже будет достаточно.
Настройки параметров безопасности, управление маршрутеризацией и прочие стандартные для роутеров «фишки» я также описывать не буду. Без этого всё равно не обходится ни один «нормальный» роутер.
Но ведь можно же сделать ещё лучше! Продолжим процесс.

Все дополнительные программы объединены общим понятием Optware. (они ставятся в каталог /opt, который автоматически создаётся роутером и всегда доступен для записи). Однако сам каталог /opt пуст и фактически расположен в RAM — то есть, там очень мало места и всё, что туда попадает, будет потеряно при перезагрузке. Что же делать?

Выход следующий: нам нужно постоянное место на каком-нибудь «диске». И хотя описываемые хранилища не имеют формы диска в геометрическом смысле (скорее это кристаллы кремния в пластиковых корпусах с металлическими выводами), будем всё же называть их дисками.

Если flash-память роутера достаточно большая, а размер прошивки меньше общего размера flash-памяти, то оставшееся место можно использовать для хренения данных. Если выбрать прошивку с поддержкой JFFS, то в зависимости от версии, можно получить от 0.5 до 3Mb «диск» прямо внутри роутера. Такой диск будет автоматически примонтирован как /jffs при старте.

Главной неприятностью при работе с flash-дисками является их быстрая деградация при записи. Если количество перезаписей сектора «диска» превысит некий порог (от 10 до 100 тысяч циклов), то диску придёт конец. Всё плохо… :(

Если с внутренним диском произойдёт такое, действительно будет плохо. Но если это внешний USB диск, то лёгким движением руки заменяем USB-флешку на новую — и снова в бой. Ведь USB-флешки давно уже расходный материал, не так ли? Тем более что достаточна флешка объемом 1 или 2Gb. Главное, как обычно, вовремя делать бекапы.

Как вы уже поняли, основным местом установки Optware является внешний USB диск. Важно иметь в виду, что USB должен быть определённым образом отформатирован перед установкой в роутер. Как минимум, должен присутствовать первичный раздел, отформатированный как ext2 или ext3.

    раздел ext2, размер

  • постоянно работающий где-то в сети сервер (или NAS, или просто десктоп-машина, даже ноутбук) с поддержкой SAMBA
  • прошивка с поддержкой CIFS/SAMBA

Чтобы всё заработало, достаточно в настройках роутера в разделе CIFS указать сетевой адрес и логин/пароль для доступа к расшаренной папке, и при следующей перезагрузке роутер автоматически примонтирует сетевой диск в папку /tmp/smbshare.

SD/MMC

Предположим, что у нас нет ни свободного места в flash-памяти роутера, ни USB, ни сервера. А нам очень нужно установить Optware. Что же делать?

Как обычно, «у нас с собой было» (это мой любимый девиз). Если совсем ничего нет, то придётся немного поработать напильником.

Для некоторых моделей (среди которых WRT-54GL) доступен так называемый SD/MMC mod. Достаточно приклеить куда-либо SD или MMC карту и припаять 6 проводков, и можно получить место для установки Optware и хранения пользовательских данных.

Именно такой мод я в конце концов и сделал, чтобы из старого роутера получить автономную точку доступа под WiFi Hotspot Chilli. Это — тема отдельного поста, возможно скоро соберусь и даже сделаю мини-сайт. Если кого-то ещё эта тема интересует, напишите в приват.

4) Определение точки монтирования, startup, shutdown

В зависимости от выбранного «диска» точка монтирования будет разной. Для внутренней flash-памяти это будет /jffs, для USB это будет /mnt (если разрешить автоматическое монтирование), для CIFS это будет /tmp/smbshare, для SD/MMC это будет /mmc.

Если выбран вариант USB, то следует запретить автоматическое монтирование — мы сами будем это делать «правильным» образом.
Как я уже сказал, Optware устанавливается в строго определённое место — каталог /opt. Этот каталог уже есть, нужно только примонтировать к нему реальный «диск».

Монтирование можно (нужно) делать в процессе начальной загрузки роутера. Для автоматизации в роутере предназначены несколько предопределённых скриптов, которые выполняются при старте и завершении работы.

Для начала надо разрешить доступ к роутеру по telnet или по SSH протоколу.
Рекомендую настроить доступ по SSH, так как это безопаснее и просто удобнее (можно настроить авторизацию по ключевому файлу и даже не вводить каждый раз пароль при доступе). А доступ нам понадобится неоднократно, чтобы устанавливать программы и смотреть, WTF, почему они не хотят правильно работать.

Сервер SSH уже присутствует и работает во всех версиях прошивок роутера. Нужно только создать пару ключей, один из которых (публичный) загрузить в роутер, а другой (приватный) положить на ноутбуке рядом с программой Putty и WinSCP. Про ключи тоже писать не буду, везде это достаточно подробно расписывается.

Создадим скрипт .rc_startup, который пока будет делать только одно: монтировать внешний «диск» в папку /opt.
Варианты:

USB mount /dev/scsi/host0/bus0/target0/lun0/part1 /opt
JFFS mkdir -p /jffs/opt
mount -o bind /jffs/opt /opt
CIFS mount.cifs $(nvram get samba_share) /jffs -o user=$(nvram get
samba_user),pass=$(nvram get samba_password)
mount -o bind /jffs/opt /opt

Сохраним его в роутере кнопкой Save startup, перезагрузим роутер (возможно, он перезагрузится сам) — после этого у роутера должен появиться каталог /opt, куда теперь можно записывать файлы. Проверим?

telnet router
cd /opt
echo "OK" >opt.ok
cat opt.ok

если получилось «OK» — значит всё ОК, если нет — значит что-то не так… Гуглим, ищем где ошибка, повторяем…

5) Установка Optware — первый шаг

Ну вот, всё позади, у нас в сети — роутер с возможностью установки Optware. Приступим.

Т.к. у меня на ноутбуках Windows, я использую Putty (telnet или SSH) для доступа к консоли роутера и WinSCP для копирования и редактирования файлов.

Подключаемся через WinSCP к роутеру и создаём в папке /tmp следующий скрипт:
opt-inst.sh

Подключаемся через Putty к роутеру и выполняем скрипт:

cd /tmp
chmod 740 ./optw-inst.sh
./optw-inst.sh

В результате работы скрипта будет создана начальная конфигурация Optware и программа-установщик opt-inst. Теперь можно приступать к установке всех остальных пакетов программ.

6) Установка первых пакетов

Для начала установим какой-нибудь совсем простой пакет, например rsync. Он нам пригодится в дальнейшем для настройки резервного копирования.

cd /opt
ipkg-opt update
ipkg-opt install rsync

Если всё прошло успешно и нет никакой ругани в консоли, то можно продолжить установку.

  • mc — Midnight Commander
  • tcpdump — сбор и анализ сетевого трафика
  • busybox — расширенные версии основных утилит Linux
7) Окончательная настройка

Тут следует сделать некоторые замечания. В разных версиях прошивок процедура запуска и останова почему-то отличается, причём в существенной части, а именно — запуск пользовательских скриптов из init.d.

В более новом роутере (версия прошивки 13972) пользовательские скрипты
/opt/etc/init.d/S* автоматически вызываются после завершения работы системного .rc_startup, и аналогично, /opt/etc/init.d/K* перед запуском .rc_shutdown. Поэтому для запуска и оснанова нужных сервисов достаточно, чтобы их соответствующие S* и K* скрипты находились в папке запуска /opt/etc/init.d

Однако и тут (по крайней мере в моём случае) не обошлось без «подводных граблей» (чьё-то меткое выражение). По законам жанра, запуск скрипта S* должен быть с параметром start, а запуск K* — с параметром stop. Но DD-WRT почему-то не передаёт start при старте, хотя и передаёт stop при останове. Пришлось делать некий work-around:

Системный скрипт .rc_statup (создаётся при запуске в /tmp и запускается силами процесса init) выглядит примерно так (некоторые подробности опущены, полный код доступен здесь):

Каждый S* и K* скрипт содержит примерно такой код:

if [ -n "$1" ]; then
OP=$1
else
OP=$(cat /tmp/.rc_stage)
fi

Системный скрипт .rc_shutdown (создаётся при перезагрузке в /tmp и запускается по команде reboot) выглядит примерно так (некоторые подробности опущены, полный код доступен здесь):

В более старом роутере (версия прошивки 13064) S* и K* скрипты вообще не вызываются автоматически, поэтому пришлось делать так:

А уже optware-скрипт /opt/.startup делает всё остальное, а именно — запускает S* скрипты.

Аналогично устроен и системный скрипт .rc_shutdown: (только запускает /opt/.shutdown не в фоновом режиме, а непосредственно)

Читайте также: