В составе пакета ecss-utils присутствует 4 скрипта. Место расположения — /usr/bin/.
Скрипт binarylog2text предназначен для конвертации бинарных логов подсистем ecss в текстовый файл.
Использование:
binarylog2text [Filename] [Output]:
Пример:
sasha@ecss1:~$ binarylog2text /var/log/ecss/core/core1@ecss1/default.log.bin ~/core_default.log sasha@ecss1:~$ ls -l core_default.log -rw-rw-r-- 1 sasha sasha 0 Mar 16 00:11 core_default.log |
Скрипт binaryfold2text предназначен для конвертации всех бинарных логов подсистем ecss-каталога в текстовый файл. Вызывает binarylog2text.
Использование:
binaryfold2text [-r] SOURCE_LOG_DIR DESTINATION_LOG_DIR — конвертирует бинарные логи из каталога источника и помещает результат в каталог назначения.
binaryfold2text [-r] SOURCE_LOG_DIR — конвертирует бинарные логи каталога источника в текущий каталог.
binaryfold2text [-r] — конвертирует бинарные логи в текущий каталог.
Опции:
-r, --удалить. Если используется, то бинарные логи будут удалены в случае успешной конвертации или нулевого размера файлов логов.
sasha@ecss1:~/log$ binaryfold2text /var/log/ecss/pa-sip/sip1@ecss1/ /home/sasha/log Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin to /home/sasha/log/default.log... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin to /home/sasha/log/siptrace.log... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.1 to /home/sasha/log/default.log.1... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.2 to /home/sasha/log/default.log.2... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.3 to /home/sasha/log/default.log.3... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.4 to /home/sasha/log/default.log.4... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.5 to /home/sasha/log/default.log.5... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.6 to /home/sasha/log/default.log.6... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.7 to /home/sasha/log/default.log.7... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.8 to /home/sasha/log/default.log.8... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//default.log.bin.9 to /home/sasha/log/default.log.9... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.1 to /home/sasha/log/siptrace.log.1... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.2 to /home/sasha/log/siptrace.log.2... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.3 to /home/sasha/log/siptrace.log.3... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.4 to /home/sasha/log/siptrace.log.4... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.5 to /home/sasha/log/siptrace.log.5... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.6 to /home/sasha/log/siptrace.log.6... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.7 to /home/sasha/log/siptrace.log.7... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.8 to /home/sasha/log/siptrace.log.8... done. Convert /var/log/ecss/pa-sip/sip1@ecss1//siptrace.log.bin.9 to /home/sasha/log/siptrace.log.9... done. |
Скрипт ecss-check-token предназначен для проверки лицензионного ключа (токена).
Использование:
ecss-check-token [parameter]
Параметры:
-h --вывод справки;
-w --вывод номера кода исключения при ошибке.
sasha@ecss1:/usr/bin$ ecss-check-token -w eToken found (Bus 001 Device 002: ID 0529:0620 Aladdin Knowledge Systems Token JC). Cryptoki version 2.20 Manufacturer SafeNet, Inc. Library SafeNet eToken PKCS#11 (ver 9.0) Using slot 0 with a present token (0x0) Available slots: Slot 0 (0x0): AKS ifdh [Main Interface] 00 00 token label : ECSS 010079 token manufacturer : SafeNet, Inc. token model : eToken token flags : login required, rng, token initialized, PIN initialized, other flags=0x200 hardware version : 4.30 firmware version : 1.0 serial num : 022c8f30 pin min/max : 6/20 Slot 1 (0x1): (empty) Slot 2 (0x2): (empty) Slot 3 (0x3): (empty) Slot 4 (0x4): ETOKEN HID READER 0 (empty) Slot 5 (0x5): ETOKEN HID READER 1 (empty) Slot 6 (0x6): ETOKEN HID READER 2 (empty) Slot 7 (0x7): ETOKEN HID READER 3 (empty) Slot 8 (0x8): (empty) Slot 9 (0x9): (empty) |
Скрипт ecss-net-shaper — это инструмент управления системой контроля трафика (Traffic Control) ядра Linux. В качестве основы использует стандартную утилиту tc Unix-систем.
Для работы утилиты необходимо написать конфигурационный файл. При использовании стирает текущую конфигурацию 'TC' на конфигурируемых интерфейсах, a также удаляет все IFB-интерфейсы при настройке контроля входящего трафика. После перезагрузки все изменения
сбрасываются.
1. Ограничение исходящего трафика.
2. Ограничение входящего трафика через псевдо-устройствa IFB (Intermediate Functional Block).
3. Планирование передачи пакетов (приоритезация).
4. Распределение полосы пропускания.
5. Сглаживание пиков, выравнивание сетевой нагрузки.
6. Отбрасывание трафика, превышающего установленную полосу пропускания.
1. Простой вариант запуска:
В этом случае программа попытается найти файл bandwidth_tree.xml, а по мере выполнения спросит о необходимости применения конфигурации.
root@ecss1:/usr/bin# ecss-net-shaper Error reading XML file: open bandwidth_tree.xml: no such file or directory error: open bandwidth_tree.xml: no such file or directory |
2. Флаг '-apply' позволяет применить конфигурацию без предварительного вопроса:
или просто:
3. Задать конфигурационный файл позволяет флаг '-file':
4. Отладочная информация включается флагом '-dbg':
5. -help — подсказка по использованию:
ECSS-NET-SHAPER поддерживает работу с файлами в формате .xml и .yaml.
Контроль трафика осуществляется с помощью трёх сущностей:
Весь трафик разбивается на несколько общих классов (например, трафик до Отдела-1, трафик до специализированных внутренних серверов и т. д.), а затем каждый из них разбивается на несколько подклассов (например, трафик до DNS-сервера Отдела-1), за которыми уже могут
быть закреплены дисциплины. Чтобы управлять тем, дисциплиной какого класса будет обработан определенный тип трафика, классовые дисциплины позволяют подключать к себе фильтры.
Фильтры используют классификаторы для идентификации пакетов нужного типа, определяя каким классом они должны быть обработаны.
Существует несколько разных классификаторов. Самыми популярными являются u32 и fw. Первый позволяет выделять пакеты по исходящим адресам и адресам назначения, портам, парам "хост:порт", типам протокола и прочим параметрам пакета. Второй классифицирует
пакеты путем чтения маркировок, записанных брандмауэром iptables/netfilter (цель MARK).
За каждым сетевым интерфейсом могут быть закреплены две основные дисциплины:
Основные параметры сущностей
Параметры дисциплины qdisc:
Параметры класса class:
Пропускная способность задаётся в следующих единицах измерения:
Параметры фильтра filter:
Помимо представленных параметров, существует общий параметр other, предназначенный для добавления специфических настроек сущностей.
Идентификаторы сущностей, родителей и flowid-фильтров прописываются автоматически.
Примеры конфигурации
YAML — конфигурация состоит из иерархии вложенных массивов qdisc, class и filter, каждый элемент которых имеет атрибут param, представляющий собой словарь параметров своей сущности:
qdisc: # Конфигурация корневой и исходящей дисциплин HFSC для интерфейса "enp0s3"
- # Корневая дисциплина исходящего трафика
param: {dev: enp0s3, qtype: hfsc}
class:
- # Родительский класс с приоритетом реального времени
param: {qtype: hfsc rt, rate: 50mbit}
class:
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 30mbit, ceil: 40mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 3
param: {protocol: ip, prio: 2, fw-match: handle 3}
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 20mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 6
param: {protocol: ip, prio: 3, fw-match: handle 6}
filter:
- # Классификация пакетов по адресу назначения
param: {protocol: ip, prio: 1, u32-match: 'ip dst 192.168.23.53/32'}
- # Классификация пакетов по порту источника
param: {protocol: ip, prio: 1, u32-match: 'ip sport 4041 0xffff'}
- # Класс по умолчанию для неклассифицированного трафика с разделяемой полосой
param: {qtype: hfsc ls, rate: 15mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
- # Дисциплина входящего трафика
param: {dev: enp0s3, qtype: hfsc, ingress: yes}
class:
- # Класс по умолчанию для неклассифицированного трафика
param: {qtype: hfsc rt, rate: 50mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
|
XML — конфигурация отличается от YAML только синтаксисом. Тут сущности выражены через тэги, а параметры записываются в качестве их атрибутов.
В конфигурации, представленной ниже, настраивается распределение трафика с помощью дисциплин HTB и SFQ:
<?xml version="1.0" encoding="UTF-8"?>
<Bandwidth>
<qdisc dev="enp0s3" qtype="htb">
<class qtype="htb" rate="60mbit" ceil="100mbit">
<class qtype="htb" rate="10mbit" ceil="30mbit" default="yes">
<qdisc qtype="htb">
<class qtype="htb" rate="15mbit">
<filter protocol="ip" prio="1" u32-match="ip src 10.25.72.53/32"/>
</class>
</qdisc>
<filter protocol="ip" prio="2" u32-match="ip src 10.25.72.0/24 and ip tos 0x10 0xff"/>
<filter protocol="ip" prio="3" fw-match="handle 6"/>
</class>
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1"
basic-match="cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)"/>
</class>
</class>
</qdisc>
<qdisc dev="enp0s3" qtype="htb" ingress="yes">
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 192.168.23.0/24" police="rate 10mbit burst 1000k continue"/>
<filter protocol="ip" prio="1" u32-match="ip dport 5060 0xffff" police="rate 25mbit burst 2500k drop"/>
<filter protocol="ip" prio="1" u32-match="ip tos 0x10 0xff" police="rate 15mbit burst 1500k reclassify"/>
<class qtype="htb" rate="10mbit" default="yes">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 0.0.0.0/24"/>
</class>
</class>
</qdisc>
</Bandwidth>
|
Разберём классификатор basic из примера:
<filter ... basic-match="cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)"/> |
В данном случае осуществляется отбор пакетов, у которых порт источника входит в интервал между портами 9999 и 40000:
Также можно обратить внимание на классификатор u32:
<filter ... u32-match="ip src 10.25.72.0/24 and ip tos 0x10 0xff"/> |
Он объединяет несколько условий через ключевое слово "and", осуществляя отбор трафика для подсети 10.25.72.0/24 c параметром ToS: 0x10.
В данный момент ECSS-NET-SHAPER реализован преимущественно для работы с дисциплинами sfq, fq_codel, htb, hfsc.
Но в любом случае, при необходимости, есть возможность использовать параметр "other" и прописывать туда все необходимые параметры вручную, как при обычном использовании утилиты tc.
Файлы конфигурации настроены следующим образом:
qdisc: # Конфигурация корневой и исходящей дисциплин HFSC для интерфейса "enp0s3"
- # Корневая дисциплина исходящего трафика
param: {dev: enp4s0, qtype: hfsc}
class:
- # Родительский класс с приоритетом реального времени
param: {qtype: hfsc rt, rate: 50mbit}
class:
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 30mbit, ceil: 40mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 3
param: {protocol: ip, prio: 2, fw-match: handle 3}
- # Класс с иерархичной дисциплиной htb
param: {qtype: htb, rate: 20mbit}
qdisc:
- # Безклассовая дисциплина sfq
param: {qtype: sfq, perturb: 10}
filter:
- # Классификация пакетов по метке 6
param: {protocol: ip, prio: 3, fw-match: handle 6}
filter:
- # Классификация пакетов по адресу назначения
param: {protocol: ip, prio: 1, u32-match: 'ip dst 192.168.1.14/32'}
- # Классификация пакетов по порту источника
param: {protocol: ip, prio: 1, u32-match: 'ip sport 6001 0xffff'}
- # Класс по умолчанию для неклассифицированного трафика с разделяемой полосой
param: {qtype: hfsc ls, rate: 15mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
- # Дисциплина входящего трафика
param: {dev: enp4s0, qtype: hfsc, ingress: yes}
class:
- # Класс по умолчанию для неклассифицированного трафика
param: {qtype: hfsc rt, rate: 10mbit, default: yes}
qdisc:
- # Безклассовая дисциплина fq_codel
param: {qtype: fq_codel}
|
?xml version="1.0" encoding="UTF-8"?>
<Bandwidth>
<qdisc dev="enp4s0" qtype="htb">
<class qtype="htb" rate="60mbit" ceil="100mbit">
<class qtype="htb" rate="10mbit" ceil="30mbit" default="yes">
<qdisc qtype="htb">
<class qtype="htb" rate="15mbit">
<filter protocol="ip" prio="1" u32-match="ip src 192.168.1.14/32"/>
</class>
</qdisc>
<filter protocol="ip" prio="2" u32-match="ip src 192.168.1.0/24 and ip tos 0x10 0xff"/>
<filter protocol="ip" prio="3" fw-match="handle 6"/>
</class>
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1"
basic-match="cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)"/>
</class>
</class>
</qdisc>
<qdisc dev="enp4s0" qtype="htb" ingress="yes">
<class qtype="htb" rate="50mbit">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 10.16.33.0/24" police="rate 10mbit burst 1000k continue"/>
<filter protocol="ip" prio="1" u32-match="ip dport 5060 0xffff" police="rate 25mbit burst 2500k drop"/>
<filter protocol="ip" prio="1" u32-match="ip tos 0x10 0xff" police="rate 15mbit burst 1500k reclassify"/>
<class qtype="htb" rate="10mbit" default="yes">
<qdisc qtype="sfq" perturb="10"/>
<filter protocol="ip" prio="1" u32-match="ip src 0.0.0.0/24"/>
</class>
</class>
</qdisc>
</Bandwidth>
|
Вывод команды net-shaper с использованием yaml-файла конфигурации:
sasha@ecss2:~/script/netshaper$ sudo ./ecss-net-shaper -file=ecss2.yaml -dbg
Config: {[{{0 enp4s0 hfsc } [{{0 hfsc rt 50mbit } [] [{{ip 1 ip dst 192.168.1.14/32 }} {{ip 1 ip sport 6001 0xffff }}] [{{0 htb 30mbit 40mbit } [{{0 sfq 10 } [] []}] [{{ip 2 handle 3 }}
Apply configuration (y/n)?y
Applying сonfiguration...
Pre-configuration:
-> tc qdisc del dev enp4s0 root &> /dev/null
-> tc qdisc del dev enp4s0 ingress &> /dev/null
-> tc qdisc del dev ifb0 root &> /dev/null
-> tc qdisc del dev ifb0 ingress &> /dev/null
-> modprobe -r ifb &> /dev/null
-> modprobe ifb numifbs=1
-> ip link set dev ifb0 up
Configuration:
-> tc qdisc add dev enp4s0 root handle 1: hfsc default 2
-> tc class add dev enp4s0 parent 1: classid 1:1 hfsc rt rate 50mbit
-> tc class add dev enp4s0 parent 1:1 classid 1:11 htb rate 30mbit ceil 40mbit
-> tc qdisc add dev enp4s0 parent 1:11 handle 110:0 sfq perturb 10
-> tc filter add dev enp4s0 protocol ip parent 1:0 prio 2 handle 3 fw flowid 1:11
-> tc class add dev enp4s0 parent 1:1 classid 1:12 htb rate 20mbit
-> tc qdisc add dev enp4s0 parent 1:12 handle 120:0 sfq perturb 10
-> tc filter add dev enp4s0 protocol ip parent 1:0 prio 3 handle 6 fw flowid 1:12
-> tc filter add dev enp4s0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.14/32 flowid 1:1
-> tc filter add dev enp4s0 protocol ip parent 1:0 prio 1 u32 match ip sport 6001 0xffff flowid 1:1
-> tc class add dev enp4s0 parent 1: classid 1:2 hfsc ls rate 15mbit
-> tc qdisc add dev enp4s0 parent 1:2 handle 20:0 fq_codel
-> tc qdisc add dev enp4s0 handle ffff: ingress
-> tc filter add dev enp4s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
-> tc qdisc add dev ifb0 root handle 1: hfsc default 1
-> tc class add dev ifb0 parent 1: classid 1:1 hfsc rt rate 10mbit
-> tc qdisc add dev ifb0 parent 1:1 handle 10:0 fq_codel
Post-configuration:
Applying configuration finished. Error cnt: 0
|
Вывод команды net-shaper с использованием xml-файла конфигурации:
sasha@ecss2:~/script/netshaper$ sudo ./ecss-net-shaper -file=ecss2.xml -dbg
Config: {[{{0 enp4s0 htb } [{{0 htb 60mbit 100mbit } [] [] [{{0 htb yes 10mbit 30mbit } [{{0 htb } [{{0 htb 15mbit } [] [{{ip 1 ip src 192.168.1.14/32 }}] []}] []}] [{{ip 2 ip src 192.168.1.
Apply configuration (y/n)?y
Applying сonfiguration...
Pre-configuration:
-> tc qdisc del dev enp4s0 root &> /dev/null
-> tc qdisc del dev enp4s0 ingress &> /dev/null
-> tc qdisc del dev ifb0 root &> /dev/null
-> tc qdisc del dev ifb0 ingress &> /dev/null
-> modprobe -r ifb &> /dev/null
-> modprobe ifb numifbs=1
-> ip link set dev ifb0 up
Configuration:
-> tc qdisc add dev enp4s0 root handle 1: htb default 11
-> tc class add dev enp4s0 parent 1: classid 1:1 htb rate 60mbit ceil 100mbit
-> tc class add dev enp4s0 parent 1:1 classid 1:11 htb rate 10mbit ceil 30mbit
-> tc qdisc add dev enp4s0 parent 1:11 handle 110:0 htb
-> tc class add dev enp4s0 parent 110: classid 110:1 htb rate 15mbit
-> tc filter add dev enp4s0 protocol ip parent 110:0 prio 1 u32 match ip src 192.168.1.14/32 flowid 110:1
-> tc filter add dev enp4s0 protocol ip parent 1:0 prio 2 u32 match ip src 192.168.1.0/24 match ip tos 0x10 0xff flowid 1:11
-> tc filter add dev enp4s0 protocol ip parent 1:0 prio 3 handle 6 fw flowid 1:11
-> tc class add dev enp4s0 parent 1:1 classid 1:12 htb rate 50mbit
-> tc qdisc add dev enp4s0 parent 1:12 handle 120:0 sfq perturb 10
-> tc filter add dev enp4s0 protocol ip parent 1:0 prio 1 basic match "cmp(u16 at 0 layer transport gt 9999) and cmp(u16 at 0 layer transport lt 40000)" flowid 1:12
-> tc qdisc add dev enp4s0 handle ffff: ingress
-> tc filter add dev enp4s0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
-> tc qdisc add dev ifb0 root handle 1: htb default 11
-> tc class add dev ifb0 parent 1: classid 1:1 htb rate 50mbit
-> tc qdisc add dev ifb0 parent 1:1 handle 10:0 sfq perturb 10
-> tc class add dev ifb0 parent 1:1 classid 1:11 htb rate 10mbit
-> tc qdisc add dev ifb0 parent 1:11 handle 110:0 sfq perturb 10
-> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/24 flowid 1:11
-> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 10.16.33.0/24 police rate 10mbit burst 1000k continue flowid 1:1
-> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip dport 5060 0xffff police rate 25mbit burst 2500k drop flowid 1:1
-> tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip tos 0x10 0xff police rate 15mbit burst 1500k reclassify flowid 1:1
Post-configuration:
Applying configuration finished. Error cnt: 0
|