Обзор альтернативного программного обеспечения OpenWrt для беспроводного оборудования SOHO-сегмента
Введение
Свободное программное обеспечение играет значительную роль в формировании ориентированного на массового потребителя (Small Office/Home Office, SOHO) рынка беспроводного оборудования Wi-Fi (стандарты 802.11a/g/n). При этом, кроме программного обеспечения на основе ядра Linux, разрабатываемого производителями оборудования, развивается ряд альтернативных, обычно поддерживаемых силами энтузиастов проектов универсального ПО для сетевых устройств.
Самым известным из подобных программных решений, пожалуй, является проект OpenWrt [1], позиционируемый разработчиками как дистрибутив Linux для встраиваемых систем. К ключевым особенностям данного продукта следует отнести наличие собственной системы управления пакетами, позволяющей пользователям добавлять необходимые опции и существенно расширять функциональность беспроводного оборудования, а для разработчиков привлекательно наличие средств для создания дополнительных приложений.
Первоначально (2004 г.) проект базировался на опубликованном компанией LinkSys (ныне подразделение Cisco Systems) исходном коде ПО беспроводного маршрутизатора WRT45G. В этом устройстве использовались системы на кристалле (SoC) Broadcom на основе архитектуры MIPS. В настоящее время существуют сборки OpenWrt (текущая версия на момент написания статьи 10.03.1 Backfire) для SoC/микропроцессоров MIPS, AVR32, Intel IXP4xx, ARM, Intel x86, PowerPC и др.
Установка OpenWrt
Алгоритм установки OpenWrt зависит от устройства. Детальные инструкции для каждой поддерживаемой модели оборудования можно найти на соответствующей странице сайта проекта [2]. В общем виде существуют следующие способы установки OpenWrt:
- С помощью функции обновления прошивки Firmware Upgrade. Данная функция обычно присутствует в веб-интерфейсе управления оригинального ПО устройства и позволяет заменить его на OpenWrt во flash-памяти.
- С помощью загрузчика ПО (bootloader) и Ethernet-порта. Обычно загрузчик содержит необходимую функциональность для перезаписи flash-памяти по протоколу TFTP или FTP. Причем встроенное ПО в разных случаях может выступать в роли как сервера, так и клиента вышеуказанных протоколов. Для замены прошивки необходимо знать используемые загрузчиком сетевые параметры: IP-адрес устройства, протокол и роль (клиент/сервер), номер порта, имя пользователя и пароль. Требуется подключить соответствующий сетевой интерфейс устройства к компьютеру и установить на нем необходимые сетевые настройки и ПО, а затем активировать функцию восстановления ПО устройства, выполнив определенные специфические действия. Например, типичным способом активации режима восстановления является удержание кнопки сброса настроек на устройстве некоторое время при включении питания.
- С помощью загрузчика ПО и последовательного порта. Для этого необходимо подключить компьютер к устройству с помощью последовательного порта и использовать программу-терминал для доступа к интерфейсу командной строки загрузчика. Передача файла прошивки во flash-память может осуществляться по одному из локальных протоколов (X-Modem, Z-Modem и т. д.), а также может быть использовано сетевое подключение (TFTP, FTP).
- C помощью интерфейса JTAG (Joint Test Action Group). Интерфейс JTAG является универсальным средством теcтирования и программирования встраиваемых систем. В подавляющем большинстве случаев этот интерфейс поддерживается бюджетным сетевым оборудованием, и, как минимум, на плате устройства присутствует соответствующая разводка. Используя JTAG, также можно изменить содержимое flash-памяти устройства.
- Загрузка прошивки непосредственно в оперативную память. В данном случае содержимое flash-карты устройства не изменяется, а ПО загружается в оперативную память с удаленного TFTP-сервера. Для активации данного режима обычно требуется подключение к интерфейсу командной строки устройства (локально или по сети).
Учитывая то, что OpenWrt поддерживает архитектуру Intel x86, для изучения его возможностей и тестирования функциональности без наличия соответствующего «реального» оборудования можно использовать ПО виртуализации, например Oracle/SUN VirtualBox [3], установленное на персональном компьютере или ноутбуке. Для запуска последней версии OpenWrt (10.03.1) в среде VirtualBox [4] нужно создать виртуальную машину Linux с ядром 2.6; подключить к ней как первичный IDE-мастер скачанный с официального сайта готовый виртуальный диск (vdi) с образом ПО для архитектуры x86; включить в настройках первый COM-порт. Чтобы получить доступ к интерфейсу управления установленного ПО, следует должным образом настроить виртуальную сеть VirtualBox.
Особенности настройки
Удаленная настройка ПО OpenWrt возможна как средствами интерфейса командной строки (Command-Line Interface, CLI) по протоколу SSH, так и с помощью веб-интерфейса (Web User Interface, WebUI). В новой «чистой» инсталляции OpenWrt по умолчанию на интерфейсе локальной сети установлен IP-адрес 192.168.1.1/24, включен DHCP-сервер, выдающий IP-адреса из диапазона 192.168.1.100–250, а также доступны службы Telnet и Web. Для доступа к беспроводному маршрутизатору или точке доступа по протоколу SSH необходимо с помощью утилиты telnet (рис. 1) или веб-интерфейса установить пароль (по умолчанию пароль отсутствует).
Основным способом настройки системы является унифицированный интерфейс конфигурации UCI (Unified Configuration Interface), предоставляющий доступ к параметрам и значениям, описываемым в наборе текстовых конфигурационных файлов, которые расположены в каталоге /etc/config (рис. 2). Управление параметрами UCI может осуществляться непосредственным редактированием данных файлов, использованием прикладных программных интерфейсов (Shell, Lua, C и т. д.), а также с помощью одноименной утилиты.
В системе также присутствует (в сокращенном виде) набор консольных программ, характерный для дистрибутивов UNIX-подобных операционных систем, а также легковесный командный интерпретатор ash (Almquist shell).
По сути, одним из приложений UCI является веб-оболочка LuCI (Lua Unified Configuration Interface) [5], используемая по умолчанию в OpenWrt как средство высокоуровневого администрирования. Интерфейс LuCI (рис. 3) позволяет получать разнообразную информацию (межсетевой экран, ARP-таблица и таблица маршрутизации, журналы системы и ядра, запущенные процессы, статистика производительности и сети) о состоянии системы (раздел Status) и производить общесистемные настройки (раздел System): осуществлять обновление прошивки, смену пароля, настройку управления, администрирование ПО, настройку запускаемых при старте служб, запускать планировщик заданий и т. д. Также с его помощью можно настраивать проводные и беспроводные сетевые интерфейсы, DHCP- и DNS-серверы, статическую маршрутизацию, межсетевой экран и т. д. (раздел Network). При желании можно установить и использовать одну из альтернативных веб-оболочек, например X-Wrt [6].
Утилита uci
Конфигурационный файл (конфигурация) состоит из секций заданного типа. Секции обозначаются ключевым словом config, после которого следуют тип секции и ее имя (например, на рис. 2. показаны секции типа interface, их имена loopback и lan). Секция включает набор опций (ключевое слово option), состоящих из имени и значения. Утилита uci предназначена для управления конфигурациями, секциями и опциями. Ее синтаксис в общем виде следующий:
uci [<опции>]<команда> [<аргументы>],
где опции позволяют указать различные дополнительные параметры выполняемым утилитой командам. Список основных команд и аргументов сведен в таблицу.
Команда | Аргументы | Назначение |
commit | [<config>] | Записывает изменения, произведенные командами («uci set», «uci add» и т. д.), в указанную конфигурацию. В том случае, когда конфигурация не указана, сохраняются все изменения. |
batch | — | Выполняет uci-скрипт. |
add | <config> <section-type> | Добавляет анонимную секцию типа section-type в указанную конфигурацию. |
show | [<config>[.<section>[.<option>]]] | Показывает указанную опцию, секцию или конфигурацию. |
get | <config>.<section>[.<option>] | Получить значение указанной опции или тип секции. |
set | <config>.<section>[.<option>]=<value> | Установить значение указанной опции или добавить новую секцию указанного типа. |
delete | <config>[.<section[.<option>]] | Удалить указанную опцию или секцию. |
rename | <config>.<section>[.<option>]=<name> | Переименовать указанную опцию или секцию. |
Например, для смены IP-адреса и сохранения изменения конфигурации в постоянную память можно использовать в консоли следующую последовательность команд:
# uci set network.lan.ipaddr=192.168.1.2 # uci commit network # /etc/init.d/network restart.
Беспроводные возможности
Прошивка OpenWrt (в зависимости от возможностей используемого аппаратного обеспечения) позволяет создавать различные архитектурные элементы беспроводной инфраструктуры, такие как:
- Точка доступа (Bridged AP). В данном режиме устройство объединяет проводную сеть и подключенных к нему беспроводных клиентов в один широковещательный домен канального уровня.
- Беспроводной маршрутизатор (Routed AP). Разделяет беспроводной и проводной сегменты на сетевом уровне, позволяя фильтровать потоки трафика между ними.
- Режим клиента (Client Mode). Функционально позволяет подключить к беспроводной сети клиентов, не имеющих интерфейса Wi-Fi, например через Ethernet-соединение.
- Беспроводная система распределения (Wireless Distribution System, WDS). Данный режим объединяет две и больше точек доступа по беспроводному каналу в один широковещательный домен (или на основе маршрутизации), что позволяет строить беспроводную инфраструктуру без использования проводов.
- Интеграция с 3G/UMTS. Позволяет беспроводным клиентам использовать интернет-канал, предоставляемый сетью мобильного оператора.
- Mult-SSID и гостевой WLAN. Предоставляет возможность развертывания в рамках одного устройства нескольких «виртуальных» беспроводных сетей различного назначения.
Управление пакетами
Управление дополнительным программным обеспечением в OpenWrt может осуществляться как через веб-интерфейс, так и средствами консольной утилиты opkg. В LuCI администрирование пакетов выполняется на вкладке Software раздела System (рис. 4). Здесь отображается информация о свободном пространстве оперативной памяти, списки установленных пакетов и доступных пакетов, форма поиска и настройки пакетного менеджера. Для загрузки пакетов из удаленного репозитория требуется подключение к Интернету.
Консольная утилита opkg представляет собой легковесный пакетный менеджер, позволяющий использовать как удаленные, так и локальные хранилища пакетов и отслеживающий зависимости между пакетами. Конфигурационный файл менеджера пакетов opkg.conf расположен в каталоге /etc. Следует отметить, что opkg может работать как с архитектурно-независимыми пакетами (по умолчанию), так и со специфичным для данной архитектуры ПО (следует указать опцию «arch» в конфигурационном файле). Также пакетный менеджер поддерживает доступ в Интернет через прокси-сервер.
Что касается списка дополнительного ПО, то он достаточно обширный и включает около 2000 наименований. Кроме системных и сетевых утилит, модулей ядра и базовых средств разработки, доступны HTTP-серверы (Apache, nginx), средства телефонии (Asterisk), DNS-серверы (bind, djbdns, tinydns), средства организации беспроводных hot-спотов (ChilliSpot), поддержки принтера (CUPS), звуковой подсистемы и USB, DHCP-серверы (Dibbler, dhcpd), разнообразные сетевые утилиты (nmap, nagios, snort, tcpdump), средства программирования (Perl, PHP, Lua, Python, Ruby), прокси-сервер Squid и многие другие.
Заключение
Следует отметить, что ввиду разнообразия применяемых производителями аппаратных решений (зачастую архитектурные различия есть даже между ревизиями одного и того же устройства) к вопросу совместимости данного образца сетевого оборудования с OpenWrt следует подходить максимально внимательно [2]. В некоторых случаях замена стандартного ПО на альтернативное может привести к неработоспособности устройства, и для восстановления потребуются специальные навыки и средства. Основными причинами невозможности запуска OpenWrt являются недостаток постоянной (менее 4 Мбайт) или оперативной (менее 16 Мбайт) памяти и отсутствие в Linux поддержки соответствующей аппаратной платформы.
В целом же OpenWrt является бесплатным, гибким и расширяемым решением, которое позволяет «кастомизировать» беспроводной маршрутизатор или точку доступа, получив во многих случаях максимальный эффект от возможностей используемого оборудования.
- OpenWrt — Wireless Freedom.
- OpenWrt Table of Hardware. /ссылка утерена/
- Welcome to VirtualBox.org!
- OpenWrt in VirtualBox. /ссылка утерена/
- LuCI Home Page.
- X-Wrt.