tcpdump оптимизация вывода

Сам себя не похвалишь, никто не похвалит 🙂

Есть сервер, используется для авторизации подключения к Wifi через SMS. Т.е. самодельный Captive portal. В нем все полностью из «говна и палок» сделано и настроено вручную, т.е. не разбираться с нормальным, готовым Captive portal’ом, а именно сделать свой.

На нем стоит nginx для захвата пакетов, php для веб морды, SMS-gate для отправки СМС сообщений, iptables + ipset для авторизации. dnsmasq и многое другое. И для логирования кто куда ходил, использую не как все нормальные люди netflow, а tcpdump.

Долгое время руки не доходили, но жесткий диск быстро забивался, через какое то время нужно было заходить, файлы выгружать, и вот эта вот вся рутина очень не очень. Плюс жесткий диск прям сильно напрягается от такой работы. Решил сделать буфер между tcpdump и записью на диск.

Идея была простая, летит несколько пакетов, т.е. все данные разбиваются по пакетам и отправляются маленькими порциями, и в секунду таких пакетов может быть десятки или сотни. Что если все их собрать, нам же важен не факт сколько данных было, и что в них было, это все равно бессмысленно. А вот кто куда когда ходил, это нужно.

Так вот, сказано сделано. Сначала попробовал написать программу на PHP.

сделано было к вечеру пятницы вроде бы, пришел в понедельник и увидел такое 🙂 Нет, все таки PHP создан родиться, сделать свою единицу работы и умереть. Он молодец, но в Web’е.

Тут я понял что не зря учил Go и решил написать на нем.

тут в общем видно не вооруженным глазом, что оптимизация очень неплохая.

Чтобы понять что было с диском в это время, можно посмотреть на этот график:

Ссылка на репозиторий с кодом https://github.com/rudinandrey/tcpdump_optimizer

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

Оставьте комментарий