Всем привет. Хочу поделиться своим опытом по настройке ограничений скорости на маршрутизаторах Cisco.
Итак, для начала немного расскажу о том, зачем это понадобилось. Скажем, построили мы небольшую Hub-and-Spoke сеть. Каналы связи у нас небольшие, например, 2 Мбит/c каждый. Сеть небольшого предприятия, которое со временем начинает разрастаться и трафик в этих каналах тоже увеличивается.
Пример из жизни. Есть центральный офис и несколько филиалов. Основной трафик — это ERP-системы и обновления софта. Каналы 2 Мбит/c не нагружены, все работает, всех устраивает. Тут в филиале появляется сервер видеонаблюдения, с которого идут видеопотоки на центральный офис, когда там служба безопасности просматривает камеры. При этом канал загружается под 100% и начинаются проблемы. То есть, необходимо весь трафик, идущий к видео серверу урезать.
Как это сделать. Сразу же приходят на ум два варианта:
- rate-limit
- traffic-shape
Чем эти два способа отличаются?
Все просто: traffic-shape не умеет ставить пакеты в очередь. Вот все, что вышло за рамки указанное пропускной способности — он дропает. А вот rate-limit умеет ставить пакеты в очереди и может отправлять пакеты всплесками, когда появится свободная полоса.
Rate-limit команда вводится в режиме конфигурирования физического интерфейса и имеет следующий синтаксис:
rate-limit input|output [access-group [rate-limit] acl-index] [limit-bps] [nbc] [ebc] conform-action [action] exceed-action [action]
Разберем более детально:
- access-group — указываем номер нашего ACL, в который ловим трафик, который будем ограничивать.
Далее идут три значения скорости limit bps, nbc, ebc
- limit bps — скорость ограничения(в битах!)
- nbc — допустимый предел трафика, все что свыше — будет попадать в очередь
- ebc — максимальный предел трафика
Для расчета всех значений используем такую формулу:
nbc=limit(bit/s)/8(bit/s)*1,5sec
ebc=2nbc
Или же используем готовый калькулятор .
Далее по синтаксису:
- conform-action — что делать с трафиком при соответствии ограничения
- exceed-action action — что делать с трафиком при превышении ограничения.
И тут есть несколько действий:
- drop — отбросить пакет
- transmit — передать пакет
- set-dscp-transmit — пометить пакет
Теперь давайте посмотрим на практике. Возьмем GNS3, один маршрутизатор и две виртуальные машины.
Топология простейшая, чтобы просто показать как это работает.
Ограничим весь трафик из сети 192.168.40.0/24 в сеть 192.168.78.0/24. Для этого на R1 создаем ACL.
- R1(config)#access-list 101 permit ip 192.168.40.0 0.0.0.255 192.168.78.0 0.0.0.255
- R1(config)#access-list 101 deny ip any any
Ограничиваем абсолютно весь трафик. Пример простой, могут быть более сложные ACL, чтоб ограничивать скорость по каким-то сервисам, портам и пр.
Проверим скорость в сети до ограничений.
На хосте C1 у нас работает FTP-сервер, С2 — будет ftp-клиентом. Скорость виртуальной сети у меня 1Мбит/c
Видим что скорость закачки около 1Мбит/c.
После этого вешаем на физический интерфейс rate-limit, который смотрит в сеть 192.168.40.0/24
- R1(config)#int fa 0/0
- R1(config-if)#rate-limit output access-group 101 64000 12000 24000 conform-action transmit exceed-action drop
Теперь мы ограничили скорость до 8Кбайт/сек. Проверяем.
Скорость стала 64 Кбит/с. Все работает.
Примечание: rate-limit нельзя повесить на логический интерфейс, только на физический.
Благодарю за внимание.
Автор: mikonoid