Оригинал материала: https://3dnews.ru./905793

Прошивка SOHO-роутера

Мнение читателей может не совпадать с мнением редакции.

Мнение редакции может не совпадать с мнением автора.

Мнение автора может не совпадать с мнением разработчиков.

Мнение разработчиков может не совпадать с мнением читателей.

#Предупреждение

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

С течением времени материал будет обновляться и дополняться в случае необходимости. Текущая версия: ноябрь 2016 года.

#Предисловие

Кажется, нет особого смысла рассказывать о том, почему прошивка так важна. Или есть? Очевидно же, что от её качества во многом зависит работа устройства. Бывает так, что у роутера просто великолепная аппаратная часть и совершенно ужасное ПО, которое не то что не позволяет использовать на полную катушку все возможности «железа», но даже не имеет некоторых базовых функций. А порой бывает ровно наоборот — качественная прошивка дарит вторую жизнь немолодому уже роутеру. В конце концов, прошивка может вообще кардинально поменять предназначение устройства. Посмотрите на пример зонда Atlas RIPE — раньше это был маленький сетевой модуль Lantronix, а теперь дешёвый роутер TP-Link. В обоих случаях в серийных устройствах была заменена прошивка. Впрочем, даже штатные прошивки для одного и того же устройства могут заметно различаться в зависимости от того, в какой стране оно будет продаваться. В худшем случае (для пользователей) производитель может попытаться «развести» по углам собственные устройства, сознательно сильно урезав функциональность более дешёвых моделей, чтобы не вредить продажам дорогих устройств.

 Apple AirPort — яркий пример сочетания прекрасного «железа» и очень слабой прошивки

Apple AirPort — яркий пример сочетания прекрасного «железа» и очень слабой прошивки

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

В данном материале будет в общих чертах рассказано о внутреннем устройстве и особенностях работы Ethernet-маршрутизаторов SOHO-класса, то есть предназначенных для дома или маленького офиса и получающих доступ в Интернет посредством Ethernet-подключения к провайдеру. В принципе, маршрутизаторы для xDSL, *PON или DOCSIS внутри устроены по большей части так же. Мобильные роутеры сюда не включаем, а заодно не включаем и устройства, которые формально подпадают под сегмент SOHO, но фактически ближе к корпоративным и провайдерским решениям. Условная отсечка по цене — роутеры стоимостью до 10 000 рублей. Явное указание брендов по возможности будет отсутствовать, так как материал всё-таки общий. Однако разговор пойдёт в основном о прошивках тех компаний, что активно представлены на российском рынке.

#Загрузчик

С чего всё начинается? Что происходит после того, как на роутер было подано питание? Всё примерно так же, как в обычном ПК. Сразу же включается загрузчик (bootloader), который инициализирует «железо», которое будет нужно для загрузки ядра ОС, которое готовит окружение для старта самой ОС, которая запускает утилиты, которые нужны для основной работы, которые выполняют все необходимые функции в доме, который построил Джек. Простите. По сути, на каждом этапе одна маленькая программа делает всё необходимое для запуска следующей, более сложной программы. И так по цепочке, несколько раз подряд. На самом деле загрузчик, хоть и являющийся частью прошивки, всё-таки особая и отдельно живущая сущность. Это, пожалуй, наиболее стабильный и отлаженный элемент прошивки.

 Красным на плате TP-Link MR-3220v2 обозначена основная память cFeon EN25Q32B-104HIP, где «живут» загрузчик U-Boot и прошивка

Красным на плате TP-Link MR-3220v2 обозначена основная память cFeon EN25Q32B-104HIP, где «живут» загрузчик U-Boot и прошивка

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

В задачи загрузчика входит первичная проверка «железа», инициализация SoC и RAM, загрузка мини-драйверов для работы с самой флеш-памятью, Ethernet-контроллером и дополнительными интерфейсами типа UART или JTAG. В загрузчик обычно включаются преднастроенный (T)FTP-клиент или (T)FTP/HTTP-сервер, минималистичный сетевой стек и простейшая командная оболочка, а иногда и дополнительное ПО. Нет, это всё ещё не ОС, но всего лишь маленькая, «умная» и быстрая программа. Зачем такие сложности? Для того чтобы в случае проблем попросту скопировать в память по сети корректную версию прошивки. Именно так в большинстве своём работают фирменные утилиты по восстановлению ПО роутеров. Если, например, при обновлении произошёл сбой питания и образ прошивки не был до конца записан в память, то при следующем старте дальше загрузчика дело не продвинется. В некоторых случаях даже в штатном режиме предусмотрена загрузка ОС по сети.

 В загрузчике Broadcom CFE даже предусмотрен веб-интерфейс, однако он чаще всего отключен (Источник: OpenWRT.org)

