Врахування інтернет-трафіку орендарів (netflow)

Щодо статистики загалом, і netflow зокрема, є чимало досить великих статей (вивчення яких потребує пристойного часу). Тут я наведу свої скрипти as-is для не дуже складного ТЗ зі збирання та відправлення місячної статистики орендарям.

Декілька орендарів отримують інтернет через NAT (сам NAT зав'язаний через policy-routing на двох провайдерів). Кожен орендар має свій вілан. Вілан «розгортається» в мережу орендаря через керований комутатор. Кожному орендарю видається свій сегмент локальної мережі із забороною ходити до сусідніх сегментів.

Інструменти: використовується netflow на циску, flow-tools на лінуксі, MTA, cron.

Не буду її цитувати повністю, покажу тільки частину, що відноситься до netflow (тобто опущені ACL'и, NAT, DHCP для тих, хто його попросив і т.д.), крім того, показаний тільки один інтерфейс орендаря (інші строго за аналогією) :

Як відомо, vlan31 (192.168.31/24) — орендарі, аналогічно ± інші орендарі. Vlan255 - Vlan, через який надсилати дані (службовий). Інші значення зрозумілі і так. (Зверніть увагу на версію netflow, flow-tools не підтримують 9 версію).

Конфігурація flow-tools

Його потрібно встановити (для дебіана: aptitude install flow-tools). Налаштування /etc/flow-tools/capture.conf:

Зверніть увагу: netflow жере багато місця. Приготуйтеся до десятків гігабайт даних, які ще зберігати потрібно. Краще ці дані класти окремому розділі.

Обробка статистики

Власне, саме це є тема статті. Нам потрібно налаштувати по-перше фільтри за якими ми будемо відбирати інформацію, а по-друге, скрипт, який цю інформацію надішле комусь треба. Зараз орендарів не дуже багато, тождля кожного конфігурується окремо.

Фільтри потрібні для програми flow-nfilter, яка приймає на вхід двійковий flow, фільтрує його та видає на вихід знову ж таки двійковий flow.

Фільтри /etc/flow-tools/cfg/filter.cfg. Складаються із примтивів (грубо кажучи, назви для елементів фільтра) та фільтрів. При викликі flow-nfilter йому вказується ім'я фільтра, яким фільтрувати.

Ось приклад для двох орендарів:

Ключові моменти: скрипт надсилає статистику за минулий місяць. (Дякую відповідній опції date). flow обробляється двічі (мене швидкість поки що влаштовує, якщо почне гальмувати, потрібно буде робити фільтрацію у файл і запускати два звіти окремо). Перша обробка дає нам людину-читану цифру в мегабайтах, друга — табличку про те, хто скільки жере.

За необхідності (конфлікт/спор) можна буде руками (за допомогою flow-print і grep) видати повну статистику по кожному ланцюжку.

Я використовую фічі cron'а в debian, це трохи зручніше, ніж звичайно в unix — у нього є каталог /etc/cron.monthly. У ньому файл /etc/cron.monthly/rent-acc:

Цей файл, заодно, є файлом конфігурації для орендарів (проте, фільтри для нових потрібно руками прописувати!). Не забуваймо про chmod +x на цей файл.