Редактирование:
Задачи (на проработку)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
'''Производительность:''' - Алгоритм классификации пакетов (перебор правил) - Вердикт на обратный трафик на основе conntrack (сейчас требуется обратное правило) - Часть правил хранить в userspace и подгружать только по необходимости в BPF. Отдельно заполнять таблицу с описанимем пакетов, не попадающих под правила, чтобы постоянно не лезть в userspace - Ограничение по количеству правил (не хватает стека?) - Переход на ringbuffer (kernel >= 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/) - Подписка вместо опроса (docker, devices, info) - ip адреса передавать как числа (можно ли тип number в JS?) - Формат передачи статистики (не HTTP?) (перехода на Push режим в части данных) - Передавать статистику не как JSON или сокращаеть его максимально. Сейчас очень большие объемы лишних данных (ключей) передаем - Нужно автоматическое нагрузочное тестирование - Удалить отладочную информацию (stripped) https://www.codingexplorations.com/blog/reducing-binary-size-in-go-strip-unnecessary-data-with-ldflags-w-s https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/ - Хранить правила не в массиве, а в hashmap с флагом <code>BPF_F_NO_PREALLOC</code> - Оптимизация по использумой памяти. Сколько памяти потребляется? Какие размеры ebpf maps? Что делать при превышении размеров? Кэш использовать? Ограничивать ли ulimit memlock? - Наборы правил хранить в разных узлах zookeeper (может превысить ограничение на размер узла; при изменении одного набора перезагружаем их все) - При помощи опции отключать сбор сетевой статистики и статистики по правиалам (сейчас статистика на уровне ядра собирается всегда, но может никуда не отправляться) ===== conntrack: ===== * Использовать cgroup hook для исходящего трафика??? (возможно уменьшит количество блокированных соединений) https://pchaigno.github.io/ebpf/2020/09/29/bpf-isnt-about-speed.html * Поддержка NAT * Поддержка Related/Expected соединений * Поддержка протоколов кроме TCP/UDP * Включение CT из основной конфигурации, по возможности без перезагрузки bpf_ksym_exists (https://github.com/cilium/ebpf/pull/1364) * Авто тесты на conntrack<br /> '''Распределенная система / надежность:''' - Обрабатывать потерю связи HA с внешними сервисами (сейчас возможно зависание всего цикла отправки из-за недоступности http) - Агент в оффлайне - Формирование отказоустойчивый модели зукипепов - возможно распределенной - Запуск на старом ядре с контролем его версии. При стром ядре запускаем анент, но кернел спейс запуститься не моожет. Пусть юзер часть запустится и отрапартнует пакетом на сервер о старом ядре - деградация функций - транзакционность применения конфигурации (откатывать изменения, в случае сбоя) - после пересоздания контейнера с zookeeper, работающие HA не могут соединиться с ним. Помогает только перезагрузка HA '''Качество кода и сборки:''' - Один репозиторий на ha, blocker и winHA - Использовать макросы для разбора сетевых заголовков (https://github.com/cloudflare/ebpf_exporter/blob/master/examples/xdp.bpf.c) - Авто тесты (модульные и функциональные) - be типы для bigendian - предотвращать одновременную работу ha на одной ОС (PID файл?) - сборка без доступа в интернет (vendoring) '''Администрирование (наблюдаемость, управляемость):''' - Логирование сервисов под linux и windows (отдельный лог файл, текст сообщений хранить в отдельном файле, логировать коды https://learn.microsoft.com/en-us/windows/win32/eventlog/message-files, так же использовать категории, изучить best practice) , syslog - доставка конфигурации до host agenta - CLI: обрабатывать и корректно/аккуратно печатать ошибки от API '''Безопасность:''' - Размер IP, TCP, UDP(?) заголовков не фиксирован. Возможны опциональные поля. Это надо учитывать. Особенно для firewall и bloccker. - Защищенный Канал до агента - Валидация агента плюс его этп - CAP_BPF - аутентификация zookeeper и mqtt, - хранение паролей - авторизация (каждый агент заходит подсвом пользователем и имеет доступ только к своим данным, правила только для чтения) '''Поддержка сетевых технологий:''' - Добавлять неизвестные(неразобранные) пакеты в статистику (есть потеря части информации) - Поддержка VLAN - Поддержка MPLS - Поддержка IPv6 - Поддержка фрагментации на уровне L3 - Использование совместно с QoS и агригированными интерфейсами - Совместная работа с другими eBPF программами и очередями на уровне tc? '''Баги:''' - возможно переполнение счетчика с количеством байт, надо использовать структуру с двумя счетчиками (https://elixir.bootlin.com/linux/v5.17.6/source/samples/bpf/sockex2_kern.c#L213) - многопоточность не обрабатывается (для правил, опции и статистики), может приводить к редким невоспроизоводимым проблемам - bpf_skb_pull_data (загрузка всего пакета) Проверить, что skb->len равно размеру всего пакета - перехватывать панику во всех горутинах, иначе программа падает и не отписывается - Корректное завершение при сбоях (освобождение ресурсов) - Обрабатывать превышение размеров eBPF HASH_MAP - Валидация входных данных - Обработка ошибок, логирование '''Windows:''' * Использовать WFP транзакции при обновлении правил * Перехватывать панику во всех горутинах, чтобы записывать в windows events причину паники * Не отображаются наши правила через стандартные инструменты просмотра * Какой вес для sublayer ставить? как взаимодействовать с другими правилами? == '''Сырое (не разобранное):''' == ---- SD-WAN: - Редирект пакетов, VPN - Корректное переключение на другой канал (разрыв соединений по старому каналу?)
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «EWiki» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
EWiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
Править код
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Служебные страницы
Инструменты
Ссылки сюда
Связанные правки
Сведения о странице