Cisco: простое ограничение скорости канала (шейпинг)

Была Циска, а именно 2901. Была задача обеспечить 2000 человек (1500 из которых — WiFi-клиенты) интернетом на одном из форумов через интернет-канал шириной в 200 Мбит. Для этого было необходимо поднять на Cisco: dhcp сервер, nat, шейпинг канала без приоритезации Qos. Причины отказа от Qos: даже без него возникает высокая нагрузка на CPU роутера во время тестов, при скоростях, приближающихся к 200 Мбит. Я бы сказал следующее: nat+ шейпинг на основе police = 200 Мбит в максимуме (нагрузка CPU 90-100%). Соответственно, не имея возможности применять QoS, я применял две политики ограничения скорости: одну для http(s)-трафика, вторую для всего остального. Подробности под катом…

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

Постановка задачи:

  1. Устройства в кол-ве до 2000 штук. Из них до 1500 — WiFi-клиенты. Точки доступа WiFi неизвестны, обеспечивает сторонний подрядчик.
  2. Обеспечить круглосуточный доступ в интернет в течение нескольких дней проведения форума.
  3. Более подробные условия использования интернета этими устройствами не поддаются никакому прогнозированию, как и требования к скоростям каналов. Однако был сделан вывод выделения суммарно 200 Мбит для нужд 2000 абонентов. Итого 12 Кбайт\с на устройство в самом худшем случае, т.е. диалап ). Напоминаю, что на форумах и мероприятиях такого рода трафик потребляют достаточно равномерно и не все клиенты одновременно в единицу времени, соответственно скорости канала в теории должно хватить.

Технические средства:

  1. Cisco 2901.
  2. Интернет-канал со скоростью более 400 Мбит, из которого необходимо использовать не более 200 Мбит для поставленных выше задач.
  3. Целый парк рабочих станций и несколько 1U-серверов начального уровня, на которых можно поднять шлюз, фаервол, прокси.
  4. Гугл.

Выбор решения:

Понятно, что технических реализаций много: мы имеем возможность применить Unix, начиная с ipfw, заканчивая squid-ом; рассмотреть вариант использования чего-либо на Windows, и конечно Циска. Сразу хочу объяснить свою простую логику выбранного мной решения, т.к. остальные даже рассматривать более не будем:

  1. Если со всем справится Cisco 2901 — оставлю ее как единственный роутер, dhcp-сервер, nat и шейпер. Т.е. одно устройство обслуживает всю необходимую сетевую часть (DNS-серверов своих не будет).
  2. Если Cisco не справится с нагрузкой — рассмотрю вариант проксирования трафика на unix + squid + какой-нибудь простенький шейпер http-трафика на том же оборудовании.
  3. Если и с этим не справится циска — перенести из нее нат, оставить только роутинг.

Сразу скажу, что я остановился на первом пункте с маленькими оговорками: Cisco 2901 справилась с нагрузкой, судя по нагрузочным тестам. Однако 200 Мбит интернета она раздавала с высокой утилизацией при простом шейпинге трафика ресурсо-экономным police-методом. Соответственно, использовать shape-метод, а тем более QoS уже нельзя.

В постановке задачи как можно увидеть, много пробелов, и настроить дельный QoS, не имея даже примерных требований к сети, не представляется возможным. Продумал реализовать dhcp и nat на циске (там ничего сложного нет, пара строк в конфиге) и поделить простым ресурсо-экономным шейпингом канал в 200 Мбит на 2 части:

  1. http(s), почтовый (pop3, imap, smtp), dhs — трафик — в одной группе, ограниченной по скорости на 150 Мбитах\с;
  2. все остальное — а это торренты, фтп, скайпы, sip-трафик и все-все остальное — в другой группе, ограниченной скоростью на 50 Мбитах\с;
  3. в каждой из этих двух групп QoS не применяется, и соответственно, трафик делится между несколькими ip-устройствами внутренней сети абсолютно неконтролируемо. В теории, все интернет-потребители должны равномерно делить трафик между собой, на практике — все не всегда так радужно, в этой части есть много нюансов, заострять внимание на этом в данной статье нет смысла.

Настройка Cisco: ограничение скорости, nat, dhcp-server

Я думаю, можно сразу опубликовать весь конфиг Циски:

router01#show config
Using 5341 out of 262136 bytes
!
version 15.1
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname router01
!
boot-start-marker
boot-end-marker
!
!
logging buffered 51200 warnings
!
no aaa new-model
!
!
no ipv6 cef
ip source-route
ip cef
!
!
!
ip dhcp excluded-address 192.168.128.1 192.168.128.50
!
ip dhcp pool DHCP_POOL
network 192.168.128.0 255.255.240.0
dns-server 8.8.8.8 8.8.4.4
default-router 192.168.128.1
!
!
ip domain name yourdomain.com
ip name-server 8.8.8.8
ip name-server 8.8.4.4
!
multilink bundle-name authenticated
!
!
crypto pki token default removal timeout 0
!
crypto pki trustpoint TP-self-signed-242367043
enrollment selfsigned
subject-name cn=IOS-Self-Signed-Certificate-242367043
revocation-check none
rsakeypair TP-self-signed-242367043
!
!
crypto pki certificate chain TP-self-signed-242367043
certificate self-signed 01 nvram:IOS-Self-Sig#1.cer
license udi pid CISCO2901/K9 sn XXXXXXXXXXX
!
!
username admin privilege 15 password 0 ***
!
redundancy
!
!
class-map match-any INET-PORTS01
match access-group name PORTS01
!
!
policy-map CHANNEL01-POLICE
class INET-PORTS01
police cir 150000000 bc 28125000 be 56250000
conform-action transmit
exceed-action drop
class class-default
police cir 50000000 bc 9375000 be 18750000
conform-action transmit
exceed-action drop
!
interface Embedded-Service-Engine0/0
no ip address
shutdown
!
interface GigabitEthernet0/0
description $ETH-LAN$ETH-SW-LAUNCH$INTF-INFO-GE 0/0$
ip address 123.45.67.34 255.255.255.240
ip nat outside
ip virtual-reassembly in
duplex auto
speed auto
service-policy input CHANNEL01-POLICE
!
interface GigabitEthernet0/1
ip address 192.168.128.1 255.255.240.0
ip nat inside
ip virtual-reassembly in
duplex auto
speed auto
service-policy input CHANNEL01-POLICE
!
no ip forward-protocol nd
!
ip http server
ip http access-class 23
ip http authentication local
ip http secure-server
ip http timeout-policy idle 60 life 86400 requests 10000
!
ip nat inside source list 1 interface GigabitEthernet0/0 overload
ip route 0.0.0.0 0.0.0.0 123.45.67.33
!
ip access-list extended PORTS01
permit tcp any any eq www
permit tcp any eq www any
permit tcp any any eq 443
permit tcp any eq 443 any
permit tcp any any eq pop3
permit tcp any eq pop3 any
permit tcp any any eq 143
permit tcp any eq 143 any
permit tcp any any eq 993
permit tcp any eq 993 any
permit tcp any any eq 995
permit tcp any eq 995 any
permit tcp any any eq domain
permit tcp any eq domain any
permit udp any any eq domain
permit udp any eq domain any
permit tcp any any eq 8080
permit tcp any eq 8080 any
!
access-list 1 permit 192.168.128.0 0.0.15.255
!
!
control-plane
!
!
line con 0
login local
line aux 0
line 2
no activation-character
no exec
transport preferred none
transport input all
transport output pad telnet rlogin lapb-ta mop udptn v120 ssh
stopbits 1
line vty 0 4
access-class 23 in
privilege level 15
login local
transport input telnet ssh
line vty 5 15
access-class 23 in
privilege level 15
login local
transport input telnet ssh
!
scheduler allocate 20000 1000
end

Результаты и итоги:

  1. Решение способно переварить 200 Мбит интернет-канала без использования полноценных QoS. Я считаю, что для такого класса оборудования этот результат вполне приемлемо.
  2. Шейпинг прост: весь трафик, идущий по определенным портам (ip access-list extended PORTS01), имеет бОльшую часть скорости интернет-канала, все остальное — меньшую скорость.
  3. Одно оборудование, одна точка отказа, простота монтажа.
  4. Использование для шейпинга police в сочетании с применением этого police на интерфейсах в направлении input (service-policy input CHANNEL01-POLICE), дает надежду в меньшей нагрузке на роутер при DDos-атаках, т.к. применение шейп-правила на интерфейсах в направлении output более ресурсоемко (потому что пакеты «входят» в роутер и обрабатываются, кешируются, «задерживаются»… И кстати, только в направлении интерфейса output работает shape-метод и QoS), и по сравнению с shape-методом ограничения скорости (где пакеты не отбрасываются, а «придерживаются» на роутере, но все же отправляются получателю), police-метод (все «лишние» пакеты, при превышении разрешенной скорости не запоминаются для отложенной отправки, а просто сразу отбрасываются) также производительнее.