В загрузчике Broadcom CFE даже предусмотрен веб-интерфейс, однако он чаще всего отключен (источник: OpenWRT.org)

В общем, всё зависит от разработчиков и тех задач, которые будет выполнять маршрутизатор. Созданием загрузчика занимаются производители SoC, создатели прошивок и разработчики маршрутизаторов. Нет, эти множества не всегда совпадают, но об этом мы ещё поговорим в другой статье. Разновидностей загрузчиков не так уж много, но, пожалуй, самым популярным является открытый проект Das U-Boot, который предоставляет отличный набор функций. Его довольно легко подогнать под свои нужды, чем активно пользуются очень многие разработчики. Любопытно, что в принципе без таких «развесистых» загрузчиков вполне можно обойтись и использовать совсем миниатюрный код, который сразу же будет передавать управлению ядру. Фактически же в SoC тоже «живёт» свой маленький предзагрузчик, который инициализирует саму систему-на-чипе, используя считанные килобайты набортной памяти и опрашивая основные компоненты чипа. Но что и как конкретно он это делает — нередко тайна за семью печатями, которую производители чипсетов бережно хранят.

Обратите внимание, что сам по себе загрузчик обновляется крайне редко, а обычно его вообще не трогают. Это касается и обновления ПО роутера, и самого процесса разработки загрузчика. Если загрузчик «умер» в результате ошибки записи или из-за проблем с памятью, то устройство погибает вместе с ним. Спасение только в выпаивании чипа памяти и замене его таким же с нормальным ПО. В случае дешёвых роутеров проще купить новый. По причине удешевления теряют популярность и аппаратные модификации вроде напайки большего объёма памяти обоих типов, хотя в некоторых случаях таким образом можно получить из одного устройства другое, более дорогое из-за его софта.

#Ядро и корневая ФС

Беда в том, что зачастую для установки нестоковой прошивки необходимо сменить и загрузчик. Некоторые производители борются с этим и, например, лишают гарантии модифицированные устройства. Делается это не из вредности, а по чисто экономическим или юридическим причинам — и на ту же техподдержку затраты меньше, и ограничения стран на используемые радиочастоты и мощность сигнала надо соблюдать. Например, в последних моделях маршрутизаторов ASUS региональные параметры радиомодулей установлены как раз на уровне загрузчика, хотя аппаратное и программное обеспечение одинаково для всех стран. Более того, FCC (Федеральная комиссия по связи США) всерьёз рассматривала запрет на использование альтернативных прошивок как раз в связи с необходимостью соблюдения правил по корректному использованию радиочастотного спектра.

Летом 2016 года стали действовать новые правила FCC, которые не накладывают явный запрет на сторонние прошивки. Тем не менее, для разработчиков самый простой и дешёвый путь — это не отдельная блокировка настроек радиомодулей, а отказ от любой возможности установки стороннего ПО. Из крупных производителей только Linksys объявила, что некоторые модели роутеров всё равно будут поддерживать альтернативные прошивки. Кроме того, в августе 2016 года TP-Link подписала соглашение, согласно которому компания выплатит штраф $200 000 за несоблюдение правил FCC. В том же соглашении компания согласилась изучить возможность использования сторонних прошивок в своих роутерах.

В крайних случаях заменить загрузчик можно через упомянутые UART или JTAG, которые опять-таки нередко уже распаяны или выведены на плату. Маленькая неприятность заключается ещё и в том, что как таковые традиционные ФС на флеш-памяти не используется — слишком накладно. Загрузчик «знает», что вот с такого-то по такой-то адрес находится ядро и его надо запустить. Ядро тоже в курсе, где расположен образ корневого раздела, если он вообще есть, ведь могут использоваться и намного более простые архитектуры. Ну а далее драйверы и прочее ПО тоже могут обращаться к нужным областям с данными.

Почему мы особо выделяем ядро, ведь это часть любой ОС? Давайте условно разделим все прошивки на Linux-based и прочие. Под прочими подразумевается целое множество встраиваемых ОС, часть из которых относятся и к ОСРВ (ОС реального времени, RTOS) и используются повсеместно — от микроволновок до космических спутников. Среди подобных систем в недорогих роутерах на глаза периодически попадается VxWorks — проприетарная ОС WindRiver. Прошивки на основе Linux тоже можно условно поделить на две категории — те, которые во многом схожи с традиционными дистрибутивами GNU/Linux, и те, которые используют только ядро, а всё остальное окружение несколько отличается от традиционного. Примерами последних служат RouterOS и NDMS, а первых — многочисленные *WRT-проекты и не менее многочисленные официальные прошивки. Отличие от настольных дистрибутивов заключается в максимальной оптимизации ПО — всё лишнее выкинуто, часть библиотек и утилит заменена микроверсиями, даже встроенные справочные материалы (те, что выдаются с ключами /? или --help) могут быть убраны для экономии места.

 Собственная командная оболочка ZyXel

