Обеспечение качества обслуживания для трафика (QoS)
Данная инструкция описывает настройку подсистем по обеспечению качества обслуживания для сетевого трафика в продукте «С-Терра Шлюз».
Инженер, обеспечивающий качество обслуживания для трафика при помощи продукта «С-Терра Шлюз», должен свободно ориентироваться в настройке базовых сценариев (например, site-to-site IPsec) продукта «С-Терра Шлюз», а также должен знать и понимать следующие технологии и протоколы: PKI, IPsec, NAT, Firewall, QoS.
Перед настройкой должно быть выполнено следующее:
1. Шлюзы должны быть инициализированы.
2. На шлюзах должны быть установлены корневой сертификат и сертификат устройства.
Исключительно для тестовых целей можно использовать тестовый УЦ от «КриптоПро», веб-интерфейс: https://www.cryptopro.ru/certsrv/certrqxt.asp.
В продукте «С-Терра Шлюз» поддерживается следующий список технологий, понимаемых под общим названием QoS:
· маркирование (выставление DSCP/IP-precedence) IP-пакетов – осуществляется средствами самого продукта;
По умолчанию IKE пакеты маркируются DSCP равным 000001 и ToS байт из исходного незашифрованного пакета переносится в зашифрованный.
· приоритизация промаркированных IP-пакетов в подсистеме шифрования – осуществляется средствами самого продукта;
· ограничение полосы пропускания (shaping) исходящего с интерфейса трафика – осуществляется средствами подсистемы traffic control ядра linux.
Если с маркированием IP-пакетов все ясно (подход не отличается от общепринятого в других продуктах), то принципы работы механизмов приоритизации и ограничения полосы пропускания в продукте «С-Терра Шлюз» требуют пояснения.
Приоритизация. В продукте «С-Терра Шлюз» реализована только одна очередь на обработку пакетов в подсистеме шифрования (размер очереди по умолчанию составляет 2000 пакетов, параметр pq_thread_q_size в drv_mgr). Механизм обработки очереди различает только два вида пакетов – приоритетные и неприоритетные. Если очередь заполнена более чем на заданный процент (по умолчанию 90%, параметр pq_drop_thres в drv_mgr), то происходит первоочередное удаление неприоритетных пакетов. Если приоритизация включена на интерфейсе (параметр pq_drop_low_pri_ifs в drv_mgr), то по молчанию приоритетными считаются все пакеты (параметр pq_tos_mask в drv_mgr), у которых значение ToS байта отлично от нуля (не путайте ToS с DSCP, значение DSCP может быть нулевым, а пакет будет считаться приоритетным, так как младшие два бита или ECN в ToS байте могут быть не нулевыми; надлежащая обработка ECN в подсистеме шифрования не поддерживается). Важно: из-за того, что очередь в подсистеме шифрования одна, то приоритетные и неприоритетные пакеты обрабатываются в том порядке, в котором они поступили на С-Терра Шлюз.
Приоритизацию нужно включать (параметр pq_drop_low_pri_ifs в drv_mgr) только на внешнем интерфейсе, на котором прикреплена крипт-карта. Также настоятельно рекомендуется осуществлять маркирование пакетов на внутреннем интерфейсе. Если же по каким-то причинам маркирование требуется производить на внешнем интерфейсе, то нужно выполнить команду drv_mgr set qos_preclassify 0.
Ограничение полосы пропускания (shaping). Предварительно внимательно ознакомьтесь с порядком обработки пакетов в сетевых подсистемах в продукте «С-Терра Шлюз» (см. на следующей странице). Важно знать следующее – ограничение полосы пропускания в подсистеме traffic control ядра linux происходит после его зашифрования, соответственно, ограничивать полосу трафика можно только на основе информации в зашифрованном IP-пакете. Этой информации не так много – туннельные IP-адреса и ToS байт.
Рисунок 1. Общая схема стенда
Входящий на интерфейс трафик |
1. Linux kernel, подсистема QoS (traffic control): ограничение полосы пропускания (policing) и классификация трафика. |
2. S-Terra ПО, подсистема Firewall: Input Stateful Packet Inspection (only TCP/FTP). |
3. S-Terra ПО, подсистема Firewall: Input ACL. |
4. S-Terra ПО, подсистема IPsec: расшифрование (если зашифровано). |
5. S-Terra ПО, подсистема IPsec: фильтрация трафика в рамках IPsec SA. |
6. S-Terra ПО, подсистема QoS: классификация и маркирование. |
7. Linux kernel, подсистема NAT (netfilter): Destination NAT. |
8. Linux kernel, подсистема Routing: статическая и динамическая маршрутизация. |
9. Linux kernel, подсистема Firewall (netfilter): Input Stateful Packet Inspection. |
Исходящий с интерфейса трафик |
1. Linux kernel, подсистема Routing: статическая и динамическая маршрутизация. |
2. Linux kernel, подсистема Firewall (netfilter): Output Stateful Packet Inspection. |
3. Linux kernel, подсистема NAT (netfilter): Source NAT. |
4. S-Terra ПО, подсистема QoS: классификация и маркирование. |
5. S-Terra ПО, подсистема IPsec: фильтрация трафика в рамках IPsec SA. |
6. S-Terra ПО, подсистема IPsec: зашифрование (если требуется). |
7. S-Terra ПО, подсистема Firewall: Output ACL. |
8. S-Terra ПО, подсистема Firewall: Output Stateful Packet Inspection (only TCP/FTP). |
9. Linux kernel, подсистема QoS (traffic control): ограничение полосы пропускания (shaping) и приоритизация трафика. |
Данный стенд состоит из девяти устройств:
· защищаемые хосты (ОС Debian): host1_b_gw1/ host1_b_gw2 и host2_b_gw1/host2_b_gw2.
· коммутаторы (Eltex MES2324): SW1 и SW2.
· маршрутизатор (Eltex ESR-200): ISP1.
· шлюзы безопасности (S-Terra Gate 4.2): GW1 и GW2.
Задачи маркирования:
· выставить DSCP метку, например AF11, на TCP трафик между хостами host1_b_gw1 и host1_b_gw2;
· выставить DSCP метку, например AF12, на TCP трафик между хостами host2_b_gw1 и host2_b_gw2;
· выставить DSCP метку 0 на остальной трафик.
Задача приоритизаци:
· включить приоритизацию на внешнем интерфейсе для всего трафика, имеющего ненулевое значение метки DSCP.
Задачи ограничения полосы пропускания:
· ограничить пропускную способность на внешнем интерфейсе, например до 50 Mbit/s;
· ограничить пропускную способность для трафика с DSCP меткой AF11, например до 10 Mbit/s;
· ограничить пропускную способность для трафика с DSCP меткой AF12, например до 10 Mbit/s.
· ограничить пропускную способность для остального трафика, например до 30 Mbit/s.
Перед настройкой стенда необходимо выполнить предварительные требования к начальному состоянию «С-Терра Шлюз», которые описаны в главе «Требования к начальному состоянию «С-Терра Шлюз».
На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).
На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).
На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).
На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).
На данном устройстве сетевые интерфейсы, коммутирующие шлюз GW1 и хосты host1_b_gw1/ host2_b_gw1, должны быть в одном VLAN и в режиме portfast.
На данном устройстве сетевые интерфейсы, коммутирующие шлюз GW2 и хосты host1_b_gw2/ host2_b_gw2, должны быть в одном VLAN и в режиме portfast.
На данном устройстве должны быть настроены IP-адреса в соответствии с общей схемой стенда (см. рисунок 1).
Перед началом настроек убедитесь в том, что была выполнена процедура подготовки шлюзов, описанная в главе «Подготовка устройств «С-Терра Шлюз».
Предполагается, что базовые сетевые настройки и настройки шифрования уже выполнены (в приложении представлена конфигурация cisco-like консоли).
При настройке ограничения полосы пропускания нужно отключать механизм защиты от атак воспроизведения пакетов (параметр set security-association replay disable в крипто-карте), смотрите пример в приложении.
Ниже будет описано конфигурирование маркирования, приоритизации и ограничения полосы пропускания.
Настройка маркирования осуществляется из cisco-like консоли шлюза.
1. Создайте необходимые списки доступа, которые описывают маркируемый трафик:
GW1#conf t
GW1(config)#ip access-list extended SET_DSCP_AF11
GW1(config-ext-nacl)# permit tcp host 192.168.1.100 host 192.168.2.100
GW1(config-ext-nacl)#
GW1(config-ext-nacl)#ip access-list extended SET_DSCP_AF12
GW1(config-ext-nacl)# permit tcp host 192.168.1.200 host 192.168.2.200
GW1(config-ext-nacl)#
GW1(config-ext-nacl)#ip access-list extended CLEAR_DSCP
GW1(config-ext-nacl)# permit ip any any
GW1(config-ext-nacl)#exit
GW1(config)#
2. Опишите классы трафика на основе списков доступа:
GW1(config)#class-map match-all CLEAR_DSCP
GW1(config-cmap)# match access-group name CLEAR_DSCP
GW1(config-cmap)#
GW1(config-cmap)#class-map match-all SET_DSCP_AF11
GW1(config-cmap)# match access-group name SET_DSCP_AF11
GW1(config-cmap)#
GW1(config-cmap)#class-map match-all SET_DSCP_AF12
GW1(config-cmap)# match access-group name SET_DSCP_AF12
GW1(config-cmap)#exit
3. Опишите политику для трафика (выставление DSCP метки):
GW1(config)#policy-map DSCP_POLICY
GW1(config-pmap)# class SET_DSCP_AF11
GW1(config-pmap-c)# set dscp af11
GW1(config-pmap-c)# class SET_DSCP_AF12
GW1(config-pmap-c)# set dscp af12
GW1(config-pmap-c)# class CLEAR_DSCP
GW1(config-pmap-c)# set dscp default
GW1(config-pmap-c)#exit
GW1(config-pmap)#exit
GW1(config)#
4. Привяжите политику для трафика к внутреннему интерфейсу на входящее направление
GW1(config)#interface GigabitEthernet0/1
GW1(config-if)# service-policy input DSCP_POLICY
GW1(config-if)#exit
GW1(config)#end
Настройка приоритизации осуществляется из linux bash.
1. Установите ToS маску для определения приоритетности пакета (при значении маски в 252 из ToS байта учитываются только первые шесть бит, то есть DSCP):
root@GW1:~# drv_mgr set pq_tos_mask 252
Value of "pq_tos_mask" is set to 252.
Определенные значения DSCP задать нельзя.
2. Включите приоритизацию на внешнем интерфейсе GigabitEthernet0/0, который соответствует eth0 (см. файл /etc/ifaliases.cf):
root@GW1:~# drv_mgr set pq_drop_low_pri_ifs eth0
Value of "pq_drop_low_pri_ifs" is set to eth0.
На внутреннем интерфейсе eth1 включать приоритизацию не нужно.
3. Установите процент заполнения очереди, при достижении которого будут уничтожаться неприоритетные пакеты:
root@GW1:~# drv_mgr set pq_drop_thres 70
Value of "pq_drop_thres" is set to 70.
Настройка ограничения полосы пропускания осуществляется из linux bash.
1. Добавьте следующее содержимое в файл /etc/network/if-up.d/shaper:
#!/bin/bash
function enable_shaper(){
# del root queue discipline
tc qdisc del dev $IFACE root handle 1: htb
# add root queue discipline
tc qdisc add dev $IFACE root handle 1:0 htb default 4
# add root class
tc class add dev $IFACE parent 1:0 classid 1:1 htb rate 50mbit ceil 50mbit
# add sub classes
tc class add dev $IFACE parent 1:1 classid 1:2 htb rate 10mbit ceil 10mbit
tc class add dev $IFACE parent 1:1 classid 1:3 htb rate 10mbit ceil 10mbit
tc class add dev $IFACE parent 1:1 classid 1:4 htb rate 10mbit ceil 30mbit
# add filters for traffic
tc filter add dev $IFACE parent 1:0 protocol ip prio 0 u32 match ip tos 0x28 0xfc flowid 1:2
tc filter add dev $IFACE parent 1:0 protocol ip prio 0 u32 match ip tos 0x30 0xfc flowid 1:3
}
if [[ $IFACE == "eth0" ]]; then
enable_shaper $IFACE
fi
Пояснение:
Удаляем корневую дисциплину с интерфейса:
tc qdisc del dev $IFACE root handle 1: htb
Добавляем корневую классовую дисциплину HTB к интерфейсу c классом по умолчанию 4 (трафик, который не попал под фильтры направляется в этот класс):
tc qdisc add dev $IFACE root handle 1:0 htb default 4
Ограничиваем скорость на интерфейсе до 50Mbit/s:
tc class add dev $IFACE parent 1:0 classid 1:1 htb rate 50mbit ceil 50mbit
Определяем подклассы (1:2, 1:3, 1:4) и ограничиваем в них скорость:
tc class add dev $IFACE parent 1:1 classid 1:2 htb rate 10mbit ceil 10mbit
tc class add dev $IFACE parent 1:1 classid 1:3 htb rate 10mbit ceil 10mbit
tc class add dev $IFACE parent 1:1 classid 1:4 htb rate 10mbit ceil 30mbit
При помощи фильтров направляем трафик в нужные классы (в tc нельзя задать DCSP, поэтому указывается шестнадцатеричное значение ToS байта; чтобы перевести DSCP в ToS нужно добавить справа к двоичному значению DSCP два нуля и перевести его в шестнадцатеричное представление: AF11 -> 001010 -> 00101000 -> 0x28, AF12 -> 001100 -> 00110000 -> 0x30), пакеты с меткой AF11 (0x28) попадают в класс 1:2 (flowid 1:2), а пакеты с меткой AF12 (0x30) попадают в класс 1:3 (flowid 1:3), пакеты не попавшие под фильтры автоматически попадают в класс по умолчанию 1:4:
tc filter add dev $IFACE parent 1:0 protocol ip prio 0 u32 match ip tos 0x28 0xfc flowid 1:2
tc filter add dev $IFACE parent 1:0 protocol ip prio 0 u32 match ip tos 0x30 0xfc flowid 1:3
2. Дайте файлу /etc/network/if-up.d/shaper права на исполнение:
root@GW1:~# chmod u+x /etc/network/if-up.d/shaper
Данный файл будет запускаться автоматически при старте системы во время конфигурирования интерфейса eth0 (а также при выполнении команды ifup eth0).
3. Примените настройки ограничения полосы пропускания:
root@GW1:~# ifdown eth0; ifup eth0
4. Посмотреть статистику можно при помощи команд:
root@GW1:~# tc -s qdisc show dev eth0
root@GW1:~# tc -s filter show dev eth0
root@GW1:~# tc -s class show dev eth0
Настройка шлюза GW2 осуществляется аналогично шлюзу GW1.
В приложении представлена конфигурация cisco-like консоли.
Для проверки работоспособности будет использован генератор трафика nuttcp (можно также использовать iperf). В качестве шлюза, на котором будут проводится проверки, выбран GW1.
1. Убедитесь, что трафик между хостами host1_b_gw1 и host1_b_gw2 маркируется верно (DSCP 001010 ->ToS 0x28):
1.1. Запустите генератор трафика (TCP) на host1_b_gw1 в сторону host1_b_gw2:
root@host1-b-gw1:~# nuttcp -i 1 -T 10000 192.168.2.100
1.0625 MB / 1.00 sec = 8.9123 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9132 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.1250 MB / 1.00 sec = 9.4372 Mbps 0 retrans
1.2. Проверьте, что правило маркирования срабатывает:
root@GW1:~# klogview -f 0xFFFFFFFF | grep SET_DSCP_AF11
filtration result for in packet 192.168.1.100:35762->192.168.2.100:5101, proto 6, len 1500, if eth1: chain 101 "ClassificationChain:DSCP_POLICY", filter 150, event id Classification:DSCP_POLICY:SET_DSCP_AF11:SET_DSCP_AF11, status PASS
filtration result for in packet 192.168.1.100:35762->192.168.2.100:5101, proto 6, len 1500, if eth1: chain 101 "ClassificationChain:DSCP_POLICY", filter 150, event id Classification:DSCP_POLICY:SET_DSCP_AF11:SET_DSCP_AF11, status PASS
1.3. Проверьте, что на внешнем интерфейсе eth0 шлюза GW1 в зашифрованных пакетах выставлен ToS байт со значением 0x28:
root@GW1:~# tcpdump -i eth0 -n -v 'ip[1] == 0x28' -c 2
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:00:54.605709 IP (tos 0x28, ttl 254, id 22448, offset 0, flags [none], proto ESP (50), length 96)
172.16.2.2 > 172.16.1.2: ESP(spi=0xbd6f457e,seq=0x9777), length 76
09:00:54.606427 IP (tos 0x28, ttl 255, id 39549, offset 1480, flags [none], proto ESP (50), length 64)
172.16.1.2 > 172.16.2.2: ip-proto-50
2 packets captured
3 packets received by filter
0 packets dropped by kernel
2. Проверка маркирования трафика между хостами host2_b_gw1 и host2_b_gw2 проводится аналогично проверке для хостов host1_b_gw1 и host1_b_gw2.
3. Проверьте, что значение DSCP сбрасывается в значение по умолчанию для остального трафика, например ICMP.
3.1. Запустите ping на host1_b_gw1 в сторону host1_b_gw2 с вручную выставленным значением ToS байта (0xb8):
root@host1-b-gw1:~# ping 192.168.2.100 -Q 0xb8
PING 192.168.2.100 (192.168.2.100) 56(84) bytes of data.
64 bytes from 192.168.2.100: icmp_req=1 ttl=62 time=1.96 ms
64 bytes from 192.168.2.100: icmp_req=2 ttl=62 time=1.85 ms
64 bytes from 192.168.2.100: icmp_req=3 ttl=62 time=1.29 ms
3.2. Проверьте, что правило сброса метки срабатывает:
root@GW1:~# klogview -f 0xFFFFFFFF | grep CLEAR_DSCP
filtration result for in packet 192.168.1.100->192.168.2.100, proto 1, len 84, if eth1: chain 109 "ClassificationChain:DSCP_POLICY", filter 160, event id Classification:DSCP_POLICY:CLEAR_DSCP:CLEAR_DSCP, status PASS
filtration result for in packet 192.168.1.100->192.168.2.100, proto 1, len 84, if eth1: chain 109 "ClassificationChain:DSCP_POLICY", filter 160, event id Classification:DSCP_POLICY:CLEAR_DSCP:CLEAR_DSCP, status PASS
3.3. Проверьте, что на внешнем интерфейсе eth0 шлюза GW1 в зашифрованных пакетах значение ToS байта равно 0x00:
root@GW1:~# tcpdump -i eth0 -n -v 'ip[1] == 0x00' -c 2
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:11:09.651465 IP (tos 0x0, ttl 255, id 60244, offset 0, flags [none], proto ESP (50), length 128)
172.16.1.2 > 172.16.2.2: ESP(spi=0xe39ac051,seq=0x196c81), length 108
10:11:09.652439 IP (tos 0x0, ttl 254, id 48678, offset 0, flags [none], proto ESP (50), length 128)
172.16.2.2 > 172.16.1.2: ESP(spi=0xde6e0ba3,seq=0x5322), length 108
2 packets captured
2 packets received by filter
0 packets dropped by kernel
Сначала убедимся, что с выключенной приоритизацией, в случае перегрузки шлюза неприоритетным трафиком, приоритетный трафик не проходит через шлюз, либо проходит крайне плохо.
1. Отключите приоритизацию на интерфейсе eth0 шлюза GW1:
root@GW1:~# drv_mgr set pq_drop_low_pri_ifs ""
Value of "pq_drop_low_pri_ifs" is set to .
2. Чтобы подсистема шифрования была нагружена полностью отключите ограничение полосы пропускания:
root@GW1:~# tc qdisc del dev eth0 root handle 1: htb
3. Нагрузите шлюз неприоритетным UDP трафиком с хоста host2_b_gw1 в сторону host2_b_gw2, так чтобы было существенное количество потерь:
root@host2-b-gw1:~# nuttcp -T 3000000 -i 1 -u -l 500 -R100M 192.168.2.200
9.2468 MB / 1.00 sec = 77.5349 Mbps 3164 / 22556 ~drop/pkt 14.03 ~%loss
9.2463 MB / 1.00 sec = 77.5890 Mbps 5599 / 24990 ~drop/pkt 22.40 ~%loss
9.2463 MB / 1.00 sec = 77.5649 Mbps 5604 / 24995 ~drop/pkt 22.42 ~%loss
4. Нагрузите шлюз приоритетным трафиком с host1_b_gw1 в сторону host1_b_gw2:
root@host1-b-gw1:~# nuttcp -i 1 -T 10 192.168.2.100
^C
*** transfer interrupted ***
После некоторого времени вывод nuttcp был пуст, значит пакеты были удалены.
Видно, что при перегрузке шлюза неприоритетным трафиком, в случае выключенной приоритизации, приоритетный трафик не может пройти.
Включим приоритизацию на интерфейсе eth0 шлюза GW1 и проведем аналогичный тест.
5. Включите приоритизации:
root@GW1:~# drv_mgr set pq_drop_low_pri_ifs eth0
Value of "pq_drop_low_pri_ifs" is set to eth0.
6. Нагрузите шлюз неприоритетным UDP трафиком с хоста host2_b_gw1 в сторону host2_b_gw2, так чтобы было существенное количество потерь:
root@host2-b-gw1:~# nuttcp -T 3000000 -i 1 -u -l 500 -R100M 192.168.2.200
9.1195 MB / 1.00 sec = 76.4777 Mbps 4304 / 23429 ~drop/pkt 18.37 ~%loss
9.0637 MB / 1.00 sec = 76.0509 Mbps 5992 / 25000 ~drop/pkt 23.97 ~%loss
9.0561 MB / 1.00 sec = 75.9611 Mbps 6010 / 25002 ~drop/pkt 24.04 ~%loss
9.0642 MB / 1.00 sec = 76.0361 Mbps 5991 / 25000 ~drop/pkt 23.96 ~%loss
7. Нагрузите шлюз приоритетным трафиком с host1_b_gw1 в сторону host1_b_gw2:
root@host1-b-gw1:~# nuttcp -i 1 -T 10 192.168.2.100
0.4375 MB / 1.00 sec = 3.6684 Mbps 0 retrans
3.7500 MB / 1.00 sec = 31.4700 Mbps 0 retrans
6.0625 MB / 1.00 sec = 50.8560 Mbps 0 retrans
6.4375 MB / 1.00 sec = 54.0017 Mbps 0 retrans
4.0000 MB / 1.00 sec = 33.5516 Mbps 9 retrans
3.3750 MB / 1.00 sec = 28.3141 Mbps 0 retrans
4.5625 MB / 1.00 sec = 38.2729 Mbps 0 retrans
5.5625 MB / 1.00 sec = 46.6567 Mbps 0 retrans
5.8125 MB / 1.00 sec = 48.7639 Mbps 0 retrans
6.1875 MB / 1.00 sec = 51.9021 Mbps 0 retrans
47.0645 MB / 10.25 sec = 38.5008 Mbps 1 %TX 19 %RX 9 retrans 129.75 msRTT
Видно, что при перегрузке шлюза неприоритетным трафиком, в случае включенной приоритизации, приоритетный трафик успешно проходит и шифруется.
Для просмотра статистики о работе приоритизации можно воспользоваться утилитой kstat_show:
В случае сильной перегрузки подсистемы шифрования счетчик «high priority packets dropped» может показывать неверное значение (приоритетными пакетами будут считаться неприоритетные). Счетчики rx errors/tx errors также свидетельствуют о перегрузке шлюза.
root@GW1:~# kstat_show
ipsec in pkt: 460447321
ipsec in oct: 246617975648
ipsec in drop: 1112777
ipsec no_sa: 1112775
ipsec replay drops: 0
ipsec auth fails: 0
ipsec decrypt fails: 0
ipsec out pkt: 4137173695
ipsec out oct: 2453839904584
ipsec out drop: 458005
frag ok: 3875219
frag fail: 59
link send: 0
link send err: 0
link recv: 0
rx errors: 209589039
tx errors: 1869620820
route errors: 0
skb allocation errors: 0
send queue overflows: 0
high priority packets dropped: 2843060
low priority packets dropped: 393259158
high priority packets passed while overloaded: 6771173
1. Включите ограничение полосы пропускания:
root@GW1:~# ifdown eth0; ifup eth0
2. Запустите генератор трафика (TCP, AF11) на host1_b_gw1 в сторону host1_b_gw2:
root@host1-b-gw1:~# nuttcp -i 1 -T 10 192.168.2.100
0.5000 MB / 1.00 sec = 4.1940 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9132 Mbps 0 retrans
1.1250 MB / 1.00 sec = 9.4372 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.1250 MB / 1.00 sec = 9.4369 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9132 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.1250 MB / 1.00 sec = 9.4372 Mbps 0 retrans
11.6453 MB / 11.47 sec = 8.5170 Mbps 0 %TX 4 %RX 0 retrans 133.99 msRTT
Видно, что скорость не превышает заданное ограничение в 10 Mbit/s.
3. Запустите генератор трафика (TCP, AF12) на host2_b_gw1 в сторону host2_b_gw2:
root@host2-b-gw1:~# nuttcp -i 1 -T 10 192.168.2.200
1.0625 MB / 1.00 sec = 8.9123 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9131 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.1250 MB / 1.00 sec = 9.4372 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9130 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9128 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.1250 MB / 1.00 sec = 9.4372 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9129 Mbps 0 retrans
1.0625 MB / 1.00 sec = 8.9122 Mbps 0 retrans
12.3192 MB / 11.46 sec = 9.0171 Mbps 0 %TX 4 %RX 0 retrans 2.00 msRTT
Видно, что скорость не превышает заданное ограничение в 10 Mbit/s.
4. Назначьте хосту host2_b_gw1 второй IP-адрес 192.168.2.201 для того, чтобы TCP пакеты 192.168.1.200 <-> 192.168.2.201 не маркировались и попали в класс по умолчанию с ограничением в 30 Mbit/s.
5. Запустите генератор трафика (TCP, default DSCP) на host2_b_gw1 в сторону host2_b_gw2 на IP-адрес 192.168.2.201:
root@host2-b-gw1:~# nuttcp -i 1 -T 10 192.168.2.201
3.1875 MB / 1.00 sec = 26.7367 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2638 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2606 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2654 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2630 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2607 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2652 Mbps 0 retrans
3.1875 MB / 1.00 sec = 26.7387 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2621 Mbps 0 retrans
3.2500 MB / 1.00 sec = 27.2638 Mbps 0 retrans
33.5625 MB / 10.35 sec = 27.1914 Mbps 0 %TX 14 %RX 0 retrans 1.91 msRTT
Видно, что скорость не превышает заданное ограничение в 30 Mbit/s.
6. Посмотреть статистику ограничение полосы пропускания на интерфейсе eth0 можно при помощи команд:
root@GW1:~# tc -s qdisc show dev eth0
root@GW1:~# tc -s filter show dev eth0
root@GW1:~# tc -s class show dev eth0
Параметры cisco-like консоли.
version 12.4
no service password-encryption
!
crypto ipsec df-bit copy
crypto isakmp identity dn
crypto isakmp session-time-max 10
crypto isakmp keepalive 3 3
crypto isakmp keepalive retry-count 3
username cscons privilege 15 password 0 secret
aaa new-model
!
!
hostname GW1
enable password secret
!
class-map match-all CLEAR_DSCP
match access-group name CLEAR_DSCP
class-map match-all SET_DSCP_AF11
match access-group name SET_DSCP_AF11
class-map match-all SET_DSCP_AF12
match access-group name SET_DSCP_AF12
!
policy-map DSCP_POLICY
class SET_DSCP_AF11
set dscp af11
class SET_DSCP_AF12
set dscp af12
class CLEAR_DSCP
set dscp default
!
!
!
crypto isakmp policy 1
encr gost
hash gost341112-256-tc26
authentication gost-sig
group vko2
!
crypto ipsec transform-set GOST esp-gost28147-4m-imit
!
ip access-list extended GW1_GW2
permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
!
ip access-list extended SET_DSCP_AF11
permit tcp host 192.168.1.100 host 192.168.2.100
!
ip access-list extended SET_DSCP_AF12
permit tcp host 192.168.1.200 host 192.168.2.200
!
ip access-list extended CLEAR_DSCP
permit ip any any
!
!
crypto map VPN 1 ipsec-isakmp
match address GW1_GW2
set transform-set GOST
set security-association replay disable
set peer 172.16.2.2
!
interface GigabitEthernet0/0
ip address 172.16.1.2 255.255.255.0
crypto map VPN
!
interface GigabitEthernet0/1
ip address 192.168.1.1 255.255.255.0
service-policy input DSCP_POLICY
!
interface GigabitEthernet0/2
no ip address
shutdown
!
interface GigabitEthernet0/3
ip address 10.0.103.73 255.255.0.0
!
!
ip route 0.0.0.0 0.0.0.0 172.16.1.1
!
crypto pki trustpoint s-terra_technological_trustpoint
revocation-check crl none
crypto pki certificate chain s-terra_technological_trustpoint
certificate 2B6E3351FD6EB2AD48200203CB5BA141
...
E34EE9640D905032C1F1E3B4491257D5
quit
!
End
Параметры cisco-like консоли.
version 12.4
no service password-encryption
!
crypto ipsec df-bit clear
crypto isakmp identity dn
crypto isakmp session-time-max 10
crypto isakmp keepalive 3 3
crypto isakmp keepalive retry-count 3
username cscons privilege 15 password 0 secret
aaa new-model
!
!
hostname GW2
enable password secret
!
class-map match-all CLEAR_DSCP
match access-group name CLEAR_DSCP
class-map match-all SET_DSCP_AF11
match access-group name SET_DSCP_AF11
class-map match-all SET_DSCP_AF12
match access-group name SET_DSCP_AF12
!
policy-map DSCP_POLICY
class SET_DSCP_AF11
set dscp af11
class SET_DSCP_AF12
set dscp af12
class CLEAR_DSCP
set dscp default
!
!
!
crypto isakmp policy 1
encr gost
hash gost341112-256-tc26
authentication gost-sig
group vko2
!
crypto ipsec transform-set GOST esp-gost28147-4m-imit
!
ip access-list extended GW1_GW2
permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255
!
ip access-list extended SET_DSCP_AF11
permit tcp host 192.168.2.100 host 192.168.1.100
!
ip access-list extended SET_DSCP_AF12
permit tcp host 192.168.2.200 host 192.168.1.200
!
ip access-list extended CLEAR_DSCP
permit ip any any
!
!
crypto map VPN 1 ipsec-isakmp
match address GW1_GW2
set transform-set GOST
set security-association replay disable
set peer 172.16.1.2
!
interface GigabitEthernet0/0
ip address 172.16.2.2 255.255.255.0
crypto map VPN
!
interface GigabitEthernet0/1
ip address 192.168.2.1 255.255.255.0
service-policy input DSCP_POLICY
!
interface GigabitEthernet0/2
no ip address
shutdown
!
interface GigabitEthernet0/3
ip address 10.0.101.216 255.255.0.0
!
interface GigabitEthernet0/4
no ip address
shutdown
!
interface GigabitEthernet0/5
no ip address
shutdown
!
!
ip route 0.0.0.0 0.0.0.0 172.16.2.1
!
crypto pki trustpoint s-terra_technological_trustpoint
revocation-check crl none
crypto pki certificate chain s-terra_technological_trustpoint
certificate 2B6E3351FD6EB2AD48200203CB5BA141
3082024C308201FBA00302010202102B6E3351FD6EB2AD48200203CB5BA14130
...
E34EE9640D905032C1F1E3B4491257D5
quit
!
end