Обеспечение качества обслуживания для трафика (QoS)

Скачать в формате PDF

Назначение инструкции

Данная инструкция описывает настройку подсистем по обеспечению качества обслуживания для сетевого трафика в продукте «С-Терра Шлюз».

Требования к квалификации инженера

Инженер, обеспечивающий качество обслуживания для трафика при помощи продукта «С-Терра Шлюз», должен свободно ориентироваться в настройке базовых сценариев (например, 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 1 - работа в этом режиме вызывает значительное падение производительности и снижает стабильность.

Ограничение полосы пропускания (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.3): 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.

Настройка стенда

Перед настройкой стенда необходимо выполнить предварительные требования к начальному состоянию «С-Терра Шлюз», которые описаны в главе «Требования к начальному состоянию «С-Терра Шлюз».

Настройка устройства host1_b_gw1

На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).

Настройка устройства host2_b_gw1

На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).

Настройка устройства host1_b_gw2

На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).

Настройка устройства host2_b_gw2

На данном устройстве (ОС Debian) должны быть настроены IP-адреса и маршрутизация в соответствии с общей схемой стенда (см. рисунок 1).

Настройка устройства SW1

На данном устройстве сетевые интерфейсы, коммутирующие шлюз GW1 и хосты host1_b_gw1/ host2_b_gw1, должны быть в одном VLAN и в режиме portfast.

Настройка устройства SW2

На данном устройстве сетевые интерфейсы, коммутирующие шлюз GW2 и хосты host1_b_gw2/ host2_b_gw2, должны быть в одном VLAN и в режиме portfast.

Настройка устройства ISP

На данном устройстве должны быть настроены IP-адреса в соответствии с общей схемой стенда (см. рисунок 1).

Настройка устройства GW1

Перед началом настроек убедитесь в том, что была выполнена процедура подготовки шлюзов, описанная в главе «Подготовка устройств «С-Терра Шлюз» .

Предполагается, что базовые сетевые настройки и настройки шифрования уже выполнены (в приложении представлена конфигурация cisco-like консоли).

При настройке ограничения полосы пропускания нужно отключать механизм защиты от атак воспроизведения пакетов (параметр set security-association replay disable в крипто-карте), смотрите пример в приложении.

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

Настройка маркирования IP-пакетов

Настройка маркирования осуществляется из 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

Настройка приоритизации IP-пакетов

Настройка приоритизации осуществляется из 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

Настройка шлюза GW2 осуществляется аналогично шлюзу GW1.

В приложении представлена конфигурация cisco-like консоли.


 

Проверка работоспособности стенда

Для проверки работоспособности будет использована утилита iperf3. В качестве шлюза, на котором будут проводится проверки, выбран GW1.

Маркирование IP-пакетов

1.    Убедитесь, что трафик между хостами host1_b_gw1 и host1_b_gw2 маркируется верно (DSCP 001010 ->ToS 0x28):

1.1.      Запустите iperf3 в режиме сервера на устройстве host1_b_gw2:

root@host1-b-gw2:~# iperf3 -s

-----------------------------------------------------------

Server listening on 5201

-----------------------------------------------------------

1.2.      Запустите генератор трафика (TCP) на host1_b_gw1 в сторону host1_b_gw2:

root@host1-b-gw1:~# iperf3 -c 192.168.2.100 -t 0

Connecting to host 192.168.2.100, port 5201

[  5] local 192.168.1.100 port 58428 connected to 192.168.2.100 port 5201

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd

[  5]   0.00-1.00   sec  1.49 MBytes  12.5 Mbits/sec    0   83.5 KBytes

[  5]   1.00-2.00   sec  1.23 MBytes  10.3 Mbits/sec    0    141 KBytes

[  5]   2.00-3.00   sec  1.35 MBytes  11.4 Mbits/sec    0    197 KBytes

[  5]   3.00-4.00   sec  1.41 MBytes  11.9 Mbits/sec    0    255 KBytes

[  5]   4.00-5.00   sec  1.17 MBytes  9.80 Mbits/sec    0    311 KBytes

[  5]   5.00-6.00   sec  1.35 MBytes  11.3 Mbits/sec    0    367 KBytes

[  5]   6.00-7.00   sec  1.54 MBytes  12.9 Mbits/sec    0    424 KBytes

1.3.      Проверьте, что правило маркирования срабатывает:

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.4.      Проверьте, что на внешнем интерфейсе 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

Приоритизация IP-пакетов

Сначала убедимся, что с выключенной приоритизацией, в случае перегрузки шлюза неприоритетным трафиком, приоритетный трафик не проходит через шлюз, либо проходит крайне плохо.

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, так, чтобы было существенное количество потерь. Для этого запустите iperf3 в режиме сервера на root@host2-b-gw2:

 root@host2-b-gw2:~# iperf3 -s

-----------------------------------------------------------

Server listening on 5201

-----------------------------------------------------------

4.    Затем на host2-b-gw1 выполните команду:

root@host2-b-gw1:~# iperf3 -c 192.168.2.200 -t 360 -u -b 100M

5.    В выводе iperf-сервера должны фиксироваться потери пакетов:

root@host2-b-gw2:~# iperf3 -s

-----------------------------------------------------------

Server listening on 5201

-----------------------------------------------------------

Accepted connection from 192.168.1.200, port 52842

[  5] local 192.168.2.200 port 5201 connected to 192.168.1.200 port 40214

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams

[  5]   0.00-1.00   sec  3.37 MBytes  28.3 Mbits/sec  0.424 ms  2850/5372 (53%)

[  5]   1.00-2.00   sec  3.37 MBytes  28.3 Mbits/sec  0.490 ms  6392/8914 (72%)

[  5]   2.00-3.00   sec  3.37 MBytes  28.3 Mbits/sec  0.426 ms  6395/8919 (72%)

[  5]   3.00-4.00   sec  3.37 MBytes  28.3 Mbits/sec  0.458 ms  6390/8913 (72%)

6.    Нагрузите шлюз приоритетным трафиком с host1_b_gw1 в сторону host1_b_gw2:

root@host1-b-gw1:~# iperf3 -c 192.168.2.100 -t 0

Connecting to host 192.168.2.100, port 5201

[  5] local 192.168.1.100 port 58400 connected to 192.168.2.100 port 5201

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd

[  5]   0.00-1.00   sec  6.70 MBytes  56.2 Mbits/sec  198    738 KBytes

[  5]   1.00-2.00   sec  3.75 MBytes  31.5 Mbits/sec  298    167 KBytes

[  5]   2.00-3.00   sec  1.25 MBytes  10.5 Mbits/sec   13   43.8 KBytes

[  5]   3.00-4.00   sec  0.00 Bytes  0.00 bits/sec    0   52.0 KBytes

[  5]   4.00-5.00   sec  0.00 Bytes  0.00 bits/sec   18   43.8 KBytes

[  5]   5.00-6.00   sec  0.00 Bytes  0.00 bits/sec    0   52.0 KBytes

[  5]   6.00-7.00   sec  1.25 MBytes  10.5 Mbits/sec   18   38.3 KBytes

[  5]   7.00-8.00   sec  0.00 Bytes  0.00 bits/sec    0   50.7 KBytes

[  5]   8.00-9.00   sec  1.25 MBytes  10.5 Mbits/sec    6   39.7 KBytes

[  5]   9.00-10.00  sec  0.00 Bytes  0.00 bits/sec    0   50.7 KBytes

 

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

Включим приоритизацию на интерфейсе eth0 шлюза GW1 и проведем аналогичный тест.

7.    Включите приоритизации:

root@GW1:~# drv_mgr set pq_drop_low_pri_ifs eth0

Value of "pq_drop_low_pri_ifs" is set to eth0.

8.    Нагрузите шлюз неприоритетным UDP трафиком с хоста host2_b_gw1 в сторону host2_b_gw2, так чтобы было существенное количество потерь:

root@host2-b-gw1:~# iperf3 -c 192.168.2.200 -b 900M -u -t 360

9.    В выводе iperf-сервера убедитесь, что потери пакетов происходят и они значительные

root@рost2-b-gw2:~# iperf3 -s

-----------------------------------------------------------

Server listening on 5201

-----------------------------------------------------------

Accepted connection from 192.168.1.200, port 37704

[  5] local 192.168.2.200 port 5201 connected to 192.168.1.200 port 46263

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams

[  5]   0.00-1.00   sec  40.2 MBytes   337 Mbits/sec  0.051 ms  45807/75839 (60%)

[  5]   1.00-2.00   sec  54.7 MBytes   459 Mbits/sec  0.054 ms  39550/80451 (49%)

[  5]   2.00-3.00   sec  58.6 MBytes   492 Mbits/sec  0.052 ms  36423/80256 (45%)

[  5]   3.00-4.00   sec  58.4 MBytes   490 Mbits/sec  0.022 ms  36544/80240 (46%)

[  5]   4.00-5.00   sec  58.4 MBytes   490 Mbits/sec  0.030 ms  36615/80279 (46%)

10.  Нагрузите шлюз приоритетным трафиком с host1_b_gw1 в сторону host1_b_gw2:

root@host1-b-gw1:~# iperf3 -c 192.168.2.100 -t 0

Connecting to host 192.168.2.100, port 5201

[  5] local 192.168.1.100 port 58416 connected to 192.168.2.100 port 5201

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd

[  5]   0.00-1.00   sec  9.33 MBytes  78.2 Mbits/sec    0   1.14 MBytes

[  5]   1.00-2.00   sec  13.8 MBytes   115 Mbits/sec    0   1.81 MBytes

[  5]   2.00-3.00   sec  18.8 MBytes   157 Mbits/sec    0   1.61 MBytes

[  5]   3.00-4.00   sec  16.2 MBytes   136 Mbits/sec    0   1.76 MBytes

[  5]   4.00-5.00   sec  17.5 MBytes   147 Mbits/sec    0   1.30 MBytes

[  5]   5.00-6.00   sec  15.0 MBytes   126 Mbits/sec    0   1.40 MBytes

[  5]   6.00-7.00   sec  15.0 MBytes   126 Mbits/sec    0   1.47 MBytes

Видно, что при перегрузке шлюза неприоритетным трафиком, в случае включенной приоритизации, приоритетный трафик успешно проходит и шифруется.

Для просмотра статистики о работе приоритизации можно воспользоваться утилитой 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:~# iperf3 -c 192.168.2.100

Connecting to host 192.168.2.100, port 5201

[  5] local 192.168.1.100 port 58492 connected to 192.168.2.100 port 5201

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd

[  5]   0.00-1.00   sec  1.11 MBytes  9.27 Mbits/sec    0   82.1 KBytes

[  5]   1.00-2.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   2.00-3.00   sec  1.00 MBytes  8.39 Mbits/sec    0    136 KBytes

[  5]   3.00-4.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   4.00-5.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   5.00-6.00   sec  1.00 MBytes  8.39 Mbits/sec    0    136 KBytes

[  5]   6.00-7.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   7.00-8.00   sec  1.00 MBytes  8.39 Mbits/sec    0    136 KBytes

[  5]   8.00-9.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   9.00-10.00  sec  1.00 MBytes  8.39 Mbits/sec    0    136 KBytes

- - - - - - - - - - - - - - - - - - - - - - - - -

[ ID] Interval           Transfer     Bitrate         Retr

[  5]   0.00-10.00  sec  10.7 MBytes  9.00 Mbits/sec    0             sender

[  5]   0.00-10.00  sec  10.7 MBytes  9.00 Mbits/sec                  receiver

 

iperf Done.

Видно, что скорость находится в пределах заданного ограничения в 10 Mbit/s.

3.    Запустите генератор трафика (TCP, AF12) на host2_b_gw1 в сторону host2_b_gw2:

root@host2-b-gw1:~# iperf3 -c 192.168.2.200

Connecting to host 192.168.2.200, port 5201

[  5] local 192.168.1.200 port 37760 connected to 192.168.2.200 port 5201

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd

[  5]   0.00-1.00   sec  1.11 MBytes  9.27 Mbits/sec    0   82.1 KBytes

[  5]   1.00-2.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   2.00-3.00   sec  1.00 MBytes  9.39 Mbits/sec    0    136 KBytes

[  5]   3.00-4.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   4.00-5.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   5.00-6.00   sec  1.00 MBytes  9.39 Mbits/sec    0    136 KBytes

[  5]   6.00-7.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   7.00-8.00   sec  1.00 MBytes  9.39 Mbits/sec    0    136 KBytes

[  5]   8.00-9.00   sec  1.12 MBytes  9.44 Mbits/sec    0    136 KBytes

[  5]   9.00-10.00  sec  1.00 MBytes  9.39 Mbits/sec    0    136 KBytes

- - - - - - - - - - - - - - - - - - - - - - - - -

[ ID] Interval           Transfer     Bitrate         Retr

[  5]   0.00-10.00  sec  10.7 MBytes  10.00 Mbits/sec    0             sender

[  5]   0.00-10.00  sec  10.7 MBytes  10.00 Mbits/sec                  receiver

 

iperf Done.

Видно, что скорость находится в пределах заданного ограничения в 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:~# iperf3 -c 192.168.2.201

Connecting to host 192.168.2.201, port 5201

[  5] local 192.168.1.200 port 45144 connected to 192.168.2.201 port 5201

[ ID] Interval           Transfer     Bitrate         Retr  Cwnd

[  5]   0.00-1.00   sec  3.60 MBytes  30.2 Mbits/sec   12    203 KBytes

[  5]   1.00-2.00   sec  3.62 MBytes  30.4 Mbits/sec    0    372 KBytes

[  5]   2.00-3.00   sec  3.50 MBytes  29.8 Mbits/sec    0    542 KBytes

[  5]   3.00-4.00   sec  3.62 MBytes  30.4 Mbits/sec    0    712 KBytes

[  5]   4.00-5.00   sec  3.62 MBytes  30.4 Mbits/sec    0    882 KBytes

[  5]   5.00-6.00   sec  3.50 MBytes  29.8 Mbits/sec    0   1.03 MBytes

[  5]   6.00-7.00   sec  3.62 MBytes  30.4 Mbits/sec    0   1.19 MBytes

[  5]   7.00-8.00   sec  3.62 MBytes  30.4 Mbits/sec    0   1.36 MBytes

[  5]   8.00-9.00   sec  3.25 MBytes  27.9 Mbits/sec   51   1006 KBytes

[  5]   9.00-10.00  sec  3.62 MBytes  30.4 Mbits/sec    0   1.08 MBytes

- - - - - - - - - - - - - - - - - - - - - - - - -

[ ID] Interval           Transfer     Bitrate         Retr

[  5]   0.00-10.00  sec  35.6 MBytes  29.9 Mbits/sec   63             sender

[  5]   0.00-10.32  sec  34.3 MBytes  28.8 Mbits/sec                  receiver

 

iperf Done.

Видно, что скорость находится в пределах заданного ограничения в 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


 

Приложение

Устройство GW1

Параметры 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

Устройство GW2

Параметры 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