<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.entcor.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=192.168.99.249</id>
	<title>EWiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.entcor.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=192.168.99.249"/>
	<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/192.168.99.249"/>
	<updated>2026-06-12T14:09:06Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=542</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=542"/>
		<updated>2026-04-14T07:36:20Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика??? (возможно уменьшит количество блокированных соединений) https://pchaigno.github.io/ebpf/2020/09/29/bpf-isnt-about-speed.html&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
- сборка без доступа в интернет (vendoring)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно/аккуратно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt,&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
- авторизация (каждый агент заходит подсвом пользователем и имеет доступ только к своим данным, правила только для чтения)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows:&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
* Использовать WFP транзакции при обновлении правил&lt;br /&gt;
* Перехватывать панику во всех горутинах, чтобы записывать в windows events причину паники&lt;br /&gt;
* Не отображаются наши правила через стандартные инструменты просмотра&lt;br /&gt;
* Какой вес  для sublayer ставить? как взаимодействовать с другими правилами?&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=490</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=490"/>
		<updated>2025-11-07T03:10:32Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика??? (возможно уменьшит количество блокированных соединений) https://pchaigno.github.io/ebpf/2020/09/29/bpf-isnt-about-speed.html&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно/аккуратно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt,&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
- авторизация (каждый агент заходит подсвом пользователем и имеет доступ только к своим данным, правила только для чтения)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows:&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
* Использовать WFP транзакции при обновлении правил&lt;br /&gt;
* Перехватывать панику во всех горутинах, чтобы записывать в windows events причину паники&lt;br /&gt;
* Не отображаются наши правила через стандартные инструменты просмотра&lt;br /&gt;
* Какой вес  для sublayer ставить? как взаимодействовать с другими правилами?&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=456</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=456"/>
		<updated>2025-04-28T06:57:34Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика??? (возможно уменьшит количество блокированных соединений) https://pchaigno.github.io/ebpf/2020/09/29/bpf-isnt-about-speed.html&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно/аккуратно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt,&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
- авторизация (каждый агент заходит подсвом пользователем и имеет доступ только к своим данным, правила только для чтения)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=455</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=455"/>
		<updated>2025-04-16T13:24:18Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика??? (возможно уменьшит количество блокированных соединений) https://pchaigno.github.io/ebpf/2020/09/29/bpf-isnt-about-speed.html&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно/аккуратно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=454</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=454"/>
		<updated>2025-04-16T13:22:11Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика??? https://pchaigno.github.io/ebpf/2020/09/29/bpf-isnt-about-speed.html&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно/аккуратно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=453</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=453"/>
		<updated>2025-04-16T13:19:04Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика???&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно/аккуратно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=452</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=452"/>
		<updated>2025-04-16T00:29:14Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика, чтобы не появлялись заблокированные соединения в conntrack&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно/аккуратно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=451</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=451"/>
		<updated>2025-04-16T00:28:37Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика, чтобы не появлялись заблокированные соединения в conntrack&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- CLI: обрабатывать и корректно печатать ошибки от API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=450</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=450"/>
		<updated>2025-04-10T23:59:59Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика, чтобы не появлялись заблокированные соединения в conntrack&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
- хранение паролей&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=430</id>
		<title>Топики mqtt</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=430"/>
		<updated>2025-03-28T08:13:32Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Топик&lt;br /&gt;
!Формат&lt;br /&gt;
|-&lt;br /&gt;
|граф sd-wan&lt;br /&gt;
|sd-wan/data&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|сработка правил&lt;br /&gt;
|events/rules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|внешние узлы&lt;br /&gt;
|mirror/externalNodes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь внешних узлов&lt;br /&gt;
|mirror/externalNodes/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|потоки&lt;br /&gt;
|mirror/flows&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь потоков&lt;br /&gt;
|mirror/flows/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|измерения&lt;br /&gt;
|mirror/measures&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь измерений&lt;br /&gt;
|mirror/measures/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|узлы карты сети&lt;br /&gt;
|mirror/nodes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь узлов&lt;br /&gt;
|mirror/nodes/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|таблица DHCP&lt;br /&gt;
|e-nms/dhcp/&amp;lt;mac&amp;gt;&lt;br /&gt;
|{&lt;br /&gt;
identifier?: string,&lt;br /&gt;
&lt;br /&gt;
mac?: string,&lt;br /&gt;
&lt;br /&gt;
dhcpRelay?: string,&lt;br /&gt;
&lt;br /&gt;
template?: string,&lt;br /&gt;
&lt;br /&gt;
ipSetToDevice?: string,&lt;br /&gt;
&lt;br /&gt;
status?: string[],&lt;br /&gt;
&lt;br /&gt;
flagToAllowedToConnect?: boolean,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|-&lt;br /&gt;
|буревестник&lt;br /&gt;
|/device/MKI_alfa/mb1x3/cpu1/&amp;lt;шина+канал&amp;gt;/&amp;lt;id устройства&amp;gt;/reg/&amp;lt;регистр&amp;gt;/&amp;lt;req/resp&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|задачи (tasks)&lt;br /&gt;
|e-nms/tasks/&amp;lt;id&amp;gt;&lt;br /&gt;
|{&lt;br /&gt;
id: string;&lt;br /&gt;
&lt;br /&gt;
name: string;&lt;br /&gt;
&lt;br /&gt;
alternativename: string;&lt;br /&gt;
&lt;br /&gt;
user: string,&lt;br /&gt;
&lt;br /&gt;
startRT: Date;&lt;br /&gt;
&lt;br /&gt;
endRT?: Date;&lt;br /&gt;
&lt;br /&gt;
status?: taskstatus;&lt;br /&gt;
&lt;br /&gt;
data?: any;&lt;br /&gt;
&lt;br /&gt;
progress?: any[];&lt;br /&gt;
&lt;br /&gt;
error?: string;&lt;br /&gt;
&lt;br /&gt;
timeoutRT: Date;&lt;br /&gt;
&lt;br /&gt;
version?: number;&lt;br /&gt;
&lt;br /&gt;
additionaldata?: {};&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Ссылка на схемы: https://drive.google.com/file/d/1PqLCC33zCoV3FTqQ7OKWnMz1g54gLhbM/view?usp=sharing&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%82%D0%BE%D0%BF%D0%B8%D0%BA%D0%BE%D0%B2_MQTT&amp;diff=429</id>
		<title>Структура топиков MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%82%D0%BE%D0%BF%D0%B8%D0%BA%D0%BE%D0%B2_MQTT&amp;diff=429"/>
		<updated>2025-03-28T08:13:09Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: Новая страница: «Структура определяется для MQTT протокола и Zookeeper/etcd. Cовпадение путей в zookeeper &amp;amp; mqtt дает возможность накладывать данные и передавать их в разных подсистемах в одном формате.  === Иерархия топика[править | править код] === &amp;lt;класс&amp;gt;/&amp;lt;идентификатор клиента&amp;gt;/&amp;lt;категор...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Структура определяется для MQTT протокола и Zookeeper/etcd. Cовпадение путей в zookeeper &amp;amp; mqtt дает возможность накладывать данные и передавать их в разных подсистемах в одном формате.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия топика[править | править код] ===&lt;br /&gt;
&amp;lt;класс&amp;gt;/&amp;lt;идентификатор клиента&amp;gt;/&amp;lt;категория&amp;gt;/&amp;lt;ресурс&amp;gt;/&amp;lt;метрика&amp;gt;/&amp;lt;формат данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;класс&amp;gt; — measure.&lt;br /&gt;
* &amp;lt;категория&amp;gt; — категория (например, memory, cpu, disk, filesystem);&lt;br /&gt;
* &amp;lt;ресурс&amp;gt; — конкретный ресурс (например, sda для диска, /home для файловой системы);&lt;br /&gt;
* &amp;lt;метрика&amp;gt; — измеряемый параметр (например, used, free, iops);&lt;br /&gt;
* [&amp;lt;формат данных&amp;gt;] - должен быть равен &#039;$ent&#039; для бинарного протокола entcor, иначе может отсутствовать.&lt;br /&gt;
&lt;br /&gt;
Части топика, которые могут содержать &amp;quot;/&amp;quot; или получены из внешний системы, должны кодироваться при помощи encodeURIComponent.&lt;br /&gt;
&lt;br /&gt;
=== Пример для host agent[править | править код] ===&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/total&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/free&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/used&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/swap/used&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/cpu/total/usage&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/disk/sda/iops&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/filesystem/%2f/total&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/filesystem/%2fboot/used&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=MQTT&amp;diff=428</id>
		<title>MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=MQTT&amp;diff=428"/>
		<updated>2025-03-28T08:12:27Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Топики mqtt]]&lt;br /&gt;
&lt;br /&gt;
[[Структура топиков MQTT]]&lt;br /&gt;
&lt;br /&gt;
[[Формат данных для MQTT]]&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=427</id>
		<title>Формат данных для MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=427"/>
		<updated>2025-03-28T08:09:13Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Фиксированный заголовок (1 байта) ===&lt;br /&gt;
Биты:&lt;br /&gt;
&lt;br /&gt;
0-2 - версия&lt;br /&gt;
&lt;br /&gt;
3-5 - формат данных (0 - binary, 1 - json)&lt;br /&gt;
&lt;br /&gt;
6-7 - резерв&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Binary формат&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
==== Заголовок бинарного формата (1 байт) ====&lt;br /&gt;
0-3 - тип данных&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!ID&lt;br /&gt;
!Тип&lt;br /&gt;
!Реализация&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|null&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|bool&lt;br /&gt;
|byte&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|float64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|int8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|uint8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|int16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|uint16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|int32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|uint32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|int64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|uint64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|string&lt;br /&gt;
|utf-8&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|blob&lt;br /&gt;
|binary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
4 - массив (не поддерживается для типов данных null и string)&lt;br /&gt;
&lt;br /&gt;
5-6 - тип метрики  (0 - не определено, 1 - счетчик (только растет), 2 - замер (может увеличиваться и уменьшаться))&lt;br /&gt;
&lt;br /&gt;
7 - наличие метки времени&lt;br /&gt;
&lt;br /&gt;
==== Метка времени - опционально (8 байт) ====&lt;br /&gt;
В наносекундах&lt;br /&gt;
&lt;br /&gt;
==== Полезная нагрузка ====&lt;br /&gt;
Используется little endian.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JSON формат&#039;&#039;&#039; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;t&amp;quot;:&amp;quot;2025-03-28T05:29:11.481Z&amp;quot;, // время&lt;br /&gt;
 &amp;quot;v&amp;quot;: 42.13, // значение&lt;br /&gt;
 &amp;quot;m&amp;quot;: 2 // тип метрики (опционально)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=426</id>
		<title>Формат данных для MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=426"/>
		<updated>2025-03-28T08:07:40Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Фиксированный заголовок (1 байта) ===&lt;br /&gt;
Биты:&lt;br /&gt;
&lt;br /&gt;
0-2 - версия&lt;br /&gt;
&lt;br /&gt;
3-5 - формат данных (0 - binary, 1 - json)&lt;br /&gt;
&lt;br /&gt;
6-7 - резерв&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Binary формат&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
==== Заголовок бинарного формата (1 байт) ====&lt;br /&gt;
0-3 - тип данных&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!ID&lt;br /&gt;
!Тип&lt;br /&gt;
!Реализация&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|null&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|bool&lt;br /&gt;
|byte&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|float64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|int8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|uint8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|int16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|uint16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|int32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|uint32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|int64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|uint64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|string&lt;br /&gt;
|utf-8&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|blob&lt;br /&gt;
|binary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
4 - массив (не поддерживается для типов данных null и string)&lt;br /&gt;
&lt;br /&gt;
5-6 - тип метрики  (0 - не определено, 1 - счетчик (только растет), 2 - замер (может увеличиваться и уменьшаться))&lt;br /&gt;
&lt;br /&gt;
7 - наличие метки времени&lt;br /&gt;
&lt;br /&gt;
==== Метка времени - опционально (8 байт) ====&lt;br /&gt;
В наносекундах&lt;br /&gt;
&lt;br /&gt;
==== Полезная нагрузка ====&lt;br /&gt;
Используется little endian.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JSON формат&#039;&#039;&#039; ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;t&amp;quot;:&amp;quot;2025-03-28T05:29:11.481Z&amp;quot;, // время&lt;br /&gt;
 &amp;quot;v&amp;quot;: 42.13, // значение&lt;br /&gt;
 &amp;quot;m&amp;quot;: 2 // тип метрики&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=425</id>
		<title>Формат данных для MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=425"/>
		<updated>2025-03-28T07:59:23Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Фиксированный заголовок (1 байта) ===&lt;br /&gt;
Биты:&lt;br /&gt;
&lt;br /&gt;
0-2 - версия&lt;br /&gt;
&lt;br /&gt;
3-5 - формат данных (0 - binary, 1 - json)&lt;br /&gt;
&lt;br /&gt;
6-7 - резерв&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Binary формат&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
==== Заголовок бинарного формата (1 байт) ====&lt;br /&gt;
0-3 - тип данных&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!ID&lt;br /&gt;
!Тип&lt;br /&gt;
!Реализация&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|null&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|bool&lt;br /&gt;
|byte&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|float64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|int8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|uint8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|int16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|uint16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|int32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|uint32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|int64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|uint64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|string&lt;br /&gt;
|utf-8&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|blob&lt;br /&gt;
|binary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
4 - массив (не поддерживается для типов данных null и string)&lt;br /&gt;
&lt;br /&gt;
5-6 - тип метрики  (00 - счетчик (только растет), 01 - замер (может увеличиваться и уменьшаться))&lt;br /&gt;
&lt;br /&gt;
7 - наличие метки времени&lt;br /&gt;
&lt;br /&gt;
==== Метка времени - опционально (8 байт) ====&lt;br /&gt;
В наносекундах&lt;br /&gt;
&lt;br /&gt;
==== Полезная нагрузка ====&lt;br /&gt;
Используется little endian.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JSON формат&#039;&#039;&#039; ===&lt;br /&gt;
Пример: {&amp;quot;t&amp;quot;:&amp;quot;2025-03-28T05:29:24.413Z&amp;quot;, &amp;quot;v&amp;quot;:50.5, }&lt;br /&gt;
&lt;br /&gt;
Для сложного значения: {&amp;quot;t&amp;quot;:1617234567890, &amp;quot;v&amp;quot;:[10,20,30], &amp;quot;d&amp;quot;:&amp;quot;disk_iops&amp;quot;}&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=424</id>
		<title>Формат данных для MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=424"/>
		<updated>2025-03-28T07:47:37Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Фиксированный заголовок (2 байта) ===&lt;br /&gt;
Биты:&lt;br /&gt;
&lt;br /&gt;
0-2 - версия&lt;br /&gt;
&lt;br /&gt;
3-5 - формат данных (00 - binary, 01 - json)&lt;br /&gt;
&lt;br /&gt;
6-9 - тип данных&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!ID&lt;br /&gt;
!Тип&lt;br /&gt;
!Реализация&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|null&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|bool&lt;br /&gt;
|byte&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|float64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|int8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|uint8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|int16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|uint16&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|int32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|uint32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|int64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|uint64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|string&lt;br /&gt;
|utf-8&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|blob&lt;br /&gt;
|binary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 - массив (не поддерживается для типов данных null и string)&lt;br /&gt;
&lt;br /&gt;
11-12 - тип метрики  (00 - счетчик (только растет), 01 - замер (может увеличиваться и уменьшаться))&lt;br /&gt;
&lt;br /&gt;
13 - наличие метки времени&lt;br /&gt;
&lt;br /&gt;
14-15 - резерв&lt;br /&gt;
&lt;br /&gt;
используется little endian&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JSON формат&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 2 байта - битовый описатель (01 - json)&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
* данные Формат: {&amp;quot;t&amp;quot;:&amp;lt;время&amp;gt;, &amp;quot;v&amp;quot;:&amp;lt;значение&amp;gt;, &amp;quot;d&amp;quot;:&amp;lt;описатель&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Пример: {&amp;quot;t&amp;quot;:&amp;quot;2025-03-28T05:29:24.413Z&amp;quot;, &amp;quot;v&amp;quot;:50.5, }&lt;br /&gt;
&lt;br /&gt;
Для сложного значения: {&amp;quot;t&amp;quot;:1617234567890, &amp;quot;v&amp;quot;:[10,20,30], &amp;quot;d&amp;quot;:&amp;quot;disk_iops&amp;quot;}&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=423</id>
		<title>Формат данных для MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B4%D0%BB%D1%8F_MQTT&amp;diff=423"/>
		<updated>2025-03-28T07:26:51Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: Новая страница: « === Формат Payload ===  ==== Бинарный формат (например, struct) ==== &amp;#039;&amp;#039;&amp;#039;Формат: Фиксированная структура байтов.&amp;#039;&amp;#039;&amp;#039;  * 2 байта - битовый описатель.  0-2 версия  3-5 - формат данных (00 - binary, 01 - json) для данного пакета 00  6 бит - наличие времени  7-10 бит – int/float/string  (null/bool(byte)/float64/(u)int8/(u)int1...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Формат Payload ===&lt;br /&gt;
&lt;br /&gt;
==== Бинарный формат (например, struct) ====&lt;br /&gt;
&#039;&#039;&#039;Формат: Фиксированная структура байтов.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 2 байта - битовый описатель.&lt;br /&gt;
&lt;br /&gt;
0-2 версия&lt;br /&gt;
&lt;br /&gt;
3-5 - формат данных (00 - binary, 01 - json) для данного пакета 00&lt;br /&gt;
&lt;br /&gt;
6 бит - наличие времени&lt;br /&gt;
&lt;br /&gt;
7-10 бит – int/float/string&lt;br /&gt;
&lt;br /&gt;
(null/bool(byte)/float64/(u)int8/(u)int16/(u)int32/(u)int64/string(utf-8)/blob ) LE&lt;br /&gt;
&lt;br /&gt;
11 - array true/false (нельзя null, string)&lt;br /&gt;
&lt;br /&gt;
счетчик. замер&lt;br /&gt;
&lt;br /&gt;
* Пример: 8 байт на время ms (uint64) - может отсутсвовать&lt;br /&gt;
*&lt;br /&gt;
* Переменная часть для значения (данные).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JSON формат&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 2 байта - битовый описатель (01 - json)&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
* данные Формат: {&amp;quot;t&amp;quot;:&amp;lt;время&amp;gt;, &amp;quot;v&amp;quot;:&amp;lt;значение&amp;gt;, &amp;quot;d&amp;quot;:&amp;lt;описатель&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
Пример: {&amp;quot;t&amp;quot;:&amp;quot;2025-03-28T05:29:24.413Z&amp;quot;, &amp;quot;v&amp;quot;:50.5, }&lt;br /&gt;
&lt;br /&gt;
Для сложного значения: {&amp;quot;t&amp;quot;:1617234567890, &amp;quot;v&amp;quot;:[10,20,30], &amp;quot;d&amp;quot;:&amp;quot;disk_iops&amp;quot;}&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=MQTT&amp;diff=422</id>
		<title>MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=MQTT&amp;diff=422"/>
		<updated>2025-03-28T07:26:40Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Топики mqtt]]&lt;br /&gt;