Собственная командная оболочка ZyXel

Мы, конечно, будем говорить о прошивках на базе Linux, так как они сейчас наиболее популярны. Вся прелесть ядра Linux в том, что оно открыто, бесплатно и весьма функционально. Более того, разработкой ядра активно занимаются сторонние специалисты, хотя сами разработчики ПО для роутеров и производители чипов активно дополняют его. К тому же для него полно документации, и разобраться с кодом не так уж трудно. В любом случае для какой-нибудь молодой начинающей компании или просто группы энтузиастов гораздо удобнее взять готовое «мощное» ядро. Даже если они сами не будут его модифицировать, то они вполне могут рассчитывать на исправление ошибок, повышение производительности и прочие приятности в будущем, которые так или иначе будут привнесены в ядро другими разработчиками. Налицо выгода и во времени, и в деньгах. В конце концов, среди всех открытых платформ именно Linux развивается наиболее активно.

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

 У ней внутре неонка, то есть Linux

У ней внутре неонка, то есть Linux

Было бы здорово, если б в каждой новой прошивке использовалось как можно более свежее ядро, ведь оно постоянно обновляется — повышается производительность, появляются новые возможности, латаются проблемные места. В реальности всё выглядит иначе — в какой-то момент выбирается подходящая версия ядра, вокруг которой будет строиться дальнейшая разработка. Более того, у крупных компаний, как правило, кодовая база едина для всего пула современных устройств. При сборке прошивки под конкретную модель в неё включаются и подгоняются только необходимые компоненты. Поэтому, в частности, всякие новые сервисы появляются во всей линейке устройств с не такой уж большой разницей во времени, которая зависит уже от того, сколько сил придётся затратить на тестирование новой версии ПО. Раз в несколько лет происходит переход на новую кодовую базу, причём не самые старые модели возрастом в 1-2 года в неё уже могут не попасть. Всё это по большому счёту не касается всяких мелких производителей из Китая, которые выпускают устройства-«однодневки». Впрочем, ситуация не всегда однозначна.

Есть, грубо говоря, четыре участника процесса создания сетевого оборудования — разработчики аппаратной части, завод-изготовитель, создатели прошивки и владелец бренда, под которым готовый продукт будет продаваться. Далеко не всегда все эти элементы объединены под крылом одной компании. Порой бывают забавные ситуации, когда одно и то же устройство продаётся под разными брендами, причём у них совершенно разные, но легко взаимозаменяемые прошивки. Есть фирмы, которые живут только за счёт создания и адаптации ПО под конкретного заказчика — либо провайдера, либо опять-таки какого-то бренда. Чуть отстоят от всего этого производители SoC, которые не только создают SDK (набор разработчика ПО + документация) для своих чипсетов, но и делают референсные платформы на их основе. SDK зачастую тщательно оберегается и даётся только компаниям, которые подписали объёмистые договоры на покупку чипов. В открытый доступ попадают лишь устаревшие наборы, да и те не полностью. На основе SDK и создаются прошивки.

#Коммерческое ПО и сторонние прошивки

В принципе, здесь всё как всегда. Бывают случаи воровства чужого труда, нарушения лицензий, судебных тяжб, патентных войн и прочих радостей жизни. По-хорошему при использовании софта с той же GPL (а многие Linux-прошивки «кишат» ПО с этой лицензией) вы обязаны как минимум указать на это и делиться своими наработками со всем миром, желательно в самой необременительной форме — попросту выкладывая в общий доступ исходный код. Порядочные компании так и делают, что порой приводит к некритическим утечкам информации о скором выходе новых моделей — в кодовой базе всплывают их ID и прочие служебные данные. И вообще, это нормальная ситуация, когда разработчики обмениваются патчами. Естественно, это не касается кода, который изначально был закрыт и охраняется как интеллектуальная собственность. Да, современный открытый софт с грехом пополам можно запустить почти на любой нынешней SoC, производитель которой заявил о совместимости с тем же Linux. Причём он будет весьма функциональным, но довольно стандартным, а с такими вводными трудно конкурировать на рынке.

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

