<?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.2.140</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.2.140"/>
	<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.2.140"/>
	<updated>2026-06-12T16:51:09Z</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=319</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=319"/>
		<updated>2024-09-18T02:45:25Z</updated>

		<summary type="html">&lt;p&gt;192.168.2.140: &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;
- использовать go context для завершения программы (пример https://github.com/pouriyajamshidi/flat)&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;
- контроль агентом утилизации ресурсов&lt;br /&gt;
&lt;br /&gt;
- доставка конфигурации до host agenta&lt;br /&gt;
&lt;br /&gt;
- изменить формат правил как в cilium и k8s (port - portEnd, CIDR, to/from)&lt;br /&gt;
&lt;br /&gt;
&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;
&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.2.140</name></author>
	</entry>
</feed>