Всем добрый день.
Столкнулся с задачей - нужно отбрасывать любой первый входящий UDP-пакет с любого IP. То есть, при поступлении пакета с IP x.x.x.x, DROP'ать его, любые следующие пакеты с данного IP нужно пропускать.
Что в настоящий момент: 1) Двухпроцессорный Xeon E5-2600 серии с linux на борту, никаких conntrack конечно и т.п. 2) Около 3Mpps и 1Gbps входящего трафика 3) Одновременно около 2Mpps различных source IP.
Опытным путем выяснено, что hashlimit с трудом выполняет задачу, но при этом утилизируя все ядра в полку (свободных ресурсов не остается вообще) и есть потери пакетов. Учитывая, что в будущем нагрузка будет только расти, вариант не подходит.
Причины вычислительной сложности задачи в общем-то понятны, для пропуска пакетов со второго необходимо вести список всех IP источников, а их там пара миллионов.
Возможно, кому-то известны какие-то способы/модули iptables для снижения нагрузки? Штатные средства не подойдут явно, но может кто какой модуль знает.