@valera_efremov

Как размножить UDP пакет?

Хочу сделать сервер-посредник между внешними ip (пользователями).
Нужны условия(правила), которые будут динамически меняться.

Например:
  • Если сервер получил UDP пакет от х.х.х.х, то перенаправить пакет на y.y.y.y и z.z.z.z
  • Если сервер получил UDP пакет от y.y.y.y или от z.z.z.z, то перенаправить пакет на x.x.x.x


Какой способ выбрать для этого? Не последнюю роль играет быстродействие.
  • iptables? Но можно ли в нем писать такие условия и клонировать пакеты на несколько ip? И насколько удобно находить правила для удаления и создавать новые правила.
  • nginx? Да, достаточно удобно создавать и удалять правила, например просто создавая/удаляя конфиг файлы. Удобные условия. Но можно ли клонировать пакеты. И думаю, что это помедленнее чем iptables, но на сколько мс.
  • Высокоуровневый ЯП (C/Python/PHP), да, максимально удобно. Но быстродействие я думаю будет плохим, но на сколько мс.
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 1
iptables может зеркалировать трафик по условиям и быстро, но это не одна строчка правил.
Посему, наилучшим вариантом вижу 1 и 3 пункты вместе - например, используя python-iptables, управлять текущим состоянием конфигурации в iptables.

Цели и специфика задачи не достаточно подробно расписаны, но если двигаться от самого дешевого варианта, я бы хранил необходимую текущую конфигурацию в yaml-файле, к примеру
state:
  - name: user_1
    src: х.х.х.х
    mirrors:
      -  y.y.y.y
      -  z.z.z.z

Ну и mirrors могут быть глобальными, если для всех пользователей одинаковы.

Запуск питоновского скрипта превратит yaml в реальную конфигурацию в iptables. Главное не забыть отслеживать когда из исходной конфигурации удаляются записи - для связки можно использовать name и группировать правила в цепочки под этим именем. Ну а идеальным решением будет использовать СУБД для хранения текущего состояния.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы