Ограничение входящего и исходящего трафика (ширины пропускания канала) в RG24xx/44xx осуществляется с помощью инструмента traffic control (tc) из iproute2. Ограничение работает только в режиме роутера (маршрутизатора).
- Порядок первого конфигурирования устройства
- Изменение параметров
- Отключение ограничений
Порядок первого конфигурирования устройства:
1) Подключаемся к консоли шлюза RG (com/telnet/ssh)
2) Создаем локально на устройстве скрипт. Ввиду особенностей файловой системы локальный скрипт должен располагаться только в каталоге /etc/config, т.к. только содержимое этого каталога сохраняется после перезагрузки устройства:
vi /etc/config/user.sh
И копируем туда следующее:
# CLEAR
#!/bin/sh
tc=tc
lan=eth1
bw=2000kbit
$tc qdisc del dev $lan handle ffff: ingress
$tc filter del dev $lan parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $bw burst 10kb drop flowid :1
$tc qdisc del dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate $bw
# WAN--->LAN
#!/bin/sh
tc=tc
lan=eth1
bw=2000kbit
$tc qdisc add dev $lan handle ffff: ingress
$tc filter add dev $lan parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $bw burst 10kb drop flowid :1
# LAN--->WAN
#!/bin/sh
tc=tc
lan=eth1
bw=8000kbit
$tc qdisc add dev $lan handle ffff: ingress
$tc qdisc add dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate $bw
Комментарии:
- WAN--->LAN - ограничение трафика из внешней сети (WAN) во внутреннюю (LAN). Задается параметром bw. В примере bw=2000kbit (2000кбит/с)
- LAN--->WAN - ограничение трафика из внутренней сети (LAN) во внешнюю (WAN). Так же задается параметром bw. На примере bw=8000kbit (8000кбит/с)
- lan=eth1 - выбранный интерфейс. В данном примере eth1 соответствует внешнему интерфейсу, а br0 - внутреннему. Посмотреть можно командами ifconfig и brctl show в CLI
Выходим из редактора vi с сохранением файла.
3) После создания скрипта ему необходимо назначить права на запуск командой:
chmod 777 /etc/config/user.sh
4) В устройстве серии RG-24xx/RG-44xx предусмотрена возможность через конфигурационный файл настроить запуск произвольного скрипта, в который можно поместить любую желаемую последовательность команд. Для запуска нашего скрипта в файле конфигурации создана секция настроек UserScript.
- Заходим в файл конфигурации RG:
vi /etc/config/cfg.yaml
- Находим поле UserScript. Выставить опцию «Enable» в значение 1 для запуска скрипта. В параметре URL прописать путь к скрипту вида “File://etc/config/user.sh”. В итоге должно получиться следующее:
UserScript:
Enable: "1"
URL: "File://etc/config/user.sh"
5) В этом же файле конфигурации обязательно нужно выключить опцию EnableHWAccelerate которая находится в ветке Internet.Network. Меняем значения параметра EnableHWAccelerate с «1» на «0»:
EnableHWAccelerate:"0"
6) Выходим из редактора vi с сохранением файла конфигурации. Применяем и сохраняем конфигурацию:
reloadcfg
save
7) Запускаем скрипт командой:
./etc/config/user.sh
На этом настройка ширины пропускания канала на RG24xx/44xx с помощью утилиты tc закончена. После перезагрузки скрипт будет запускать автоматически.
Изменение параметров:
Для изменения параметров необходимо скорректировать значение bw в файле /etc/config/user.sh или закомментировать некоторые правила.
Например, сделать ограничение только входящей связи (из внешней сети) до 5Мбит/с можно следующим образом:
# CLEAR
#!/bin/sh
tc=tc
lan=eth1
bw=2000kbit
$tc qdisc del dev $lan handle ffff: ingress
$tc filter del dev $lan parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $bw burst 10kb drop flowid :1
$tc qdisc del dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate $bw
# WAN--->LAN
#!/bin/sh
tc=tc
lan=eth1
bw=5Mbit
$tc qdisc add dev $lan handle ffff: ingress
$tc filter add dev $lan parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $bw burst 10kb drop flowid :1
# LAN--->WAN
#!/bin/sh
# tc=tc
# lan=eth1
# bw=8000kbit
# $tc qdisc add dev $lan handle ffff: ingress
# $tc qdisc add dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate $bw
После изменения файла необходимо запустить скрипт командой:
./etc/config/user.sh
Отключение ограничений:
Для отключения ограничений необходимо закомментировать правила в файле /etc/config/user.sh:
# CLEAR
#!/bin/sh
tc=tc
lan=eth1
bw=2000kbit
$tc qdisc del dev $lan handle ffff: ingress
$tc filter del dev $lan parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $bw burst 10kb drop flowid :1
$tc qdisc del dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate $bw
# WAN--->LAN
#!/bin/sh
# tc=tc
# lan=eth1
# bw=5Mbit
# $tc qdisc add dev $lan handle ffff: ingress
# $tc filter add dev $lan parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $bw burst 10kb drop flowid :1
# LAN--->WAN
#!/bin/sh
# tc=tc
# lan=eth1
# bw=8000kbit
# $tc qdisc add dev $lan handle ffff: ingress
# $tc qdisc add dev $lan handle 1:0 root tbf burst 20k limit 20k mtu 1514 rate $bw
После этого необходимо запустить скрипт командой:
./etc/config/user.sh
Так же для полного восстановления скорости передачи данных необходимо проделывать пункты 4,5,6 из первого раздела в обратном порядке (при этом отключится работа скрипта после перезагрузкиустройства). Для этого необходимо:
- открыть редактирование файла /etc/config/cfg.yaml
vi /etc/config/cfg.yaml
- выставить в разделе UserScript опцию «Enable» в значение "0":
UserScript:
Enable: "0"
URL: "File://etc/config/user.sh" - выставить параметр EnableHWAccelerate в значение "1":
EnableHWAccelerate:"1"
- выйти из редактора vi с сохранением файла;
- применить и сохранить конфигурацию:
reloadcfg
save