Jump to content
Roman_Petrov

Ограничение скорости клиентов Wi-Fi/LAN по расписанию

Recommended Posts

Внимание!

Данный способ является альтернативой новой NDM команде CLI schedule, которая на данный момент успешно развивается и дополняется возможностями. Как это сделать теперь штатными средствами роутера, читайте в моем сообщении ниже Trafficshape по расписанию встроенными средствами роутера, используя командную строку CLI.

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

 

За основу используется материал Александра Рыжова из данной темы по ссылке здесь >>> и материал Zyxmon из темы на его форуме >>>

На самом деле здесь нет ничего сложного. Каждый, более или менее знакомый с основами работы OPKG и консолью PuTTY, что-то слышал о CLI и командной строке, легко справиться. На базе данного материала, можно заставить планировщик задач выполнять практически любые задачи, которые доступны для вашего роутера через командную строку CLI. Но рассмотрим конкретно возможность ограничения скорости для конкретных клиентов любого сегмента сети по расписанию, так как в моем конкретном случае было интересно обложить правилом trafficcontrol по расписанию какой ни будь хост в локальной сети, так как, если интернет выключается полностью или совсем отключается Wi-Fi, умные устройства переходят на мобильные данные и съедается незаметно весь траффик.

 

Вариант 1.

Для варианта работы на файловых системах EXT2/3, не будет работать на NTFS !!! (vixie's cron)


• Инсталлируем планировщик cron:

opkg install cron

• Если у вас еще непроисталлирован nano:

opkg install nano

• редактируем его конфигурационный файл:

nano /opt/etc/crontab

 

Отредактировать файл /opt/etc/crontab, добавив в него следующие строчки:

# Your traffic control schedule for selected host #
30 00 * * * root ndmq -p 'ip traffic-shape host ee:cc:bb:dd:99:44 rate 64' -P message
00 06 * * * root ndmq -p 'no ip traffic-shape host ee:cc:bb:dd:99:44' -P message

 

Внимание!

Есть небольшой нюанс при ограничении скорости хостов, они (их MAC адрес) должны быть зарегистрированы в системе на вкладке Устройства (hosts) или с помощью команды в CLI:   known host {name} {mac-address} (имя произвольное), иначе скорость на хост ограничена не будет и будет выдана ошибка в логе:

Jul 29 16:10:00ndm       TrafficControl::Manager: no "cc:5d:4e:4c:f5:35" MAC address in the known host list.

 

• Запустить cron вручную или перезагрузить роутер: /opt/etc/init.d/S10cron start
 

----------

Вариант 2.

Для варианта работы на файловых системах NTFS (busybox crontab). Этот вариант несколько сложнее первого, но на данной файловой системе должен работать без проблем и не вызывать ошибок ядра (так как на этой файловой системе нет правильной поддержки атрибутов для vixie's cron). Если у Вас ntfs - используйте именно этот вариант из установленного busybox.

• Если вы по ошибке на файловую систему  NTFS проинсталлировали cron и в результате этого у вас начали возникать ошибки ядра системы, то его необходимо удалить и переустановить busybox (для восстановления бинарника crontab) , восстановить симлинк:

opkg remove cron
opkg install --force-reinstall busybox

В результате у Вас восстановится симлинк, проверить можно вводом команды:

~ # >ls -al /opt/bin/cro*

Если все произошло успешно, то будет выдано нечто подобное:

lrwxrwxrwx    1 root     root            16 Jul 26 11:51 /opt/bin/crontab -> /opt/bin/busybox

• Если у вас еще непроисталлирован nano, то сделаете это:

opkg install nano

• Для создания заданий crontab для него необходимо создать файл заднаний crontabs и его папку на вашем внешнем диске

mkdir -p /opt/var/spool/cron/crontabs


• Первый раз создать и потом всегда редактировать файл настроек нужно следующим вводом команды:

EDITOR='/opt/bin/nano' crontab -e


Формат файла cronttab немного отличается. Для апплета на одно поле меньше, т.к. не указывается от какого юзера выполнять задание. В первый раз откроется естественно совершенно пустой файл, в который мы пропишем следующее:

PATH=/opt/bin:/opt/sbin:/sbin:/usr/sbin:/bin:/usr/bin
# Your traffic control schedule for selected host #
30 00 * * * ndmq -p 'ip traffic-shape host ee:cc:bb:dd:99:44 rate 64' -P message
00 06 * * * ndmq -p 'no ip traffic-shape host ee:cc:bb:dd:99:44' -P message

 

Внимание!

Есть небольшой нюанс при ограничении скорости хостов, они (их MAC адрес) должны быть зарегистрированы в системе на вкладке Устройства (hosts) или с помощью команды в CLI:   known host {name} {mac-address} (имя произвольное), иначе скорость на хост ограничена не будет и будет выдана ошибка в логе:

Jul 29 16:10:00ndm       TrafficControl::Manager: no "cc:5d:4e:4c:f5:35" MAC address in the known host list.

 

Потом жмем Ctrl+X, соглашаемся Y, сохраняем файл. Посмотреть, что он действительно появился и сохранился, можно в папке на вашем диске, которую мы ранее создали /opt/var/spool/cron/crontabs (папка на вашем_Диске/var/spool/cron/crontabs)

• Чтобы crond каждый раз запускался автоматически,  файл-скрипт S05crond в папке /opt/etc/init.d

nano /opt/etc/init.d/S05crond

и наполним его следующим содержанием

#!/bin/sh
 

CRON="/opt/sbin/crond"

export PATH=/opt/bin:/opt/sbin:/sbin:/usr/sbin:/bin:/usr/bin

start() {
	$CRON -L /dev/null
}

 stop() {
	killall crond
}

 case "$1" in
	start)
	    start
	    ;;
	stop)
	    stop
	    ;;
	restart)
	    stop
	    start
	    ;;
	*)
	    echo "Usage: $0 {start|stop}"
	    ;;
esac


Потом жмем Ctrl+X, соглашаемся Y, сохраняем файл. Посмотреть, что он действительно появился и сохранился, можно в папке /opt/etc/init.d (Ваш_Диск/etc/init.d)

• Делаем его исполняемым

chmod +x /opt/etc/init.d/S05crond

• Запускаем планировщик заданий через созданный скрипт в init.d:

/opt/etc/init.d/S05crond start

или просто перегрузив ваш роутер.

******

Коментарии.

1. Есть небольшой нюанс при ограничении скорости хостов, они (их MAC адрес) должны быть зарегистрированы в системе на вкладке Устройства (hosts) или с помощью команды в CLI:   known host {name} {mac-address} (имя произвольное)

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

Jul 29 13:22:00ndmCore::Server: started Session 127.0.0.1:38686.
Jul 29 13:22:00ndmTrafficControl::Manager: "ee:cc:bb:dd:99:44" host rate limited to 64 Kbits/sec.
Jul 29 13:22:00ndmCore::Session: client disconnected.
Jul 29 13:22:02ndmkernel: SWNAT bind table cleared

3. Оба варианта проверены и работают на Ultra 2, на других не тестировались. Прошу по возможности отписаться, как получилось, и комментировать, что можно было бы улучшить.

Успехов!!!

  • Thanks 2

Share this post


Link to post
Share on other sites
2 часа назад, Roman_Petrov сказал:

Инсталлируем планировщик cron и эмулятор командной строки CLI ndmq:

здесь и ниже, установка ndmq лишние (если только его не удаляли), т.к. этот пакет ставится изначально при развертывании системы из doinstall , для mipsbe аналогично

Share this post


Link to post
Share on other sites
57 минут назад, TheBB сказал:

здесь и ниже, установка ndmq лишние (если только его не удаляли), т.к. этот пакет ставится изначально при развертывании системы из doinstall , я mipsbe аналогично

Да, вы действительно правы. Я похоже его случайно удалял из установки и забыл потом, поэтому себе пришлось ставить. Тему подправил.

 

Edited by Roman_Petrov

Share this post


Link to post
Share on other sites

Trafficshape по расписанию встроенными средствами роутера, используя командную строку CLI. Работает это на новых прошивках, которые поддерживают данную функцию, начиная с 05.08.2016 точно все драфтовые (экспериментальные) прошивки 2.06 и выше - 2.07 и 2.08. По 2.05 я ничего сказать не могу, т.к. нет возможности пока попробовать. Например, для 2.08 это как минимум версия 2.08.A.2.0-0 .... Так что для возможности данного функционала обновите прошивку до нужного уровня.

 

1.Создать расписание.

(config)> schedule trafficshape
 Core::Schedule::Manager: Created schedule "trafficshape".

2.Прописываем в нем время старта и конца действия.

(config-sched)> action start 30 0 *

Core::Schedule::Manager: Updated schedule "trafficshape".

(config-sched)> action stop 0 6 *

Core::Schedule::Manager: Updated schedule "trafficshape".

(config-sched)>exit

Изъять действие из списка расписания можно так:

schedule trafficshape no action start 30 0 *

или

schedule trafficshape no action stop 00 6 *


3. Посмотреть какие есть вообще задания с их названиями и их расписания можно так:

show schedule

только выбранное наше задание (trafficshape)

show schedule trafficshape


4. Узнаем мас адрес известного уже хоста и  прописываю к нему правило шейпинга и привязываю его наподобие как в случае с ip hotspot (в другой теме)

(config)>ip traffic-shape host cc:5d:4e:4c:f5:34 rate 64 schedule trafficshape

Для отмены правила к этому хосту делаем так:

(config)>no ip traffic-shape host cc:5d:4e:4c:f5:34


5. Сохраните настройки

(config)> system configuration save

 

P.S.

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

Traffic shaping: 64 kbit/s

Как посмотреть через CLI ассоцированные к traffic-shape по расписанию устройства, пока за незнанием и ненадобности, информации нет, возможно знающий человек скажет и я пополню описание.


Возможно также настроить по расписанию ограничение скорости похожим образом, создав свое задание GuestSchedule, для целого интерфейса

> interface Guest traffic-shape rate 4096 schedule GuestSchedule

По событию start правила применяются, по событию stop - ограничения снимаются.

 

Внимание!

1. Удалив или изменив скорость через веб интерфейс, отменяется и ограничение, настроенное по расписанию в CLI!

2. Есть небольшой нюанс при ограничении скорости хостов, они (их MAC адрес) должны быть зарегистрированы в системе на вкладке Устройства (hosts) или с помощью команды в CLI:   known host {name} {mac-address} (имя произвольное), иначе скорость на хост ограничена не будет и будет выдана ошибка в логе:

Jul 29 16:10:00ndm       TrafficControl::Manager: no "cc:5d:4e:4c:f5:35" MAC address in the known host list.

  • Thanks 2

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
57 минут назад, utya сказал:

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

Можно попробовать воспользоваться функционалом CLI, командой ip hotspot deny. Но я не буду утверждать, что в данном роутере эта возможность есть (как я понимаю, свежее позних версий 2.05 для него уже ничего нет?).

Share this post


Link to post
Share on other sites

Это команда не вырубит полностью доступ к локальной сети, я смогу с локального компьютера к ней подключится?

Share this post


Link to post
Share on other sites
19 минут назад, utya сказал:

Это команда не вырубит полностью доступ к локальной сети, я смогу с локального компьютера к ней подключится?

Не должна, функция работает анологично как с веб интерфейса вы на Giga2 делаете.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...