Обеспечение качества обслуживания для трафика (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 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.
Перед настройкой стенда необходимо выполнить предварительные требования к начальному состоянию «С-Терра Шлюз», которые описаны в главе «Требования к начальному состоянию «С-Терра Шлюз».
На данном устройстве (ОС 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 консоли.
Для проверки работоспособности будет использована утилита iperf3. В качестве шлюза, на котором будут проводится проверки, выбран GW1.
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
Сначала убедимся, что с выключенной приоритизацией, в случае перегрузки шлюза неприоритетным трафиком, приоритетный трафик не проходит через шлюз, либо проходит крайне плохо.
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
Параметры 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