…не используя connlimit, или ускорив его работу.
Есть роутер, выполняющий NAT. К нему подключено, условно, сто пользователей. Предположим, что выходной IP-адрес один.
Задача: запретить устанавливать больше 50000 соединений любому из пользователей к одному и тому же IP-адресу.
Иными словами, не дать единственному пользователю исчерпать порты на конкретный dst.
С большим удивлением обнаружил, что iptables connlimit
невероятно медленный, до невозможности его использования в реальных задачах: отправка 20000 SYN’ов за ~10 секунд положит маршрутизацию на мощном сервере на 15+ секунд, забив ядро 100% softinterrupts.
Других подходящий matcher’ов не нашел. Ничего другого, кроме как connlimit, в голову не приходит. Хоть пиши userspace + eBPF.
Обращаю внимание: мне нужно ограничить количество соединений от одного пользователя к любому IP-адресу в интернете, а не к какому-то конкретному. Не замедлить установку соединений во времени, не применить общий лимит ко всем пользователям разом.