Однако тут мы снова вынужденно возвращаемся к извечной теме блеска и нищеты open-source, затронутой в последний раз в материале о Heartbleed. Открытый код прекрасен, но не всегда актуален (современен), надёжен, производителен, экономичен, функционален и компактен, что важно для любых встраиваемых систем. Не нравится веб-сервер? Возьмите GoAhead. Нужны нормальные драйверы для NTFS и HFS+, а не только для нативной в Linux ФС ext2/3/4? Пожалуйте к Paragon или Tuxera. А хотите сертифицированный DLNA-сервер? TwonkyMedia подойдёт. Только не забудьте за всё это заплатить. Список коммерческих решений можно продолжать долго. Собственно говоря, стоит ли постоянно напоминать, что софт очень важен в работе роутера. Коммерческое ПО тоже вносит не самую маленькую долю в итоговую стоимость конечного устройства. Стратегия «Сэкономлю-ка, купив вот эту модельку, потому что у неё точно такое же железо, как у той, что подороже» не всегда верна.

Слева скриншот штатного ПО ASUS, а справа — веб-интерфейс прошивки Padavan

Естественно, никакого платного ПО в открытых прошивках типа OpenWRT вы не найдёте. Но не найдёте вы там и гораздо более важной вещи — нормальных драйверов для современного «железа». SDK, драйверы и документацию многие производители чипсетов ревниво охраняют. Полный комплект можно получить только при закупке определённого числа чипов или просто приобрести за весьма приличные суммы. Поэтому в общий доступ они попадают либо с заметной задержкой, либо частично. Можно, конечно, попытаться «отреверсить» бинарную версию драйвера и создать собственный аналог, но такой подход не всегда срабатывает. Да и в этом случае не всё так просто — чипу могут потребоваться или дополнительные данные для инициализации (лицензионный ключ, если хотите), или своя микропрошивка, или калибровочные данные (для радимодулей), или ещё что-нибудь. В общем, нюансов масса, и полностью реализовать все возможности может только производитель. Хороший пример — это аппаратное ускорение NAT, TurboQAM и прочие фирменные фишки чипов той или иной фирмы. Экстремальный вариант — это собственная полноценная прошивка для какого-либо компонента с загрузчиком, ядром и прочим окружением.

Всё это в прошивках, исповедующих «чистый» open source, работать не будет. Приятное исключение — чипсеты Ralink, но после покупки оной MediaTek ещё неизвестно, как ситуация будет развиваться дальше. Так называемые «прошивки от энтузиастов» таких проблем, как правило, лишены, потому что они построены на той же кодовой базе, что и официальное ПО, если оно доступно. Проприетарная часть остаётся без изменений (ну почти), а вот все остальные компоненты можно тюнинговать сколько душе угодно. Ну и делают это небезуспешно. Примеры — прошивки для ASUS от Padavan и Merlin. У роутеров NETGEAR и Linksys тоже есть свои сообщества по созданию прошивок. Для всех прочих роутеров по сути подходят только *WRT-проекты или ответвления от вышеназванных — например, Xwrt-Vortex. С ZyXEL ситуация интереснее. Первое поколение NDMS официально не поддерживается, но всё ещё доступно. Для этих прошивок также существует проект по расширению функциональности. Мы с ним как-то знакомились. А с 2016 года разработчик Andy Padavan работает в ZyXel.

Причём это, пожалуй, оптимальный вариант — запуск приложений только с USB-накопителя, при отключении которого роутер продолжает работать в штатном режиме. К тому же при установке дополнительных утилит на недорогой маршрутизатор вы упрётесь не только в ограничение CPU, но и в малое количество RAM, так что без файла/раздела подкачки не обойтись. Все сторонние прошивки по сути предоставляют доступ к хранилищам заранее подготовленного ПО — Optware и Entware. Это удобно, но требует некоторых навыков для настройки. Впрочем, приличные современные роутеры и так оснащаются множеством дополнительных утилит вроде BitTorrent-клиента, облачных сервисов, «шарилок» файлов и так далее. Если, конечно, всё это добро приемлемо для разработчика. Скажем, в продуктах некоторых компаний вы никогда не увидите менеджера закачек. Да и в целом прошивки для разных стран или регионов могут существенно отличаться друг от друга, несмотря на то, что «железо» одинаковое.

#USB-устройства

Особенности работы с драйверами касаются не только внутренних, но и внешних компонентов. Речь в первую очередь об устройствах, подключаемых к USB-порту роутера. Наиболее востребованны, понятное дело, модемы для сотовых сетей и принтеры/МФУ. Внешние накопители в счёт не берём, так как там всё довольно однообразно, а проблемы возникают разве что с засыпанием диска, да и с этим уже научились бороться. Если вам нужен производительный и ёмкий сетевой диск, то лучше сразу купите NAS. С USB-модемами и сложнее, и проще. Проще потому, что 3G/4G-модулей, а тем паче конвертеров USB-to-Serial не так уж много. Так что когда вы видите огромный список поддерживаемых модемов или, наоборот, очень коротенький (и в нём, как назло, нет вашего), не обольщайтесь и не расстраивайтесь, а просто попробуйте воткнуть имеющийся модем в роутер и проверить работу. Сложнее потому, что, во-первых, драйверы-то для них всё равно нужны, и не для всех моделей они имеются. Во-вторых, многие модемы попутно эмулируют ещё и CD-ROM, а также снабжаются кард-ридерами — всё это желательно отключать, чтобы не мешалось. В-третьих, тут опять очередная чехарда со стандартами и протоколами подключения и общения между модемом и роутером.

Для некоторых модемов можно (или даже необходимо) изменять параметры только с помощью фирменных утилит, а то и менять прошивку, чтобы они заработали при подключении к роутеру. К счастью, в последнее время в качестве основного интерфейса всё чаще попадается простая эмуляция Ethernet через RNDIS. Поддержка SMS и голосовой/VoIP-связи, даже если эти функции есть в модеме, не реализована практически нигде. Изредка встречаются аппараты с поддержкой DECT, а у ZyXel есть проприетарные USB-модули Keenetic Plus для DECT и xDSL. На этом работа с модемами не заканчивается — желательно упростить жизнь пользователю и сделать так, чтобы модем можно было просто воткнуть в роутер — и он сразу давал бы доступ в Интернет. Как минимум, для этого нужны настройки подключения к оператору сотовой связи. При этом об относительно небольших компаниях почему-то настойчиво забывают.

В России, помимо «большой тройки» и Yota, есть ещё Ростелеком, невозбранно поглотивший множество мелких региональных сетей, и Tele2, а также СМАРТС и МОТИВ (оба получили разрешение на 4G). В любом случае для того, чтобы иметь свежие драйверы и настройки, приходится ждать обновления прошивки, что не очень удобно. Пожалуй, единственное приятное исключение относится к NDMSv2 и RouterOS, где есть управление отдельными компонентами прошивки, которые теоретически могут помочь оперативнее получать апдейты. Впрочем, всё равно от пользователя здесь мало что зависит.

 Управление компонентами прошивки в современных роутерах ZyXel

Управление компонентами прошивки в современных роутерах ZyXel

С USB-принтерами в чём-то похожая история — им тоже нужны драйверы и ПО. А есть ведь ещё заморочки с фирменными протоколами типа HP JetDirect или Canon BJNP, с GDI-принтерами (рендеринг растра производится на машине пользователя), а то и пресловутая подгрузка микропрошивки в принтер перед началом работы. Как думаете, что для производителей печатающих устройств важнее — пользователи Windows/MacOS или Linux под MIPS/ARM? В идеальном случае неплохо было бы развернуть настоящий принт-сервер типа CUPS с поддержкой множества протоколов и очередью печати. Единственный из протестированных маршрутизаторов, в котором стоит CUPS+SAMBA, — Huawei WS880. И то до конца не понятно, насколько хорошая эта затея. На практике работа принт-сервера — это во многих случаях достаточно ресурсоёмкая задача для CPU роутера, в особенности если у принтера нет собственного процессора для обработки заданий печати, которые приходят в виде, например, PCL.

Поэтому обходятся лёгкими «костылями», хотя никто не мешает в сторонних прошивках всё сделать самому. Либо попросту на порт принтера по сети передаются «сырые» данные — всё, что там нагенерировали драйвер принтера и служба печати. Далеко не все принтеры способны корректно работать в таком режиме. Второй вариант — проброс USB по сети, что в общем случае тоже не очень хорошо. По идее, этот способ универсальнее, но в самом примитивном варианте реализации он даёт эксклюзивный доступ к принтеру только одной машине. Зато этим же способом можно удалённо использовать и сканер. В общем, если вам нужны надёжные сетевая печать и сканирование для нескольких клиентов, то лучше не надеяться на возможности роутера, а сразу же покупать сетевой принтер/МФУ или модуль принт-сервера для него. Для сугубо домашнего использования можно обойтись и возможностями роутера. В некоторых сторонних прошивках также реализована поддержка веб-камер.

#Подключения к Сети

Благословенен будь тот провайдер, что даёт клиентам доступ в Сеть напрямую — без всяких там VPN-подключений и прочей ереси. Если серьёзно, то прямое соединение является оптимальным вариантом в плане скорости и удобства. Сразу же можно задействовать аппаратное ускорение NAT и не заморачиваться с маршрутизацией. PPPoE-подключение чуть более требовательно к ресурсам роутера, но тоже хорошо, и к тому же имеются аппаратные решения по его ускорению. Этот вариант обычно используется в xDSL-подключениях. Суть же аппаратного ускорения (или «разгрузки») сводится к тому, что обработка сетевых пакетов делается не на CPU, а в специализированном блоке SoC или коммутатора. Сам процессор при этом практически не нагружается. Во всех прочих случаях или при отсутствии такого блока в «железе» вся нагрузка по обработке сетевого трафика падает на CPU. К «прочим» относятся, в общем-то, любые дополнительные манипуляции с переупорядочиванием сетевых пакетов, будь то, например, QoS (приоритизация определенных видов трафика), шейпинг (принудительное ограничение скорости у клиентов), а то и DPI. В принципе, прямое подключение и PPPoE являются самыми распространёнными в мире, поэтому в международных версиях прошивок обычно имеются только они. Да, иногда у провайдера есть мелкие нюансы вроде привязки к MAC-адресу или авторизации через 802.1x, но это тоже всё поддерживается большинством роутеров.

С Россией случай особый. Так уж исторически сложилось, что, видимо, в целях экономии сети Ethernet-провайдеров поначалу строились на простых неуправляемых коммутаторах или концентраторах. Поэтому для доступа в Интернет стали использовать VPN-подключения PPTP, а потом и L2TP, которые по-хорошему для этого вовсе не предназначены. При этом доступ в локальную сеть провайдера позволял сэкономить на интернет-трафике, ведь в ней частенько имелись внутренние сервисы: форумы, чаты, FTP/SMB-серверы с контентом (обычно сомнительного происхождения), файлообменные штуки типа торрент-трекера или DirectConnect и так далее. Поэтому на первых порах приходилось ещё и самостоятельно настраивать маршрутизацию, чтобы одновременно был доступ и к внутренним ресурсам, и к Интернету. Сейчас большинство роутеров без дополнительной настройки дают такую возможность — это всё обычно называется красивыми словами типа Dual Access или что-нибудь ещё в таком духе.

 В прошивке ZyXel NDMS2 весьма гибкое управление сетевыми интерфейсами

В прошивке ZyXel NDMS2 весьма гибкое управление сетевыми интерфейсами

Впрочем, изначально-то к Сети подключался вообще один ПК в доме, поэтому проблем с обработкой VPN-подключений не было. В роутере же вся эта нагрузка ложится на плечи CPU, никакого аппаратного ускорения не предусмотрено. PPTP — достаточно тяжелый протокол, а L2TP ещё более требователен к ресурсам. И вот тут очень важна не только производительность «железа», но и качество оптимизации ПО. Интереса ради рекомендуется изучить вот эту и эту таблички. К сожалению, многие вендоры поступают очень просто — берут какую-нибудь открытую реализацию VPN-клиента (иногда не первой свежести) и по мелочи подкручивают её, чтобы она хоть как-то работала. При этом часть из них очень любит игнорировать рекомендации RFC. Иногда недоступны даже минимальные настройки данных протоколов, а это может привести к тому, что вы просто не сможете подключиться к Сети. Мало кто занимается оптимизацией VPN-модулей под конкретное «железо», свою собственную качественную реализацию пишут единицы. Наиболее частая проблема, особенно в недорогих моделях, — это невозможность «прокачать» хоть сколько-нибудь приличную скорость, особенно в дуплексе и при использовании шифрования VPN-туннеля.

Всё совсем печально, если ваш провайдер до сих использует свою «фирменную» систему идентификации пользователей. Обычно это какая-нибудь программка, которая ставится на ПК и зовётся «авторизатором». В этом случае шанс получить поддержку такой функции в прошивке роутера стремится к нулю. Что ещё осталось? TR-069 для удалённого управления роутером? Нашими проводными провайдерами он почти не используется, и в прошивках CWMP обычно нет. Поддержка IPv6? Да, потихоньку добавляется в прошивки, причём некоторые могут похвастаться солидным набором возможных способов подключения к IP-сетям нового поколения. На практике же особенного смысла в нём нет — провайдеры то тут, то там внедряют тестовую поддержку IPv6, но окончательный переход на этот протокол произойдёт ещё не скоро, да и расширенных настроек для работы с ним в штатном ПО роутеров пока тоже почти нет. Работа с несколькими провайдерами (Dual-WAN)? Ну чаще всего реализована возможность переключаться на запасной доступ в Интернет через 3G/4G-модем, да и то не всегда. Работа с двумя проводными WAN-подключениями (балансировка/резервирование) постепенно становится уже штатной функцией даже в не самых дорогих устройствах. Но вообще поддержка, к примеру, сразу двух L2TP-подключений на высокой скорости — это весьма серьёзная задачка для CPU роутера. С базовыми принципами того, как внутри роутера работают сетевые интерфейсы можно познакомиться в этом обзоре.

