К netgraph часто обращаются именно из-за необходимости подсчета трафика. Получать статистику можно несколькими способами, задействуя разные модули. Например, “врежем” модуль ng_tee в le0 между lower и upper уровнями Ethernet интерфейса. Этот модуль имеет такую же функциональность, как и стандартная утилита tee, дублирующая ввод.
Вручную его загружать не требуется, ядро это делает автоматически при первом обращении к нему. Крючки right и left являются стандартными для этого модуля и показывают, с какой стороны мы его подключаем (подробности в «man 4 ng_tee»).
# ngctl mkpeer le0: tee lower right # ngctl name le0:lower le0_tee # ngctl connect le0: lower upper left
Проверяем настройки:
# ngctl show le0: Name: le0 Type: ether ID: 00000003 Num hooks: 2 Local hook Peer name Peer type Peer ID Peer hook ———- ——— ——— ——- ——— upper le0_tee tee 00000006 left lower le0_tee tee 00000006 right
Чтобы получить статистику, нужно отправить сообщение getstats:
Более подробную информацию о проходящем трафике способен показать узел ng_netflow(4).
Итоговая информация экспортируется в виде, совместимом с популярным протоколом NetFlow компании Cisco. Поэтому для ее анализа можно использовать любой коллектор, поддерживающий этот протокол. Кстати, кроме ng_netflow есть еще ng_ipacct, но он не входит в стандартную поставку, а последняя версия на сайте ftp.wuppy.net.ru/pub/FreeBSD/local/kernel/ng_ipacct датирована декабрем 2006 года, поэтому не будем на нем останавливаться. Существует несколько схем подключения ng_netflow, мы разберем только одну из них. Начинаем:
# ngctl mkpeer le0: tee lower left # ngctl connect le0: le0:lower upper right
Создаем many-узел при помощи ng_one2many и подключаемся к нему:
Теперь для проверки вводим «ngctl list». Если модули загружены, запрашиваем таблицу подключений netflow:
# ngctl show netflow
Далее устанавливаем одну из утилит-коллекторов. Список некоторых коллекторов приведен на странице www.cse.wustl.edu/~cs5/567/traffic/index.html. Поиск в портах FreeBSD также дает нужный результат:
$ cd /usr/ports/ $ make search key=netflow
Например, выбираем flow-tools:
# cd /usr/ports/net-mgmt/flow-tools # make install
Захватываем пакеты с созданного сокета (подробная документация о flow-tools есть на сайте www.splintered.net/sw/flow-tools/docs/):
После этого в каталог /var/netflows будет складываться захваченная статистика, каждый час будет создаваться новый файл (-n 24). Файлы имеют бинарный формат, поэтому для просмотра используем специальные утилиты из комплекта flow-tools. Ключ ‘-f‘ указывает на формат вывода, при значении 10 будет выведен адрес источника и назначения, ключ ‘-S‘ отвечает за поле сортировки: