Giter Site home page Giter Site logo

Comments (6)

vel21ripn avatar vel21ripn commented on August 16, 2024 2

В conntrack, в connlabel (128bit) хранится адрес структуры. На разных хостах адреса структур будут разные. При такой схеме синхронизация невозможна принципиально.
Чтобы хоть как-то синхронизовать ноды нужно решить 2 проблемы: падение и синхронизация данных о соединених самого nDPI.

Чтобы избежать падения нужно как минимум иметь разные MAGIC_CT на разных хостах (например задать через procfs). Это просто.
Либо подправить conntrackd чтобы он не восстанавливал данные для connlabel.

Для синхронизации данных nDPI нужно писать аналог conntrackd или допиливать сам conntrackd т.к. в connlabel не запихнуть всю необходимую информацию. Полная синхронизация это очень сложно. Нужно учитывать, что у ndpi данные о соединении меняются чуть ли не после каждого пакета (в начале соединения).
Если синхронизировать только номера протоколов и уровень достоверности, то
это можно сделать путём допиливания conntrackd и модуля ядра.
Всё, что не влезает в 128 бит синхронизировать значительно сложнее.

У нас большие проблемы с ядром.
С 5.19 нет возможности легально обработать удаление записи из conntrack. Чуть ранее была ликвидирована возможность расширять nfconntrack.

Пока я пытаюсь обходиться без патчей для ядра (пересобрать ядро во многих дистрибутивах невозможно для большинства пользователей т.к. ядро подписано).

from ndpi.

Antaryo avatar Antaryo commented on August 16, 2024

То есть для чего используется connlabel в conntrack в общем случае?

Судя по тому что я вижу, это "буфер" для синхронизации данных в модуле, которые взаимодействуют с сессией.
И эти данные должны быть одинаковыми между нодами, чтобы прозрачно переключаться между ними.

Поправьте, если я не прав.

Но если я правильно понял, получается, что без этого тот же nDPI не сможет перенять соединение у отключающийся ноды, так как для поддержки соединения не будет достаточно информации.
Верно?

По крайней мере в эксперименте с синхронизацией conntrackd, с разным MAGIC_CT у нод, падения действительно не было, но сессии через правило iptables с nDPI не переносились.

from ndpi.

Antaryo avatar Antaryo commented on August 16, 2024

А собственно появление connlabel - это не этот патч к ядру?

Я пытаюсь найти концы connlabel, в частности как оно применяется в conntrack и откуда ограничение в 128 бит.

И если это оно, а не может пользователь заменить этот самый label через iptables -m connlabel?

from ndpi.

vel21ripn avatar vel21ripn commented on August 16, 2024

Это не тот патч. Патч нужен если нет возможности использовать live-patch.
connlabel - это возможность хранить в conntrack свои 128 бит данных.
ndpi использует connlabel для хранения указателя на свои структуры.
Это грязный хак.

from ndpi.

Antaryo avatar Antaryo commented on August 16, 2024

connlabel - это возможность хранить в conntrack свои 128 бит данных.

Разве свои 128 бит данных?
Судя по общению в коммите(коммите, не патче, перепутал) connlable - это расширение conntrack, чтобы хранить lablel, который задаётся через iptables -m connlabel.

Поэтому следом у меня и возник вопрос:

И если это оно, а не может пользователь заменить этот самый label через iptables -m connlabel?

from ndpi.

vel21ripn avatar vel21ripn commented on August 16, 2024

Я сейчас в отпуске, т.ч. не каждый день заглядываю на гитхаб.

connlabel позволяет задать соединению метку в виде 128 битного значения.

Я использовал эту возможность для хранения указателя на внутренние структуры ndpi. Это грязый хак. Если через -j CONNLABEL исправить заначения битов с 64 по 127, то можно получить kernel panic.

Твой PR задает MAGIC_CT один раз при загрузке модуля, что не совсем корректно.

MAGIC_CT должен быть уникален для каждого netns и сделать это нужно до появления первого правила ndpi.
Нужно добавить поле типа "uint16_t magic_ct" в "struct ndpi_net".
Нужно добавить в парсер для /proc/net/xt_ndpi/proto назначение поля.
В качестве примера можно использовать команду netns которая задает имя для netns (поле ns_name) .

from ndpi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.