Обеспечение качества обслуживания для трафика (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 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.

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

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

Настройка устройства 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 консоли.


 

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

Для проверки работоспособности будет использован генератор трафика nuttcp (можно также использовать iperf). В качестве шлюза, на котором будут проводится проверки, выбран GW1.

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

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

Приоритизация 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, так чтобы было существенное количество потерь:

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


 

Приложение

Устройство 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