#IPTV и VoIP

Работа с IPTV — это особая задача. Сейчас принято раздавать доступ к ТВ посредством мультикаста и IGMP. Некоторые провайдеры в комплекте с ТВ-приставкой выдают клиентам ещё и маленький свитч, чтобы подключить её, минуя роутер. В случае пропуска трафика через роутер есть несколько схем работы. Самый простой вариант — это IGMP Proxy вместе с преобразованием потока в юникаст. Первый элемент нужен для того, чтобы ТВ-приставка или любой другой IPTV-клиент могли подписаться на мультикаст-поток. Второй — для того, чтобы этот поток отдавался только тому клиенту, который явно запросил подписку. Для беспроводных клиентов второй этап просто обязателен, хотя просмотр IPTV через Wi-Fi — это вообще не самая лучшая идея. Для проводных клиентов нередко реализована программная или даже аппаратная поддержка IGMP Snooping — изоляция порта на коммутаторе, куда будет сыпаться весь мультикаст-трафик. В интерфейсе это обычно представлено как возможность выбора конкретного LAN-порта (обычно 3-го или 4-го), куда будет подключена только ТВ-приставка.

 Работа с VLAN в прошивках ASUS

Работа с VLAN в прошивках ASUS

Совсем уж альтернативный вариант подразумевает использование прокси udpxy и специального DLNA-сервера. Он подходит для Smart TV, мобильных приложений и программных клиентов, но плохо совместим с обычными ТВ-приставками. Для корректной работы IPTV у некоторых провайдеров требуется ещё и поддержка VLAN, которая есть далеко не во всех роутерах, даже топовых. Иногда VLAN требуется и для IP-телефонии от провайдера. Так что этот момент надо обязательно уточнять перед покупкой роутера. В принципе, большинство прошивок имеет так называемые ALG (Application Layer Gateway) или NAT Passthrough, помогающие «пробросить» специфический трафик вроде VPN-подключений или аудио- и видеопотоков сквозь роутер.

#Безопасность

Про практический аспект защиты домашней сети рассказано в этом материале. Здесь же вкратце вспомним, что связано с защитой сети в домашних маршрутизаторах. Ну, во-первых, клиенты локальной сети и так сидят за NAT, поэтому для корректной работы некоторых приложений надо делать проброс или перенаправление портов. Обычно в прошивке есть предустановленный список правил для якобы популярных приложений. Фактически же списки эти не обновляются, по ощущениям, лет эдак 10-15. Впрочем, многие приложения и сами умеют открывать нужные порты посредством UPnP, который есть в любой прошивке. Реже попадается поддержка NAT-PMP, для любителей «яблочной» продукции. Практически всегда один ПК можно вынести в «демилитаризованную зону» (DMZ), когда весь входящий трафик извне попадает именно на него. По возможности избегайте этого. Во встроенном брандмауэре, как правило, доступна фильтрация запросов по черным/белым спискам IP, MAC, портам, некоторым протоколам, URL или ключевым словам. Обычно поддерживаемое количество таких правил не так уж велико — в пределах полусотни.

Родительский контроль нередко построен на тех же самых правилах, но с добавлением расписания. Иногда подразумевается вообще только запрет на доступ в Интернет в определённое время для выбранных ПК, без какой-либо фильтрации. Гораздо полезнее поддержка сторонних DNS-служб вроде «Яндекс.DNS», OpenDNS, Rejector или SkyDNS, но, увы, она попадается нечасто. Также имеется защита от простейших сетевых атак и поддержка SPI. В сторонних прошивках можно встретить L7-filter. Гостевые сети частенько можно сделать изолированными от основной. Для встроенных серверов FTP/SMB всегда предусмотрено создание пользователей и чаще всего разделение их прав — не пренебрегайте этим. Для удалённого доступа к роутеру извне полезны DDNS-сервисы, но их список тоже частенько очень мал и редко обновляется. Отдельная беда-беда-огорчение с уязвимостями в ПО роутеров, которые регулярно находят независимые исследователи, но с этим, в общем-то, своими силами не справиться. Разве что поотключать от греха подальше все неиспользуемые функции и не забывать обновлять ПО маршрутизатора.

 Новое поколение сетевой защиты в домашних роутерах

Новое поколение сетевой защиты в домашних роутерах

В некоторых прошивках выводятся уведомления о небезопасных настройках тех или иных компонентов, а в самых современных моделях можно найти зачатки полноценных систем защиты локальной сети и самого роутера. Уже сейчас имеются решения, включающие в себя модули проверки настроек маршрутизатора и его компонентов, обновляемая база вредоносных ресурсов и блокировка доступа к ним, DPI и анализ трафика с целью выявления деятельности зловредов в домашней сети. Для грядущего Интернета вещей такая функциональность весьма полезна. В то же время наличие таких возможностей вызывает определённые опасения, так как в случае получения злоумышленником удалённого контроля над подобными модулями ситуация станет весьма плачевной.

#Дополнительные возможности

Тут уж кто во что горазд, то и делает. Наиболее востребованны серверы FTP/SMB, менеджеры закачек и DLNA. И они же сильнее всего нагружают роутер, так что, может быть, стоит всё-таки подумать и не гнаться за дополнительной функциональностью? Также в последнее время всё чаще появляются всякие облачные сервисы для синхронизации файлов и удалённого доступа к ним. Иногда попадаются сторонние решения для реализации Time Machine и iTunes-сервера, а то и просто для сетевого бекапа. Ещё одна относительно популярная фишка — поддержка VPN-подключений к корпоративным сетям (IPSec) или же собственный VPN-сервер в роутере для удалённого подключения к домашней сети. В общем, все производители пытаются добавить какие-нибудь дополнительные функции, не говоря уж про Entware/Optware. Бонусом обычно идут какие-нибудь мобильные приложения, которые по большей части сделаны для галочки и никакой пользы не приносят. К дополнительным же возможностям можно отнести и «секретные» странички в веб-интерфейсе, которые не такие уж секретные и легко находятся в поисковиках, а также доступ к нутру прошивки посредством SSH/Telnet. Это — штука иногда полезная, но для обычного пользователя скорее опасная и ненужная. Ну и, пожалуй, последнее — это возможность работы не только в качестве обычного роутера, но и в режиме простой точки доступа или беспроводного моста. Увы, по некоторым причинам последний вариант штатно реализуется всё реже.

#Заключение

И это всё? Нет, далеко не всё. О прошивках и их компонентах можно рассказывать бесконечно. У кого как реализована та или иная функция; кто вынес обработку некоторых задач на уровень ядра, а кто решил всё оставить в пользовательском пространстве; где какие уязвимости и типичные ошибки — нюансов тысячи. Не будет точного ответа и на вполне ожидаемый вопрос: «Чья прошивка лучше?» Да ничья, все плохи и хороши в чём-то, идеала нет. Есть, конечно, какое-то, простите, дно, ниже которого вообще нет смысла рассматривать ПО. Перед покупкой роутера не поленитесь и изучите его возможности, поищите в Сети информацию, да хоть в техподдержку напишите. Ну и в целом рассматривать надо не только прошивку, а всё вместе — «железо», ПО, стоимость, качество поддержки, гарантийные обязательства и, естественно, цену. Впрочем, если так хочется получить ответ, то вот вам субъективный (еще раз подчеркиваем — субъективный! — прим. ред.) рейтинг прошивок:

  • ASUSWRT, Mikrotik RouterOS, ZyXEL NDMSv2 — ПО ASUS хорошо набором дополнительных функций и работой с сообществом; RouterOS даёт полный контроль над роутером, но сложна для новичков; NDMSv2 где-то посередине между первыми двумя;
  • NETGEAR, TP-Link, Linksys — функций поменьше, тем не менее всё не так уж плохо;
  • Upvel, Huawei — слабые прошивки с малым числом функций и зачастую плохой оптимизацией.

#Дополнительные ресурсы

  • WikiDevi — прекрасная база по «железу» роутеров;
  • Вики проектов OpenWRT и DD-WRT, а также сайты других альтернативных прошивок — опять-таки хорошая база по аппаратной части + много информации о процессе разработки и внутренней кухне прошивок;
  • ZyXEL KB — база знаний по продуктам ZyXEL, но в ней есть немало сведений о типичных проблемах и принципах работы маршрутизаторов;
  • Binwalk и FMK — утилиты для анализа и модификации прошивок;
  • Лекция «Linux во встраиваемых системах».

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

Спасибо сотрудникам компаний ASUS и ZyXel за помощь в подготовке данного материала.



Оригинал материала: https://3dnews.ru./905793