Приоритезация и маршрутизация входящего трафика к виртуальным интерфейсам на основе порта с PF_RING
У меня есть система, подключенная к порту SPAN, который выдает почти постоянные 10 Гбит / с необработанного сетевого трафика. Моя основная цель - наблюдать за всем трафиком DHCP с нулевыми потерями, но мне также нужно иметь возможность наблюдать (приемлемо с потерями) поток не-DHCP-трафика. Собственный интерфейс в настоящее время отбрасывает около 0,25% всего трафика как есть.
Чтобы это работало, я предполагаю следующее:
- Входящий SPAN-трафик поступает через единый интерфейс, который ставит DHCP превыше всего.
- Трафик направляется на два виртуальных интерфейса в зависимости от того, является ли он DHCP (порт 67/68) или нет.
Код, который я использую для обработки / анализа трафика, можно запускать параллельно, и каждый экземпляр может просматривать свой интерфейс. Самым большим неизвестным мне является то, что он использует PF_RING. Я не очень хорошо знаком с PF_RING и не могу сказать, предотвращает ли онtc
фильтрация на основе работает как я ожидал.
Я попытался заставить это работать через tc
, но я изо всех сил пытаюсь заставить его работать должным образом. Я использовал следующую последовательность команд, гдеbr0
это исходный интерфейс ввода:
ip link add dummy0 type dummy
ip link set dummy0 up
# Create the ingress queue discipline
tc qdisc add dev br0 handle ffff: ingress
# Setup the filters to mirror UDP traffic to dummy0
tc filter add dev br0 parent ffff: protocol ip u32 match ip dport 67 0x00ff action mirred egress redirect dev dummy0
tc filter add dev br0 parent ffff: protocol ip u32 match ip dport 68 0x00ff action mirred egress redirect dev dummy0
tc filter add dev br0 parent ffff: protocol ip u32 match ip sport 67 0x00ff action mirred egress redirect dev dummy0
tc filter add dev br0 parent ffff: protocol ip u32 match ip sport 68 0x00ff action mirred egress redirect dev dummy0
Это похоже на зеркальное отображение трафика DHCP на виртуальный интерфейс (dummy0
) на тестовой виртуальной машине, на которой не запущен PF_RING, но когда я пробую то же самое в своей полной системе, он дает ошибочные результаты (я получаю не-DHCP вещи на dummy0
интерфейс, и похоже, что мне тоже не хватает DHCP-трафика). Я также не смог заставить приоритизацию на основе DHCP работать с интерфейсом ввода, что, я думаю, является просто моим непониманиемtc PRIO
набор команд.