Можно ли повторно передать пакет после захвата его с использованием XDP и обработки его в пространстве пользователя? - PullRequest
0 голосов
/ 29 апреля 2018

Мне нужно написать приложение, которое размещается между двумя серверами и изменяет HTTP-пакеты, отправляемые с одного сервера на другой, добавляя определенный HTTP-заголовок к каждому пакету.
По-видимому, это должно быть сделано как можно быстрее, я обнаружил, что с помощью eBFP и XDP я могу захватывать пакеты с высокой производительностью, но, насколько я вижу, вердикты XDP: abort, drop, pass и ТХ .
Используя вердикт tx , я могу отправить захваченный пакет в программу пространства пользователя, чтобы изменить его, но я не мог понять, как отправить пакет после модификации заголовка? Это видео здесь является объяснением того, что можно сделать с использованием eBPF и XDP, и в нем говорится, что это можно сделать, но я не смог выяснить, как.
Любая помощь будет оценена.

1 Ответ

0 голосов
/ 09 октября 2018

Насколько я знаю, XDP_TX будет не пропустить пакет через пространство пользователя. Он вернет пакет на тот же сетевой адаптер, с которого он пришел. Кроме того, вы можете изменить пакет, но я не вижу простого способа расширения пакета. Следовательно, чтобы написать дополнительный заголовок, вам придется переопределить некоторые данные.

Похоже, у вас есть два варианта:

  • Полагаться на обратный прокси-сервер L7 HTTP (для добавления заголовка)
  • Используйте команду nfqueue, если вы хотите, чтобы пакеты не доходили до вашего хоста, и отправляйте их обратно.
...