Привет, Хабр! Меня зовут Алексей, и я занимаюсь беспроводными технологиями. Исходя из моего опыта, могу сказать, что большинство обладателей OpenWrt-роутеров используют для настройки беспроводных интерфейсов достаточно удобный веб-интерфейс LuCI. И только продвинутые пользователи рискуют править конфиги вручную. Но, как правило, даже они часто ограничиваются лишь указанием основных данных: типа стандарта, канала и, собственно, настроек самой Wi-Fi сети. И совершенно зря, так как wireless-конфиг имеет множество самых разнообразных параметров, позволяющих при правильном использовании увеличить покрытие сети или скорость в несколько раз. В этой статье разберем точную настройку файла /etc/config/wireless в OpenWrt, направленную на создание максимально стабильного покрытия Wi-Fi сети. И посмотрим на предрассудки, которые сложились относительно некоторых параметров. Особенно подчеркну, что мы не будем разбирать все параметры (их действительно очень много), а ограничимся только обозначенной задачей.
Итак, файл /etc/config/wireless в OpenWrt - это основной конфигурационный файл для настройки всех беспроводных интерфейсов. Он состоит из двух типов секций: wifi-device (физическое радио) и wifi-iface (логический интерфейс на его основе). Файл автоматически генерируется при первой загрузке после установки драйверов. По умолчанию точка доступа создаётся, но отключена для безопасности.
Мы начнём рассмотрение с секций типа wifi-device
Вообще, секции устройств и интерфейсов могут идти вперемешку. Но всё же правилами хорошего тона считается указание сначала всех устройств, а потом всех интерфейсов. Или же указание устройства и интерфейсов по порядку для каждого диапазона.
type
Обычно секция wifi-device начинается с параметра type, который указывает тип драйвера, управляющего Wi-Fi чипом. Значение генерируется при первом запуске автоматически, и менять руками его не нужно. Если только у вас под рукой нет драйвера от производителя. Кстати, не всегда встроенные в OpenWrt драйвера показывают хорошую производительность, поэтому если у вас есть более актуальный драйвер, имеет смысл его заменить.
phy
Далее идёт параметр phy, указывающий физическое имя устройства, и его мы точно не трогаем.
А вот далее идёт, на мой взгляд, один из самых мистифицированных параметров данного конфига, и вместе с тем это тот параметр, который содержит несколько «подводных граблей» (простите мне этот каламбур). Это параметр
country
Общаясь с разными, в том числе уверенными пользователями OpenWrt, я выяснил, что многие до конца не понимают, что это и как работает. Существуют мнения, что это просто справочный параметр, который ни на что не влияет, или же что это параметр заданый в RU, который делает сеть совместимой только с российскими Wi-Fi устройствами. Или даже то, что этот параметр отвечает за стандарты связи, а поскольку в РФ они устаревшие, нужно указывать страну Япония, так как там самые современные.
На самом же деле этот параметр позволяет настроить передатчик в соответствии с местным законодательством, и влияет он на две вещи: мощность передатчика (для справки, она в РФ ограничена 20 децибелами) и на перечень разрешённых каналов. Поэтому, кстати, указывать Японию не стоит, так как там более жёсткая регламентация беспроводных сетей. Если мне не изменят память имеется ограничение всего в 10dB.
Какие же здесь есть подводные камни? Их два. Первое. Значение, заданное в параметре country, имеет повышенный приоритет над другими параметрами. То есть если вы указали Россию (для России максимальная разрешённая мощность, как я уже говорил, равна 20 dB), но при этом ваш передатчик умеет в 25 dB, то вещание будет на 20 dB. И даже если вы далее укажете мощность передатчика в явном виде в 25 dB, он всё равно будет вещать на 20. Это актуально и для перечня каналов.
Второй подводный камень связан с неуказанием данного значения или с оставлением значения по умолчанию. Вообще, в этом параметре мы можем указать название страны в виде двухбуквенного индекса, или же указать значение 00, что соответствует мировому режиму, имеющему самые строгие ограничения, удовлетворяющие любой стране, или оставить пустое значение.
Но давайте разберёмся, что будет, если указать пустое значение. Вариантов здесь два: либо будет использовано мировое значение (скорее всего), либо будет использовано значение по умолчанию, заданное самим чипом.
Значение
00соответствует мировому режиму и указывает самые строгие ограничения.
Этот параметр нужно обязательно проверить и убедиться, что указано значение, соответствующее вашей стране. Мне достаточно часто приходилось встречаться с ситуацией, когда этот параметр указан в мировом значении, особенно для китайских нелокализованных роутеров. Как следствие, обладатель роутера сразу теряет мощность передатчика.
channel
Следующий параметр - channel, и тут всё просто, и более-менее он всем известен. Задаёт канал, на котором будет вещать передатчик.
На любительском уровне: скачиваем себе на телефон Wi-Fi анализатор, определяем самый незагруженный канал и указываем его.
Помним, что не всё так просто с каналами в диапазоне 5 ГГц, так как часть каналов могут работать в режиме DFS.
DFS (Dynamic Frequency Selection или Динамический выбор частоты) в Wi-Fi это механизм, позволяющий роутерам использовать свободные каналы 5 ГГц (обычно 52–144), разделяемые с радарными системами. Он автоматически сканирует эфир, предотвращая помехи метеорологическим и военным радарам, переключая Wi-Fi на другие частоты, если радар активен.
Принцип действия DFS такой: перед началом использования канала роутер может его сканировать примерно минут 10, и в это время канал будет недоступен. Если же вдруг радар будет обнаружен, канал должен быть заблокирован минимум на 30 минут. Соответственно, и Wi-Fi на 5 ГГц может пропадать в моменты сканирования или блокировки.
Вообще, моё личное мнение, что данные каналы по возможности лучше избегать. Вы, конечно, можете мне возразить и сказать, что рядом с вашим роутером нет ни аэропорта, ни военной базы, ни метеорологической станции. Но на практике DFS часто детектирует самые различные радиоисточники: от сигнализаций, некорректно работающих сенсоров умного дома и т.д.
Но, возвращаясь к параметру channel, хочу обратить внимание ещё на две вещи. Этот параметр можно указать в значении auto. И так делать точно не стоит, особенно в многоквартирных домах. Так как в этом случае роутеры заводят хоровод и начинают все вместе прыгать по незанятым каналам. На практике это выглядит так: ваш роутер и роутеры ваших соседей вещают на одном и том же канале. Они понимают, что канал перегружен. Они видят рядом абсолютно свободный канал. И все вместе решают перейти на него. В итоге через какое-то время на этом канале оказываются все роутеры, и история повторяется.
Однако есть ещё один нюанс, который предлагает компромиссный вариант и который мало кто знает. В параметре channel можно указать несколько частот, и автовыбор будет осуществляться уже из списка данных значений.
band
Тут всё просто: указывается частотный диапазон работы. Если чип двухдиапазонный, для каждого делается своя секция wifi-device.
Hwmode и htmode
Оба задают режим работы, но первый является уже устаревшим. Со вторым всё просто: буковки указывают стандарт Wi-Fi, циферки — ширину канала.
И вот тут начинается самое интересное. Чем больше ширина канала, тем потенциально будет больше скорость. Но на практике большая скорость будет только в непосредственной близости от роутера. Так как справедливо и такое правило: чем шире канал, тем больше ошибок и коллизий будет возникать на удалении от роутера. И тем меньше будет зона покрытия сети. Вы можете замерить мощность своего передатчика Wi-Fi анализатором на расстоянии, скажем, метров 10, и он будет показывать приемлемые 65 дБ, но при этом фактическая скорость может стремиться к нулю. Связано это с двумя причинами. Первое: концентрация энергии передатчика в меньшей полосе частот выше. Вторая: с расстоянием в широком канале растёт количество ошибок. И оно будет расти в геометрической прогрессии, если у вас на данной частоте вещают соседские роутеры. Для многоквартирного дома обычной является ситуация, когда на 5 ГГц, на канале, который активно используется соседями, уже через 5 метров, за соседней стеной, просто невозможно подключиться при установке параметра в HE160.
Поэтому рекомендация здесь такая: нужна дальность - выбирайте минимально узкую полосу. Особенно если эфир перегружен. Нужна скорость и нет соседей - выбирайте полосу пошире.
Вообще, в корпоративных сетях управление последними параметрами осуществляется централизованно с помощью Wi-Fi контроллеров. Но для обычных пользователей в SOHO-сегменте такие плюшки недоступны. Хотя как раз сейчас появляются решения, которые предлагают услуги так называемого управляемого Wi-Fi для бытовых роутеров. За рубежом это Androix, Dojo и Nomadix, а у нас - Ternex и предложения от провайдеров, которые предлагают управлять твоим Wi-Fi.
noscan
Параметр отвечает за отключение проверки занятости канала (CCA - Clear Channel Assessment). По умолчанию 0, что значит «нужно проверять». В этом случае, если есть соседи, полоса будет автоматически понижена до 20. На практике параметр можно игнорировать, так как часто он не используется для диапазона 5 ГГц, а в 2.4 и так всё плохо.
power_save
Указывает, будет ли роутер использовать режим энергосбережения. Значения: 0 — отключено, 1 — включено, 2 — адаптивный режим. Параметр реально работает. Например, в пассивном режиме при включённом режиме энергосбережения, по ощущениям, энергопотребление падает в два раза. По крайней мере, моего повербанка для роутера хватает на 6 часов вместо 3. Из минусов: моменты пробуждения могут заставлять роутер тупить, что отразится на скорости клиентов.

tx_antenna / rx_antenna
Ещё одна пара параметров, с которой часто связаны заблуждения. Фактически эти параметры указывают антенны, которые будут использоваться. И бытует мнение, что для мощности можно указать только одну антенну, и тогда увеличится и площадь покрытия. Делать это, на мой взгляд, можно только в трёх случаях: вы столкнулись с ситуацией, когда у вас на плате несколько разъёмов антенн, но производитель подключил только одну; или же у вас одна из антенн вышла из строя; или же вы подключаете внешнюю антенну. Главное помнить: как только вы отключаете хотя бы одну из антенн, вы ломаете MU-MIMO и значительно откатываетесь и в скорости, и в производительности.
distance
Задаёт расстояние до клиента в метрах. Отвечает за таймауты при ожидании пакетов. Обычно не используется, так как для настройки внутри помещения он не нужен. Использовать нужно только если вы собираете радио-мост и используете расстояние «точка-точка». В этом случае есть риск, что пакеты просто не будут успевать доходить до соседнего роутера, а он будет думать, что они потеряны. Указание расстояния в этом случае покажет роутеру, что его сосед находится на удалении, и даст дополнительное время ожидания.
frag
Задаёт порог фрагментации в диапазоне от 256 до 2346, по умолчанию используется максимальное значение. И его лучше оставить. Однако если вы находитесь в супер зашумлённой среде, то можно попробовать поиграться с этим параметром, сделав его чуть ниже. Логика здесь простая: в случае ошибки нужно будет передать только один пакет меньшего размера, чем весь большой пакет. Как правило, указание меньшего размера приводит к снижению скорости, но позволяет увеличить стабильность.
Вместо заключения
В завершении статьи хочу поделиться железным правилом радиолюбителя: «При настройке крутите только одну ручку». Действительно, в конфиге OpenWrt много взаимосвязанных параметров, и часто выбрать оптимальные можно только опытным путём. Но чтобы понять, улучшает данный параметр ситуацию или ухудшает, исследуйте отдельно только его. Поняв, что с ним ситуация улучшилась, переходите к следующему. Например, выберите оптимальный канал, поработайте с ним и поймите, что он вас устраивает, далее принимайтесь за ширину полосы и т.д.
P.S. Если статья показалась вам интересной и нескучной, напишите об этом в комментариях, и я сделаю разбор для секции wifi-interface.