Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Скрипт управления скоростью для базовых станций на Mikrotik

 28 Июнь 2012    MikroTik, Scripts

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

Кроме того, при работе на територии с перекрытой деревьями видимостью, уровень сигнала в течение суток может измениться в значительных пределах. В жаркий день листья у деревьев подсыхают и опускаются – сигнал растет. А вечером или во время дождя влажность повышается, листья поднимаются – сигнал падает.

Таким образом родилась идея скрипта, который бы в зависимости от уровней сигналов от клиентов менял бы ограничение скорости. Причём ограничение скорости должно быть «на клиента» и не зависеть от IP-адресов (для надежности). Эта версия скрипта не требует создавать статическую WDS запись.

Итак, приступим..

 

Использовать базу мы будем в режиме WDS. Базовая станция работает в режиме ap-bridge.

Все клиентские станции работают в режиме Station WDS. На закладке WDS радоинтерфейса базовой станции выбран режим wds-mode=dynamic wds-default-bridge=bridge1

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

Заходим в Bridge, нажимаем Settings, ставим галочку Use IP firewall.

 

Use IP firewall

Рис.1. Use IP firewall.

 

Вот собственно и все. Далее заходим в System/scripts и пишем (скрипт см. ниже).

 

System/scripts

Рис.2. System/scripts.

 

Нажимаем apply, затем Run. Если все прошло успешно, то в queue будут добавлены правила для ограничения клиентов.

 

Queue List

Рис.3. Queue List.

 

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

/system scheduler add disabled=no interval=10m name=schedule1 on-event=script1

 

А вот, собственно, и сам скрипт:

:local tx;

:local txccq;

:local rx;

:local rxccq;

:local total;

:local rate;

:foreach i in=[/interface wireless registration-table find] do={

:set tx [/interface wireless registration-table get number=[$i] tx-rate]

:set txccq [/interface wireless registration-table get number=[$i] tx-ccq]

:set rx [/interface wireless registration-table get number=[$i] rx-rate]

:set rxccq [/interface wireless registration-table get number=[$i] rx-ccq]

:local mac [/interface wireless registration-table get number=[$i] mac-address]

:local wds ([interface wireless wds find wds-address=$mac])

:local name ([/interface wireless registration-table get number=[$i] radio-name])

:local pos5 [:find $tx "."]

:local pos6 [:len $tx]

:set rate ( ([:pick $tx 0 ($pos5)]))

:local TXrateCCQ ($rate * $txccq * 4 * 1000)

:local pos5 [:find $rx "."]

:local pos6 [:len $rx]

:set rate ( ([:pick $rx 0 ($pos5)]))

:local RXrateCCQ ($rate * $rxccq * 1 * 1000)

:set total ([$RXrateCCQ]."/".[$TXrateCCQ])

:local nname ($name)

:if ([/queue simple find name="$nname"]!="") do={queue simple set $name max-limit=[$total] interface=$wds } else={ queue simple add name=$name max-limit=[$total] interface=$wds}

}

Здесь можно поменять Ограничение скорости передачи:

TXrateCCQ ($rate * $txccq * 4 * 1000)

RXrateCCQ ($rate * $rxccq * 1 * 1000)

 

Считаем его так: скоростьПоРадио умножаем на CCQ. CCQ у нас в процентах, поэтому нам нужно ещё разделить на 100. Потом умножаем на коэффициент перевода канальной скорости в реальную, на коэффициент разрешения использовать эфир и на 1м для перевода в байты.

Поэтому у нас было-бы: скорость * ССQ/100 *0.5 * 1000000.  Убираем лишнее, оставляем ($rate * $txccq * 4 * 1000). Для приема я оставил коэффициент 1, для передачи – 4. Этот коэффициент можно менять на свой вкус в диапазоне от 0,5 до 8.

Принцип работы: скрипт перебирает таблицу регистрации и для каждого клиента создает (или меняет) правило в queue simple, которое ограничивает скорость на виртуальном интерфейсе.

 

Артём Смирнов специально для ASP24.