&lt;br /&gt;
[[Формат данных для MQTT]]&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=421</id>
		<title>Топики mqtt</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=421"/>
		<updated>2025-03-28T07:02:24Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Топик&lt;br /&gt;
!Формат&lt;br /&gt;
|-&lt;br /&gt;
|граф sd-wan&lt;br /&gt;
|sd-wan/data&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|сработка правил&lt;br /&gt;
|events/rules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|внешние узлы&lt;br /&gt;
|mirror/externalNodes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь внешних узлов&lt;br /&gt;
|mirror/externalNodes/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|потоки&lt;br /&gt;
|mirror/flows&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь потоков&lt;br /&gt;
|mirror/flows/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|измерения&lt;br /&gt;
|mirror/measures&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь измерений&lt;br /&gt;
|mirror/measures/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|узлы карты сети&lt;br /&gt;
|mirror/nodes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь узлов&lt;br /&gt;
|mirror/nodes/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|таблица DHCP&lt;br /&gt;
|e-nms/dhcp/&amp;lt;mac&amp;gt;&lt;br /&gt;
|{&lt;br /&gt;
identifier?: string,&lt;br /&gt;
&lt;br /&gt;
mac?: string,&lt;br /&gt;
&lt;br /&gt;
dhcpRelay?: string,&lt;br /&gt;
&lt;br /&gt;
template?: string,&lt;br /&gt;
&lt;br /&gt;
ipSetToDevice?: string,&lt;br /&gt;
&lt;br /&gt;
status?: string[],&lt;br /&gt;
&lt;br /&gt;
flagToAllowedToConnect?: boolean,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|-&lt;br /&gt;
|буревестник&lt;br /&gt;
|/device/MKI_alfa/mb1x3/cpu1/&amp;lt;шина+канал&amp;gt;/&amp;lt;id устройства&amp;gt;/reg/&amp;lt;регистр&amp;gt;/&amp;lt;req/resp&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|задачи (tasks)&lt;br /&gt;
|e-nms/tasks/&amp;lt;id&amp;gt;&lt;br /&gt;
|{&lt;br /&gt;
id: string;&lt;br /&gt;
&lt;br /&gt;
name: string;&lt;br /&gt;
&lt;br /&gt;
alternativename: string;&lt;br /&gt;
&lt;br /&gt;
user: string,&lt;br /&gt;
&lt;br /&gt;
startRT: Date;&lt;br /&gt;
&lt;br /&gt;
endRT?: Date;&lt;br /&gt;
&lt;br /&gt;
status?: taskstatus;&lt;br /&gt;
&lt;br /&gt;
data?: any;&lt;br /&gt;
&lt;br /&gt;
progress?: any[];&lt;br /&gt;
&lt;br /&gt;
error?: string;&lt;br /&gt;
&lt;br /&gt;
timeoutRT: Date;&lt;br /&gt;
&lt;br /&gt;
version?: number;&lt;br /&gt;
&lt;br /&gt;
additionaldata?: {};&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Ссылка на схемы: https://drive.google.com/file/d/1PqLCC33zCoV3FTqQ7OKWnMz1g54gLhbM/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cтруктура топиков ==&lt;br /&gt;
Структура определяется для MQTT протокола и Zookeeper/etcd. Cовпадение путей в zookeeper &amp;amp; mqtt дает возможность накладывать данные и передавать их в разных подсистемах в одном формате.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия топика ===&lt;br /&gt;
&amp;lt;класс&amp;gt;/&amp;lt;идентификатор клиента&amp;gt;/&amp;lt;категория&amp;gt;/&amp;lt;ресурс&amp;gt;/&amp;lt;метрика&amp;gt;/&amp;lt;формат данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;класс&amp;gt; — measure.&lt;br /&gt;
* &amp;lt;категория&amp;gt; — категория (например, memory, cpu, disk, filesystem);&lt;br /&gt;
* &amp;lt;ресурс&amp;gt; — конкретный ресурс (например, sda для диска, /home для файловой системы);&lt;br /&gt;
* &amp;lt;метрика&amp;gt; — измеряемый параметр (например, used, free, iops);&lt;br /&gt;
* [&amp;lt;формат данных&amp;gt;] - должен быть равен &#039;$ent&#039; для бинарного протокола entcor, иначе может отсутствовать.&lt;br /&gt;
&lt;br /&gt;
Части топика, которые могут содержать &amp;quot;/&amp;quot; или получены из внешний системы, должны кодироваться при помощи encodeURIComponent.&lt;br /&gt;
&lt;br /&gt;
=== Пример для host agent ===&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/total&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/free&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/used&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/swap/used&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/cpu/total/usage&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/disk/sda/iops&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/filesystem/%2f/total&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/filesystem/%2fboot/used&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=420</id>
		<title>Топики mqtt</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=420"/>
		<updated>2025-03-28T07:02:02Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Топик&lt;br /&gt;
!Формат&lt;br /&gt;
|-&lt;br /&gt;
|граф sd-wan&lt;br /&gt;
|sd-wan/data&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|сработка правил&lt;br /&gt;
|events/rules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|внешние узлы&lt;br /&gt;
|mirror/externalNodes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь внешних узлов&lt;br /&gt;
|mirror/externalNodes/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|потоки&lt;br /&gt;
|mirror/flows&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь потоков&lt;br /&gt;
|mirror/flows/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|измерения&lt;br /&gt;
|mirror/measures&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь измерений&lt;br /&gt;
|mirror/measures/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|узлы карты сети&lt;br /&gt;
|mirror/nodes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|очередь узлов&lt;br /&gt;
|mirror/nodes/queue/current&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|таблица DHCP&lt;br /&gt;
|e-nms/dhcp/&amp;lt;mac&amp;gt;&lt;br /&gt;
|{&lt;br /&gt;
identifier?: string,&lt;br /&gt;
&lt;br /&gt;
mac?: string,&lt;br /&gt;
&lt;br /&gt;
dhcpRelay?: string,&lt;br /&gt;
&lt;br /&gt;
template?: string,&lt;br /&gt;
&lt;br /&gt;
ipSetToDevice?: string,&lt;br /&gt;
&lt;br /&gt;
status?: string[],&lt;br /&gt;
&lt;br /&gt;
flagToAllowedToConnect?: boolean,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|-&lt;br /&gt;
|буревестник&lt;br /&gt;
|/device/MKI_alfa/mb1x3/cpu1/&amp;lt;шина+канал&amp;gt;/&amp;lt;id устройства&amp;gt;/reg/&amp;lt;регистр&amp;gt;/&amp;lt;req/resp&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|задачи (tasks)&lt;br /&gt;
|e-nms/tasks/&amp;lt;id&amp;gt;&lt;br /&gt;
|{&lt;br /&gt;
id: string;&lt;br /&gt;
&lt;br /&gt;
name: string;&lt;br /&gt;
&lt;br /&gt;
alternativename: string;&lt;br /&gt;
&lt;br /&gt;
user: string,&lt;br /&gt;
&lt;br /&gt;
startRT: Date;&lt;br /&gt;
&lt;br /&gt;
endRT?: Date;&lt;br /&gt;
&lt;br /&gt;
status?: taskstatus;&lt;br /&gt;
&lt;br /&gt;
data?: any;&lt;br /&gt;
&lt;br /&gt;
progress?: any[];&lt;br /&gt;
&lt;br /&gt;
error?: string;&lt;br /&gt;
&lt;br /&gt;
timeoutRT: Date;&lt;br /&gt;
&lt;br /&gt;
version?: number;&lt;br /&gt;
&lt;br /&gt;
additionaldata?: {};&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Ссылка на схемы: https://drive.google.com/file/d/1PqLCC33zCoV3FTqQ7OKWnMz1g54gLhbM/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cтруктура топиков ==&lt;br /&gt;
Структура определяется для MQTT протокола и Zookeeper/etcd. Cовпадение путей в zookeeper &amp;amp; mqtt дает возможность накладывать данные и передавать их в разных подсистемах в одном формате.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия топика ===&lt;br /&gt;
&amp;lt;класс&amp;gt;/&amp;lt;идентификатор клиента&amp;gt;/&amp;lt;категория&amp;gt;/&amp;lt;ресурс&amp;gt;/&amp;lt;метрика&amp;gt;/&amp;lt;формат данных&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;класс&amp;gt; — measure.&lt;br /&gt;
* &amp;lt;категория&amp;gt; — категория (например, memory, cpu, disk, filesystem);&lt;br /&gt;
* &amp;lt;ресурс&amp;gt; — конкретный ресурс (например, sda для диска, /home для файловой системы);&lt;br /&gt;
* &amp;lt;метрика&amp;gt; — измеряемый параметр (например, used, free, iops);&lt;br /&gt;
* [&amp;lt;формат данных&amp;gt;] - должен быть равен &#039;$ent&#039; для бинарного протокола entcor, иначе может отсутствовать.&lt;br /&gt;
&lt;br /&gt;
Части топика, которые могут содержать &amp;quot;/&amp;quot; или получены из внешний системы должны кодироваться при помощи encodeURIComponent.&lt;br /&gt;
&lt;br /&gt;
=== Пример для host agent ===&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/total&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/free&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/ram/used&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/memory/swap/used&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/cpu/total/usage&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/disk/sda/iops&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/filesystem/%2f/total&lt;br /&gt;
&lt;br /&gt;
measure/&amp;lt;clientId&amp;gt;/filesystem/%2fboot/used&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=419</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=419"/>
		<updated>2025-03-28T06:46:06Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Разделы:&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Документация по Блокиратору [[Blocker]]&lt;br /&gt;
# Документация по системе мониторинга качества измерений [[МКИ|eNode.МКИ]]&lt;br /&gt;
# Документация по системе мониторинга [[nms]]&lt;br /&gt;
# Документация по системе e-core [[e-core]]&lt;br /&gt;
# Документация по SD-WAN [[sdwan]]&lt;br /&gt;
# Документация по командам docker [[Dockercompose]]&lt;br /&gt;
# Сетевые записи [[network]]&lt;br /&gt;
# Настройки разных подсистем [[systems]]&lt;br /&gt;
# [[Список серверов]] proxmox&lt;br /&gt;
# Агент [[host-agent]]&lt;br /&gt;
# [[Pnet|Pnetlab]]&lt;br /&gt;
# [[Установка сертификата]]&lt;br /&gt;
# [[Установка node-js]]&lt;br /&gt;
# [[Установка Docker]]&lt;br /&gt;
# [[Continent]]&lt;br /&gt;
# [[Формирование путей устройств]]&lt;br /&gt;
# [[Backup/Restore MongoDB|Backup\Restore MongoDB]]&lt;br /&gt;
# [[Mirror]]&lt;br /&gt;
# [[Документация Alarm Server|Документация entcor]]&lt;br /&gt;
# [[Документы по E-node|Документы по E-node]]&lt;br /&gt;
# [[MQTT]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Информацию по работе с этой вики можно найти в [[mediawikiwiki:Special:MyLanguage/Help:Contents|справочном руководстве]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Общая информация&lt;br /&gt;
&lt;br /&gt;
# договор на интернет [[Internet settings]]&lt;br /&gt;
&lt;br /&gt;
== Начало работы ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=418</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=418"/>
		<updated>2025-03-28T06:45:08Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Разделы:&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Документация по Блокиратору [[Blocker]]&lt;br /&gt;
# Документация по системе мониторинга качества измерений [[МКИ|eNode.МКИ]]&lt;br /&gt;
# Документация по системе мониторинга [[nms]]&lt;br /&gt;
# Документация по системе e-core [[e-core]]&lt;br /&gt;
# Документация по SD-WAN [[sdwan]]&lt;br /&gt;
# Документация по командам docker [[Dockercompose]]&lt;br /&gt;
# Сетевые записи [[network]]&lt;br /&gt;
# Настройки разных подсистем [[systems]]&lt;br /&gt;
# [[Список серверов]] proxmox&lt;br /&gt;
# Агент [[host-agent]]&lt;br /&gt;
# [[Pnet|Pnetlab]]&lt;br /&gt;
# [[Установка сертификата]]&lt;br /&gt;
# [[Установка node-js]]&lt;br /&gt;
# [[Установка Docker]]&lt;br /&gt;
# [[Continent]]&lt;br /&gt;
# [[Формирование путей устройств]]&lt;br /&gt;
# [[Backup/Restore MongoDB|Backup\Restore MongoDB]]&lt;br /&gt;
# [[Mirror]]&lt;br /&gt;
# [[Документация Alarm Server|Документация entcor]]&lt;br /&gt;
# [[Документы по E-node|Документы по E-node]]&lt;br /&gt;
# [[MQTT]]&lt;br /&gt;
# [[Топики mqtt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Информацию по работе с этой вики можно найти в [[mediawikiwiki:Special:MyLanguage/Help:Contents|справочном руководстве]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Общая информация&lt;br /&gt;
&lt;br /&gt;
# договор на интернет [[Internet settings]]&lt;br /&gt;
&lt;br /&gt;
== Начало работы ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=MQTT&amp;diff=417</id>
		<title>MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=MQTT&amp;diff=417"/>
		<updated>2025-03-28T06:44:57Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: Новая страница: «Топики mqtt»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Топики mqtt]]&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=409</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=409"/>
		<updated>2025-03-26T01:04:44Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: /* conntrack: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Использовать cgroup hook для исходящего трафика, чтобы не появлялись заблокированные соединения в conntrack&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=407</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=407"/>
		<updated>2025-03-18T05:02:47Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
- аутентификация zookeeper и mqtt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=397</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=397"/>
		<updated>2025-02-25T02:39:56Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: /* conntrack: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&lt;br /&gt;
* Авто тесты на conntrack&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=389</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=389"/>
		<updated>2025-02-12T01:55:25Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
===== conntrack: =====&lt;br /&gt;
&lt;br /&gt;
* Поддержка NAT&lt;br /&gt;
* Поддержка Related/Expected соединений&lt;br /&gt;
* Поддержка протоколов кроме TCP/UDP&lt;br /&gt;
* Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=346</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=346"/>
		<updated>2024-12-16T23:55:04Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Для хранения правил использовать структуры, как в ipset  &lt;br /&gt;
&lt;br /&gt;
- Cache вердиктов fw (conntrack)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock?&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=345</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=345"/>
		<updated>2024-12-16T05:38:52Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Для хранения правил использовать структуры, как в ipset  &lt;br /&gt;
&lt;br /&gt;
- Cache вердиктов fw (conntrack)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
&lt;br /&gt;
- Хранить правила не в массиве, а в hashmap с флагом &amp;lt;code&amp;gt;BPF_F_NO_PREALLOC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все)&lt;br /&gt;
&lt;br /&gt;
- При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться)&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=341</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=341"/>
		<updated>2024-11-15T02:39:56Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Для хранения правил использовать структуры, как в ipset  &lt;br /&gt;
&lt;br /&gt;
- Cache вердиктов fw (conntrack)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка MPLS &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=337</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=337"/>
		<updated>2024-11-12T00:16:46Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Для хранения правил использовать структуры, как в ipset  &lt;br /&gt;
&lt;br /&gt;
- Cache вердиктов fw (conntrack)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- транзакционность применения конфигурации (откатывать изменения, в случае сбоя)    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=336</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=336"/>
		<updated>2024-11-08T01:21:57Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Для хранения правил использовать структуры, как в ipset  &lt;br /&gt;
&lt;br /&gt;
- Cache вердиктов fw (conntrack)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- сохранение в файл конфигурации и правил    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
- Совместная работа с другими eBPF программами и очередями на уровне tc? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=333</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=333"/>
		<updated>2024-11-05T00:12:50Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Для хранения правил использовать структуры, как в ipset  &lt;br /&gt;
&lt;br /&gt;
- Cache вердиктов fw (conntrack)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- сохранение в файл конфигурации и правил    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Поддержка фрагментации на уровне L3 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=331</id>
		<title>Задачи (на проработку)</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_(%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83)&amp;diff=331"/>
		<updated>2024-10-29T06:45:55Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Производительность:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Алгоритм классификации пакетов (перебор правил)  &lt;br /&gt;
&lt;br /&gt;
- Для хранения правил использовать структуры, как в ipset  &lt;br /&gt;
&lt;br /&gt;
- Cache вердиктов fw (conntrack)  &lt;br /&gt;
&lt;br /&gt;
- Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило)  &lt;br /&gt;
&lt;br /&gt;
- Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace  &lt;br /&gt;
&lt;br /&gt;
- Ограничение по количеству правил (не хватает стека?) &lt;br /&gt;
&lt;br /&gt;
- Переход на ringbuffer (kernel &amp;gt;= 5.8) или BPF_MAP_TYPE_LRU_HASH (https://github.com/cloudflare/ebpf_exporter) или BPF_MAP_TYPE_PERCPU_HASH (https://justin.azoff.dev/blog/bpf_map_get_next_key-pitfalls/) &lt;br /&gt;
&lt;br /&gt;
- Подписка вместо опроса (docker, devices, info) &lt;br /&gt;
&lt;br /&gt;
- ip адреса передавать как числа (можно ли тип number в JS?) &lt;br /&gt;
&lt;br /&gt;
- Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных)  &lt;br /&gt;
&lt;br /&gt;
- Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем  &lt;br /&gt;
&lt;br /&gt;
- Нужно автоматическое нагрузочное тестирование  &lt;br /&gt;
&lt;br /&gt;
- Удалить отладочную информацию (stripped)   &lt;br /&gt;
&lt;br /&gt;
https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s  &lt;br /&gt;
&lt;br /&gt;
https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Распределенная система / надежность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) &lt;br /&gt;
&lt;br /&gt;
- Агент в оффлайне &lt;br /&gt;
&lt;br /&gt;
- Формирование отказоустойчивый модели зукипепов - возможно распределенной &lt;br /&gt;
&lt;br /&gt;
- Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре &lt;br /&gt;
&lt;br /&gt;
- деградация функций    &lt;br /&gt;
&lt;br /&gt;
- сохранение в файл конфигурации и правил    &lt;br /&gt;
&lt;br /&gt;
- после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Качество кода и сборки:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
- Один репозиторий на ha, blocker и winHA&lt;br /&gt;
&lt;br /&gt;
- Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c)&lt;br /&gt;
&lt;br /&gt;
- Авто тесты (модульные и функциональные)&lt;br /&gt;
&lt;br /&gt;
- be типы для bigendian&lt;br /&gt;
&lt;br /&gt;
- предотвращать одновременную работу ha на одной ОС (PID файл?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрирование (наблюдаемость, управляемость):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Безопасность:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker.&lt;br /&gt;
&lt;br /&gt;
- Защищенный Канал до агента&lt;br /&gt;
&lt;br /&gt;
- Валидация агента плюс его этп&lt;br /&gt;
&lt;br /&gt;
- CAP_BPF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поддержка сетевых технологий:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) &lt;br /&gt;
&lt;br /&gt;
- Поддержка VLAN &lt;br /&gt;
&lt;br /&gt;
- Поддержка IPv6 &lt;br /&gt;
&lt;br /&gt;
- Использование совместно с QoS и агригированными интерфейсами &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Баги:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) &lt;br /&gt;
&lt;br /&gt;
- многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам&lt;br /&gt;
&lt;br /&gt;
- bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb-&amp;gt;len равно размеру всего пакета &lt;br /&gt;
&lt;br /&gt;
- перехватывать панику во всех горутинах, иначе программа падает и не отписывается &lt;br /&gt;
&lt;br /&gt;
- Корректное завершение при сбоях (освобождение ресурсов)  &lt;br /&gt;
&lt;br /&gt;
- Обрабатывать превышение размеров eBPF HASH_MAP  &lt;br /&gt;
&lt;br /&gt;
- Валидация входных данных  &lt;br /&gt;
&lt;br /&gt;
- Обработка ошибок, логирование  &lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Сырое (не разобранное):&#039;&#039;&#039; ==&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SD-WAN: &lt;br /&gt;
&lt;br /&gt;
- Редирект пакетов, VPN&lt;br /&gt;
&lt;br /&gt;
- Корректное переключение на другой канал (разрыв соединений по старому каналу?)&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_Continent&amp;diff=327</id>
		<title>Инструкции по Continent</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_Continent&amp;diff=327"/>
		<updated>2024-10-10T06:57:48Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общее ==&lt;br /&gt;
Инструкции для [[Continent]]&lt;br /&gt;
&lt;br /&gt;
== Фиксация MAC адресов в PNetLab ==&lt;br /&gt;
&#039;&#039;&#039;ВАЖНО: Подключение флешки, как и другие манипуляции с настройками машин PNetLab и их &amp;lt;u&amp;gt;связями&amp;lt;/u&amp;gt;, заново генерируют MAC адреса для сетевых карт. Это приводит к изменению названий сетевых интерфейсов и ломает настройки сети в Continent. Что бы это избежать, необходимо заполнить поле First MAC в настройках каждой виртуальной машины уникальными значениями.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Файл:First_MAC.png]]&lt;br /&gt;
&lt;br /&gt;
Cоответсвие MAC адресов и названий интерфейсов храняться в файле /etc/udev/rules.d/70-persistent-net.rules ([https://serverfault.com/questions/981952/centos-7-how-to-get-interface-name-by-macaddress/982045#982045 ссылка])&lt;br /&gt;
&lt;br /&gt;
== Поиск соответствия сетевых интерфейсов в Linux схеме в PNetLab ==&lt;br /&gt;
Все связи с каждой стороны обозначены как eX. Число X соответствует последнему числу в MAC адресе сетевого интерфейса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mac - link.png]]&lt;br /&gt;
&lt;br /&gt;
== Сохранение виртуальных машин в PNetLab ==&lt;br /&gt;
Виртуальные машины в PNetLab работают в рамках сессии. Если сессия будет по какой-то причине остановлена, то все виртуальные машины будут сброшены до базового состояния. &lt;br /&gt;
&lt;br /&gt;
Что бы этого не произошло состояние виртуальных машин надо периодически сохранять. [https://pnetlab.com/pages/documentation?slug=commit-image-docker-and-qemu Инструкция по сохранению.]&lt;br /&gt;
&lt;br /&gt;
==== Сначал создаем копию виртуальных машин ====&lt;br /&gt;
&lt;br /&gt;
# Останавливаем машину&lt;br /&gt;
# В контекстном меню машины нажимаем Node Commit&lt;br /&gt;
# Выбираем Take snapshot ....&lt;br /&gt;
# В настройках машины указываем в качестве образа наш snapshot&lt;br /&gt;
# В контекстном меню  нажимаем Wipe&lt;br /&gt;
# Теперь наша машина работают со своим образом, но который основан на базовом образе, т.е. не занимает лишнее место.&lt;br /&gt;
&lt;br /&gt;
==== Сохраняем изменения в собственный образ ====&lt;br /&gt;
&lt;br /&gt;
# Остановить машину&lt;br /&gt;
# В контекстном меню машины нажимаем Node Commit&lt;br /&gt;
# Выбираем Commit to original&lt;br /&gt;
&lt;br /&gt;
== Монтирование виртуального диска в хостовую ОС ==&lt;br /&gt;
&lt;br /&gt;
=== Предусловия: ===&lt;br /&gt;
# Установлены пакеты qemu-utils и lvm2&lt;br /&gt;
&lt;br /&gt;
=== Монтирование: ===&lt;br /&gt;
# Загрузить модуль ядра nbd&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe nbd max_part=8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В виртульной машине PNetLab эта команда может вызывать ошибку. Тогда необходимо загрузить модуль командой:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod /lib/modules/$(uname -r)/kernel/drivers/block/nbd.ko max_part=8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Отключить виртуальную машину  &#039;&#039;&#039;(ВАЖНО: виртульную машину можно будет включить только после отключения диска из хостовой ОС!)&#039;&#039;&#039;&lt;br /&gt;
# Подключить виртуальный диск&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo qemu-nbd -c /dev/nbd1 &amp;lt;путь к виртуальному диску vdi или qcow2&amp;gt;&lt;br /&gt;
sudo mount /dev/mapper/vg00-lv_root /mnt&lt;br /&gt;
sudo mount /dev/nbd1p1 /mnt/boot # при необходимости доступа к boot разделу&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Команда &#039;&#039;&#039;lsblk&#039;&#039;&#039; показывает подключенные диски.&lt;br /&gt;
&lt;br /&gt;
Если возникнут проблемы монтирования ntfs разделов можно выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ntfsfix /dev/nbd1p2&lt;br /&gt;
mount -t ntfs-3g -o remove_hiberfile /dev/nbd1p2 /mnt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;https://unix.stackexchange.com/a/236145&lt;br /&gt;
&lt;br /&gt;
=== Отключение ===&lt;br /&gt;
# Отключить диск&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo umount /mnt/boot # если был примонтирован&lt;br /&gt;
sudo umount /mnt&lt;br /&gt;
sudo vgchange -a n vg00&lt;br /&gt;
sudo qemu-nbd -d /dev/nbd1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Включить виртуальную машину&lt;br /&gt;
# Выгрузить модуль ядра nbd, если в нем больше нет необходимости&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe -r nbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Монтирование виртуальной флешки в Continent на PNetLab ==&lt;br /&gt;
&lt;br /&gt;
=== Предусловия: ===&lt;br /&gt;
# Установлен пакет qemu-utils&lt;br /&gt;
&lt;br /&gt;
=== Создание виртуальной флешки ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe nbd max_part=8&lt;br /&gt;
#или insmod /lib/modules/$(uname -r)/kernel/drivers/block/nbd.ko max_part=8&lt;br /&gt;
qemu-img create -f raw myflash.img 512M&lt;br /&gt;
sudo qemu-nbd -c /dev/nbd2 -f raw ./myflash.img&lt;br /&gt;
fdisk /dev/nbd2&lt;br /&gt;
# ввести n&lt;br /&gt;
# соглашаться со всеми значениями по-умолчанию&lt;br /&gt;
# ввести w&lt;br /&gt;
sudo mkfs -t vfat /dev/nbd2p1&lt;br /&gt;
&lt;br /&gt;
sudo qemu-nbd -d /dev/nbd2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подключение флешки в виртуальную машину с Continent ===&lt;br /&gt;
&#039;&#039;&#039;ВАЖНО: Следующий действия могут сломать виртуальную машину с Continent (см. инструкцию &amp;quot;Фиксация MAC адресов в PNetLab&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# ВАЖНО: Убедиться, что флешка не подключена к другой виртуальной машине или хосту!&lt;br /&gt;
# В настройки виртуальной машины PNetLab в поле Qemu Options добавить:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
-drive if=none,id=stick,format=raw,file=&amp;lt;ПУТЬ К ФАЙЛУ С ВИРТУАЛЬНОЙ ФЛЕШКОЙ&amp;gt; -device nec-usb-xhci,id=xhci -device usb-storage,bus=xhci.0,drive=stick&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[Файл:PNetLab_settings.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Перезагрузить Контитент&lt;br /&gt;
&lt;br /&gt;
== Получение root доступа к Continent 4 на виртуальной машине ==&lt;br /&gt;
&lt;br /&gt;
# Отключить виртуальную машину с Continent&lt;br /&gt;
# Примонтировать виртуальный диск к хостовой машине (см. Монтирование виртуального диска в хостовую ОС)&lt;br /&gt;
# Заменить файл /mnt/boot/integrity на программу, которая всегда безусловно возвращает 0.&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char **argv) {&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[Медиа:Integrity.txt]]  (файл сохранить под именем integrity и дать права на запуск командой chmod +x integrity)&lt;br /&gt;
# В файл настроек ограниченной консоли /etc/clish/misc.xml добавить bash. Для примера можно скопировать раздел настроек для команды uptime и заменить uptime на bash. В атрибут help написать Back door. &lt;br /&gt;
# Отключить диск, включить виртуальную машину с Continent. Через локальное меню Continent запустить ограниченную консоль (Инструменты - Диагностика - Командная строка) и выполнить команду bash. Получаем полный доступ к Linux под root.&lt;br /&gt;
&lt;br /&gt;
=== Доступ по SSH ===&lt;br /&gt;
&lt;br /&gt;
#В /etc/passwd у пользователя admin меняем консоль на /bin/bash&lt;br /&gt;
# Включаем ssh доступ, в соответствии с интсрукцией &amp;quot;Руководство администратора. Управление комплексом&amp;quot;&lt;br /&gt;
# Заходим на Continent по ssh и вополняем sudo bash&lt;br /&gt;
&lt;br /&gt;
== Перекомпиляция ядра на виртуальной машине Continent ==&lt;br /&gt;
&lt;br /&gt;
# Получить root доступ Continent (см. Получение root доступа к Continent 4 на виртуальной машине)&lt;br /&gt;
# Примонтировать виртуальный диск к хостовой машине (см. Монтирование виртуального диска в хостовую ОС)&lt;br /&gt;
# В виртуальной машине в каталоге /boot по названию файлов определяем базовую версию ядра (например 5.10.210). Cкачиваем исходный код ядра нужной версии https://mirrors.edge.kernel.org/pub/linux/kernel/ . Устанавливаем необходимые для компиляции библиотеки. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev fakeroot&lt;br /&gt;
sudo apt install dwarves&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Копируем из виртуальной машины в папку с ядром  файл /boot/config-XXXX под именем .config. Добавляем/изменяем параметры ядра в конфигурационном файле:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_BPF_SYSCALL=y&lt;br /&gt;
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y&lt;br /&gt;
CONFIG_BPF_JIT_ALWAYS_ON=y&lt;br /&gt;
CONFIG_DEBUG_INFO_BTF=y&lt;br /&gt;
CONFIG_DEBUG_INFO_REDUCED=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Компилируем ядро командой make -j&amp;lt;количество параллельных потоков&amp;gt;. -Проверяем успешность компиляции:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $? #должен вернуться 0 в случае отсутсвия ошибок&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Устанавливаем новое ядро в Continent &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make INSTALL_MOD_PATH=/mnt modules_install&lt;br /&gt;
sudo make INSTALL_PATH=/mnt/boot install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;https://www.nathansweet.me/2017/02/03/build-linux-for-virtualbox&lt;br /&gt;
#Добавляем новое ядро в grub  В файле /boot/grub/grub.conf дублируем строки загрузки основного ядра, заменяя название старого ядра на новое. &lt;br /&gt;
#Увеличиваем раздел /tmp  в Continent до 1Гбт   Текущего размера раздела tmp не хватает для проведения дальнейший операций, поэтому необходимо сначала уменьшить один из больших разделов, например /var, а затем увеличить раздел /tmp из освобожденного места.   Список текущих разделов можно посмотреть командой lsblk  https://ostechnix.com/resize-lvm-partitions-linux/&lt;br /&gt;
#Отключаем виртуальный диск, запускаем Continent, заходим в консоль под root&lt;br /&gt;
#ОПЦИОНАЛЬНО: ссылаемся в нашем ядре на модули ContinentOS&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /lib/modules&lt;br /&gt;
mv 5.10.210 _5.10.210&lt;br /&gt;
ln -s 5.10.210-2.continent.x86_64 5.10.210&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Формируем initramfs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /boot&lt;br /&gt;
dracut initramfs-&amp;lt;версия ядра&amp;gt;.x86_64.img &amp;lt;версия ядра&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Перезагружаем Continent и выбираем в загрузчике новое ядро.&lt;br /&gt;
&lt;br /&gt;
== Обновление лицензий ==&lt;br /&gt;
Процесс управления лицензиями описан в документации в томе &amp;quot;Руководство администратора. Управление комплексом.&amp;quot;. Документация доступна по [https://www.securitycode.ru/products/kontinent-4/?tab=support ссылке]&lt;br /&gt;
&lt;br /&gt;
Учебные лицензии можно скачать по [https://www.securitycode.ru/download_center/?section=downloads&amp;amp;product=%D0%9A%D0%BE%D0%BD%D1%82%D0%B8%D0%BD%D0%B5%D0%BD%D1%82%204&amp;amp;version=4.1.9 ссылке]. Лицензии имеют небольшой срок действия, но постоянно актуализируются.&lt;br /&gt;
&lt;br /&gt;
Лицензионные файлы необходимо скопировать на компьютер с Менеджером конфигурации (192.168.23.26). Для это можно сначала скопировать файлы на любой компьютер из сети 192.168.23.0/29 доступный по ssh/scp. А затем скопировать на целевую машину при помощи программы WinSCP.&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_Continent&amp;diff=326</id>
		<title>Инструкции по Continent</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_Continent&amp;diff=326"/>
		<updated>2024-10-10T04:34:26Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общее ==&lt;br /&gt;
Инструкции для [[Continent]]&lt;br /&gt;
&lt;br /&gt;
== Фиксация MAC адресов в PNetLab ==&lt;br /&gt;
&#039;&#039;&#039;ВАЖНО: Подключение флешки, как и другие манипуляции с настройками машин PNetLab и их &amp;lt;u&amp;gt;связями&amp;lt;/u&amp;gt;, заново генерируют MAC адреса для сетевых карт. Это приводит к изменению названий сетевых интерфейсов и ломает настройки сети в Continent. Что бы это избежать, необходимо заполнить поле First MAC в настройках каждой виртуальной машины уникальными значениями.&#039;&#039;&#039;&lt;br /&gt;
[[Файл:First MAC.png|слева]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cоответсвие MAC адресов и названий интерфейсов храняться в файле /etc/udev/rules.d/70-persistent-net.rules ([https://serverfault.com/questions/981952/centos-7-how-to-get-interface-name-by-macaddress/982045#982045 ссылка])&lt;br /&gt;
&lt;br /&gt;
== Поиск соответствия сетевых интерфейсов в Linux схеме в PNetLab ==&lt;br /&gt;
Все связи с каждой стороны обозначены как eX. Число X соответствует последнему числу в MAC адресе сетевого интерфейса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mac - link.png]]&lt;br /&gt;
&lt;br /&gt;
== Сохранение виртуальных машин в PNetLab ==&lt;br /&gt;
Виртуальные машины в PNetLab работают в рамках сессии. Если сессия будет по какой-то причине остановлена, то все виртуальные машины будут сброшены до базового состояния. &lt;br /&gt;
&lt;br /&gt;
Что бы этого не произошло состояние виртуальных машин надо периодически сохранять. [https://pnetlab.com/pages/documentation?slug=commit-image-docker-and-qemu Инструкция по сохранению.]&lt;br /&gt;
&lt;br /&gt;
==== Сначал создаем копию виртуальных машин ====&lt;br /&gt;
&lt;br /&gt;
# Останавливаем машину&lt;br /&gt;
# В контекстном меню машины нажимаем Node Commit&lt;br /&gt;
# Выбираем Take snapshot ....&lt;br /&gt;
# В настройках машины указываем в качестве образа наш snapshot&lt;br /&gt;
# В контекстном меню  нажимаем Wipe&lt;br /&gt;
# Теперь наша машина работают со своим образом, но который основан на базовом образе, т.е. не занимает лишнее место.&lt;br /&gt;
&lt;br /&gt;
==== Сохраняем изменения в собственный образ ====&lt;br /&gt;
&lt;br /&gt;
# Остановить машину&lt;br /&gt;
# В контекстном меню машины нажимаем Node Commit&lt;br /&gt;
# Выбираем Commit to original&lt;br /&gt;
&lt;br /&gt;
== Монтирование виртуального диска в хостовую ОС ==&lt;br /&gt;
&lt;br /&gt;
=== Предусловия: ===&lt;br /&gt;
# Установлены пакеты qemu-utils и lvm2&lt;br /&gt;
&lt;br /&gt;
=== Монтирование: ===&lt;br /&gt;
# Загрузить модуль ядра nbd&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe nbd max_part=8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В виртульной машине PNetLab эта команда может вызывать ошибку. Тогда необходимо загрузить модуль командой:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod /lib/modules/$(uname -r)/kernel/drivers/block/nbd.ko max_part=8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Отключить виртуальную машину  &#039;&#039;&#039;(ВАЖНО: виртульную машину можно будет включить только после отключения диска из хостовой ОС!)&#039;&#039;&#039;&lt;br /&gt;
# Подключить виртуальный диск&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo qemu-nbd -c /dev/nbd1 &amp;lt;путь к виртуальному диску vdi или qcow2&amp;gt;&lt;br /&gt;
sudo mount /dev/mapper/vg00-lv_root /mnt&lt;br /&gt;
sudo mount /dev/nbd1p1 /mnt/boot # при необходимости доступа к boot разделу&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Команда &#039;&#039;&#039;lsblk&#039;&#039;&#039; показывает подключенные диски.&lt;br /&gt;
&lt;br /&gt;
Если возникнут проблемы монтирования ntfs разделов можно выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ntfsfix /dev/nbd1p2&lt;br /&gt;
mount -t ntfs-3g -o remove_hiberfile /dev/nbd1p2 /mnt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;https://unix.stackexchange.com/a/236145&lt;br /&gt;
&lt;br /&gt;
=== Отключение ===&lt;br /&gt;
# Отключить диск&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo umount /mnt/boot # если был примонтирован&lt;br /&gt;
sudo umount /mnt&lt;br /&gt;
sudo vgchange -a n vg00&lt;br /&gt;
sudo qemu-nbd -d /dev/nbd1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Включить виртуальную машину&lt;br /&gt;
# Выгрузить модуль ядра nbd, если в нем больше нет необходимости&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe -r nbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Монтирование виртуальной флешки в Continent на PNetLab ==&lt;br /&gt;
&lt;br /&gt;
=== Предусловия: ===&lt;br /&gt;
# Установлен пакет qemu-utils&lt;br /&gt;
&lt;br /&gt;
=== Создание виртуальной флешки ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe nbd max_part=8&lt;br /&gt;
#или insmod /lib/modules/$(uname -r)/kernel/drivers/block/nbd.ko max_part=8&lt;br /&gt;
qemu-img create -f raw myflash.img 512M&lt;br /&gt;
sudo qemu-nbd -c /dev/nbd2 -f raw ./myflash.img&lt;br /&gt;
fdisk /dev/nbd2&lt;br /&gt;
# ввести n&lt;br /&gt;
# соглашаться со всеми значениями по-умолчанию&lt;br /&gt;
# ввести w&lt;br /&gt;
sudo mkfs -t vfat /dev/nbd2p1&lt;br /&gt;
&lt;br /&gt;
sudo qemu-nbd -d /dev/nbd2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подключение флешки в виртуальную машину с Continent ===&lt;br /&gt;
&#039;&#039;&#039;ВАЖНО: Следующий действия могут сломать виртуальную машину с Continent (см. инструкцию &amp;quot;Фиксация MAC адресов в PNetLab&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# ВАЖНО: Убедиться, что флешка не подключена к другой виртуальной машине или хосту!&lt;br /&gt;
# В настройки виртуальной машины PNetLab в поле Qemu Options добавить:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
-drive if=none,id=stick,format=raw,file=&amp;lt;ПУТЬ К ФАЙЛУ С ВИРТУАЛЬНОЙ ФЛЕШКОЙ&amp;gt; -device nec-usb-xhci,id=xhci -device usb-storage,bus=xhci.0,drive=stick&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[Файл:PNetLab settings.png|слева]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Перезагрузить Контитент&lt;br /&gt;
&lt;br /&gt;
== Получение root доступа к Continent 4 на виртуальной машине ==&lt;br /&gt;
&lt;br /&gt;
# Отключить виртуальную машину с Continent&lt;br /&gt;
# Примонтировать виртуальный диск к хостовой машине (см. Монтирование виртуального диска в хостовую ОС)&lt;br /&gt;
# Заменить файл /mnt/boot/integrity на программу, которая всегда безусловно возвращает 0.&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char **argv) {&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[Медиа:Integrity.txt]]  (файл сохранить под именем integrity и дать права на запуск командой chmod +x integrity)&lt;br /&gt;
# В файл настроек ограниченной консоли /etc/clish/misc.xml добавить bash. Для примера можно скопировать раздел настроек для команды uptime и заменить uptime на bash. В атрибут help написать Back door. &lt;br /&gt;
# Отключить диск, включить виртуальную машину с Continent. Через локальное меню Continent запустить ограниченную консоль (Инструменты - Диагностика - Командная строка) и выполнить команду bash. Получаем полный доступ к Linux под root.&lt;br /&gt;
&lt;br /&gt;
=== Доступ по SSH ===&lt;br /&gt;
&lt;br /&gt;
#В /etc/passwd у пользователя admin меняем консоль на /bin/bash&lt;br /&gt;
# Включаем ssh доступ, в соответствии с интсрукцией &amp;quot;Руководство администратора. Управление комплексом&amp;quot;&lt;br /&gt;
# Заходим на Continent по ssh и вополняем sudo bash&lt;br /&gt;
&lt;br /&gt;
== Перекомпиляция ядра на виртуальной машине Continent ==&lt;br /&gt;
&lt;br /&gt;
# Получить root доступ Continent (см. Получение root доступа к Continent 4 на виртуальной машине)&lt;br /&gt;
# Примонтировать виртуальный диск к хостовой машине (см. Монтирование виртуального диска в хостовую ОС)&lt;br /&gt;
# В виртуальной машине в каталоге /boot по названию файлов определяем базовую версию ядра (например 5.10.210). Cкачиваем исходный код ядра нужной версии https://mirrors.edge.kernel.org/pub/linux/kernel/ . Устанавливаем необходимые для компиляции библиотеки. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev fakeroot&lt;br /&gt;
sudo apt install dwarves&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Копируем из виртуальной машины в папку с ядром  файл /boot/config-XXXX под именем .config. Добавляем/изменяем параметры ядра в конфигурационном файле:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_BPF_SYSCALL=y&lt;br /&gt;
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y&lt;br /&gt;
CONFIG_BPF_JIT_ALWAYS_ON=y&lt;br /&gt;
CONFIG_DEBUG_INFO_BTF=y&lt;br /&gt;
CONFIG_DEBUG_INFO_REDUCED=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Компилируем ядро командой make -j&amp;lt;количество параллельных потоков&amp;gt;. -Проверяем успешность компиляции:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $? #должен вернуться 0 в случае отсутсвия ошибок&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Устанавливаем новое ядро в Continent &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make INSTALL_MOD_PATH=/mnt modules_install&lt;br /&gt;
sudo make INSTALL_PATH=/mnt/boot install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;https://www.nathansweet.me/2017/02/03/build-linux-for-virtualbox&lt;br /&gt;
#Добавляем новое ядро в grub  В файле /boot/grub/grub.conf дублируем строки загрузки основного ядра, заменяя название старого ядра на новое. &lt;br /&gt;
#Увеличиваем раздел /tmp  в Continent до 1Гбт   Текущего размера раздела tmp не хватает для проведения дальнейший операций, поэтому необходимо сначала уменьшить один из больших разделов, например /var, а затем увеличить раздел /tmp из освобожденного места.   Список текущих разделов можно посмотреть командой lsblk  https://ostechnix.com/resize-lvm-partitions-linux/&lt;br /&gt;
#Отключаем виртуальный диск, запускаем Continent, заходим в консоль под root&lt;br /&gt;
#ОПЦИОНАЛЬНО: ссылаемся в нашем ядре на модули ContinentOS&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /lib/modules&lt;br /&gt;
mv 5.10.210 _5.10.210&lt;br /&gt;
ln -s 5.10.210-2.continent.x86_64 5.10.210&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Формируем initramfs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /boot&lt;br /&gt;
dracut initramfs-&amp;lt;версия ядра&amp;gt;.x86_64.img &amp;lt;версия ядра&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Перезагружаем Continent и выбираем в загрузчике новое ядро.&lt;br /&gt;
&lt;br /&gt;
== Обновление лицензий ==&lt;br /&gt;
Процесс управления лицензиями описан в документации в томе &amp;quot;Руководство администратора. Управление комплексом.&amp;quot;. Документация доступна по [https://www.securitycode.ru/products/kontinent-4/?tab=support ссылке]&lt;br /&gt;
&lt;br /&gt;
Учебные лицензии можно скачать по [https://www.securitycode.ru/download_center/?section=downloads&amp;amp;product=%D0%9A%D0%BE%D0%BD%D1%82%D0%B8%D0%BD%D0%B5%D0%BD%D1%82%204&amp;amp;version=4.1.9 ссылке]. Лицензии имеют небольшой срок действия, но постоянно актуализируются.&lt;br /&gt;
&lt;br /&gt;
Лицензионные файлы необходимо скопировать на компьютер с Менеджером конфигурации (192.168.23.26). Для это можно сначала скопировать файлы на любой компьютер из сети 192.168.23.0/29 доступный по ssh/scp. А затем скопировать на целевую машину при помощи программы WinSCP.&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_Continent&amp;diff=325</id>
		<title>Инструкции по Continent</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_Continent&amp;diff=325"/>
		<updated>2024-10-10T02:21:35Z</updated>

		<summary type="html">&lt;p&gt;192.168.99.249: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общее ==&lt;br /&gt;
Инструкции для [[Continent]]&lt;br /&gt;
&lt;br /&gt;
== Фиксация MAC адресов в PNetLab ==&lt;br /&gt;
&#039;&#039;&#039;ВАЖНО: Подключение флешки, как и другие манипуляции с настройками машин PNetLab и их &amp;lt;u&amp;gt;связями&amp;lt;/u&amp;gt;, заново генерируют MAC адреса для сетевых карт. Это приводит к изменению названий сетевых интерфейсов и ломает настройки сети в Continent. Что бы это избежать, необходимо заполнить поле First MAC в настройках каждой виртуальной машины уникальными значениями.&#039;&#039;&#039;&lt;br /&gt;
[[Файл:First MAC.png|слева]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cоответсвие MAC адресов и названий интерфейсов храняться в файле /etc/udev/rules.d/70-persistent-net.rules ([https://serverfault.com/questions/981952/centos-7-how-to-get-interface-name-by-macaddress/982045#982045 ссылка])&lt;br /&gt;
&lt;br /&gt;
== Поиск соответствия сетевых интерфейсов в Linux схеме в PNetLab ==&lt;br /&gt;
Все связи с каждой стороны обозначены как eX. Число X соответствует последнему числу в MAC адресе сетевого интерфейса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mac - link.png]]&lt;br /&gt;
&lt;br /&gt;
== Сохранение виртуальных машин в PNetLab ==&lt;br /&gt;
Виртуальные машины в PNetLab работают в рамках сессии. Если сессия будет по какой-то причине остановлена, то все виртуальные машины будут сброшены до базового состояния. &lt;br /&gt;
&lt;br /&gt;
Что бы этого не произошло состояние виртуальных машин надо периодически сохранять. [https://pnetlab.com/pages/documentation?slug=commit-image-docker-and-qemu Инструкция по сохранению.]&lt;br /&gt;
&lt;br /&gt;
==== Сначал создаем копию виртуальных машин ====&lt;br /&gt;
&lt;br /&gt;
# Останавливаем машину&lt;br /&gt;
# В контекстном меню машины нажимаем Node Commit&lt;br /&gt;
# Выбираем Take snapshot ....&lt;br /&gt;
# В настройках машины указываем в качестве образа наш snapshot&lt;br /&gt;
# В контекстном меню  нажимаем Wipe&lt;br /&gt;
# Теперь наша машина работают со своим образом, но который основан на базовом образе, т.е. не занимает лишнее место.&lt;br /&gt;
&lt;br /&gt;
==== Сохраняем изменения в собственный образ ====&lt;br /&gt;
&lt;br /&gt;
# Остановить машину&lt;br /&gt;
# В контекстном меню машины нажимаем Node Commit&lt;br /&gt;
# Выбираем Commit to original&lt;br /&gt;
&lt;br /&gt;
== Монтирование виртуального диска в хостовую ОС ==&lt;br /&gt;
&lt;br /&gt;
=== Предусловия: ===&lt;br /&gt;
# Установлены пакеты qemu-utils и lvm2&lt;br /&gt;
&lt;br /&gt;
=== Монтирование: ===&lt;br /&gt;
# Загрузить модуль ядра nbd&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe nbd max_part=8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В виртульной машине PNetLab эта команда может вызывать ошибку. Тогда необходимо загрузить модуль командой:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
insmod /lib/modules/$(uname -r)/kernel/drivers/block/nbd.ko max_part=8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Отключить виртуальную машину  &#039;&#039;&#039;(ВАЖНО: виртульную машину можно будет включить только после отключения диска из хостовой ОС!)&#039;&#039;&#039;&lt;br /&gt;
# Подключить виртуальный диск&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo qemu-nbd -c /dev/nbd1 &amp;lt;путь к виртуальному диску vdi или qcow2&amp;gt;&lt;br /&gt;
sudo mount /dev/mapper/vg00-lv_root /mnt&lt;br /&gt;
sudo mount /dev/nbd1p1 /mnt/boot # при необходимости доступа к boot разделу&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Команда &#039;&#039;&#039;lsblk&#039;&#039;&#039; показывает подключенные диски.&lt;br /&gt;
&lt;br /&gt;
Если возникнут проблемы монтирования ntfs разделов можно выполнить:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ntfsfix /dev/nbd1p2&lt;br /&gt;
mount -t ntfs-3g -o remove_hiberfile /dev/nbd1p2 /mnt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;https://unix.stackexchange.com/a/236145&lt;br /&gt;
&lt;br /&gt;
=== Отключение ===&lt;br /&gt;
# Отключить диск&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo umount /mnt/boot # если был примонтирован&lt;br /&gt;
sudo umount /mnt&lt;br /&gt;
sudo vgchange -a n vg00&lt;br /&gt;
sudo qemu-nbd -d /dev/nbd1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Включить виртуальную машину&lt;br /&gt;
# Выгрузить модуль ядра nbd, если в нем больше нет необходимости&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
modprobe -r nbd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Монтирование виртуальной флешки в Continent на PNetLab ==&lt;br /&gt;
&lt;br /&gt;
=== Предусловия: ===&lt;br /&gt;
# Установлен пакет qemu-utils&lt;br /&gt;
&lt;br /&gt;
=== Создание виртуальной флешки ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe nbd max_part=8&lt;br /&gt;
#или insmod /lib/modules/$(uname -r)/kernel/drivers/block/nbd.ko max_part=8&lt;br /&gt;
qemu-img create -f raw myflash.img 512M&lt;br /&gt;
sudo qemu-nbd -c /dev/nbd2 -f raw ./myflash.img&lt;br /&gt;
fdisk /dev/nbd2&lt;br /&gt;
# ввести n&lt;br /&gt;
# соглашаться со всеми значениями по-умолчанию&lt;br /&gt;
# ввести w&lt;br /&gt;
sudo mkfs -t vfat /dev/nbd2p1&lt;br /&gt;
&lt;br /&gt;
sudo qemu-nbd -d /dev/nbd2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подключение флешки в виртуальную машину с Continent ===&lt;br /&gt;
&#039;&#039;&#039;ВАЖНО: Следующий действия могут сломать виртуальную машину с Continent (см. инструкцию &amp;quot;Фиксация MAC адресов в PNetLab&amp;quot;)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# ВАЖНО: Убедиться, что флешка не подключена к другой виртуальной машине или хосту!&lt;br /&gt;
# В настройки виртуальной машины PNetLab в поле Qemu Options добавить:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
-drive if=none,id=stick,format=raw,file=&amp;lt;ПУТЬ К ФАЙЛУ С ВИРТУАЛЬНОЙ ФЛЕШКОЙ&amp;gt; -device nec-usb-xhci,id=xhci -device usb-storage,bus=xhci.0,drive=stick&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[Файл:PNetLab settings.png|слева]]&lt;br /&gt;
# Перезагрузить Continent&lt;br /&gt;
&lt;br /&gt;
== Получение root доступа к Continent 4 на виртуальной машине ==&lt;br /&gt;
&lt;br /&gt;
# Отключить виртуальную машину с Continent&lt;br /&gt;
# Примонтировать виртуальный диск к хостовой машине (см. Монтирование виртуального диска в хостовую ОС)&lt;br /&gt;
# Заменить файл /mnt/boot/integrity на программу, которая всегда безусловно возвращает 0.&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char **argv) {&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[Медиа:Integrity.txt]]  (файл сохранить под именем integrity и дать права на запуск командой chmod +x integrity)&lt;br /&gt;
# В файл настроек ограниченной консоли /etc/clish/misc.xml добавить bash. Для примера можно скопировать раздел настроек для команды uptime и заменить uptime на bash. В атрибут help написать Back door. &lt;br /&gt;
# Отключить диск, включить виртуальную машину с Continent. Через локальное меню Continent запустить ограниченную консоль (Инструменты - Диагностика - Командная строка) и выполнить команду bash. Получаем полный доступ к Linux под root.&lt;br /&gt;
&lt;br /&gt;
=== Доступ по SSH ===&lt;br /&gt;
&lt;br /&gt;
#В /etc/passwd у пользователя admin меняем консоль на /bin/bash&lt;br /&gt;
# Включаем ssh доступ, в соответствии с интсрукцией &amp;quot;Руководство администратора. Управление комплексом&amp;quot;&lt;br /&gt;
# Заходим на Continent по ssh и вополняем sudo bash&lt;br /&gt;
&lt;br /&gt;
== Перекомпиляция ядра на виртуальной машине Continent ==&lt;br /&gt;
&lt;br /&gt;
# Получить root доступ Continent (см. Получение root доступа к Continent 4 на виртуальной машине)&lt;br /&gt;
# Примонтировать виртуальный диск к хостовой машине (см. Монтирование виртуального диска в хостовую ОС)&lt;br /&gt;
# В виртуальной машине в каталоге /boot по названию файлов определяем базовую версию ядра (например 5.10.210). Cкачиваем исходный код ядра нужной версии https://mirrors.edge.kernel.org/pub/linux/kernel/ . Устанавливаем необходимые для компиляции библиотеки. &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev fakeroot&lt;br /&gt;
sudo apt install dwarves&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Копируем из виртуальной машины в папку с ядром  файл /boot/config-XXXX под именем .config. Добавляем/изменяем параметры ядра в конфигурационном файле:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
CONFIG_BPF_SYSCALL=y&lt;br /&gt;
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y&lt;br /&gt;
CONFIG_BPF_JIT_ALWAYS_ON=y&lt;br /&gt;
CONFIG_DEBUG_INFO_BTF=y&lt;br /&gt;
CONFIG_DEBUG_INFO_REDUCED=y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Компилируем ядро командой make -j&amp;lt;количество параллельных потоков&amp;gt;. -Проверяем успешность компиляции:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $? #должен вернуться 0 в случае отсутсвия ошибок&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Устанавливаем новое ядро в Continent &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make INSTALL_MOD_PATH=/mnt modules_install&lt;br /&gt;
sudo make INSTALL_PATH=/mnt/boot install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;https://www.nathansweet.me/2017/02/03/build-linux-for-virtualbox&lt;br /&gt;
#Добавляем новое ядро в grub  В файле /boot/grub/grub.conf дублируем строки загрузки основного ядра, заменяя название старого ядра на новое. &lt;br /&gt;
#Увеличиваем раздел /tmp  в Continent до 1Гбт   Текущего размера раздела tmp не хватает для проведения дальнейший операций, поэтому необходимо сначала уменьшить один из больших разделов, например /var, а затем увеличить раздел /tmp из освобожденного места.   Список текущих разделов можно посмотреть командой lsblk  https://ostechnix.com/resize-lvm-partitions-linux/&lt;br /&gt;
#Отключаем виртуальный диск, запускаем Continent, заходим в консоль под root&lt;br /&gt;
#ОПЦИОНАЛЬНО: ссылаемся в нашем ядре на модули ContinentOS&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /lib/modules&lt;br /&gt;
mv 5.10.210 _5.10.210&lt;br /&gt;
ln -s 5.10.210-2.continent.x86_64 5.10.210&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Формируем initramfs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /boot&lt;br /&gt;
dracut initramfs-&amp;lt;версия ядра&amp;gt;.x86_64.img &amp;lt;версия ядра&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
#Перезагружаем Continent и выбираем в загрузчике новое ядро.&lt;br /&gt;
&lt;br /&gt;
== Обновление лицензий ==&lt;br /&gt;
Процесс управления лицензиями описан в документации в томе &amp;quot;Руководство администратора. Управление комплексом.&amp;quot;. Документация доступна по [https://www.securitycode.ru/products/kontinent-4/?tab=support ссылке]&lt;br /&gt;
&lt;br /&gt;
Учебные лицензии можно скачать по [https://www.securitycode.ru/download_center/?section=downloads&amp;amp;product=%D0%9A%D0%BE%D0%BD%D1%82%D0%B8%D0%BD%D0%B5%D0%BD%D1%82%204&amp;amp;version=4.1.9 ссылке]. Лицензии имеют небольшой срок действия, но постоянно актуализируются.&lt;br /&gt;
&lt;br /&gt;
Лицензионные файлы необходимо скопировать на компьютер с Менеджером конфигурации (192.168.23.26). Для это можно сначала скопировать файлы на любой компьютер из сети 192.168.23.0/29 доступный по ssh/scp. А затем скопировать на целевую машину при помощи программы WinSCP.&lt;/div&gt;</summary>
		<author><name>192.168.99.249</name></author>
	</entry>
</feed>